SA-MP Forums Archive
Что быстрее, С++ или PAWN ? - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: Non-English (https://sampforum.blast.hk/forumdisplay.php?fid=9)
+--- Forum: Languages (https://sampforum.blast.hk/forumdisplay.php?fid=33)
+---- Forum: Русский/Russian (https://sampforum.blast.hk/forumdisplay.php?fid=32)
+---- Thread: Что быстрее, С++ или PAWN ? (/showthread.php?tid=143004)



Что быстрее, С++ или PAWN ? - ^Woozie^ - 20.04.2010

Давайте порассуждаем. Мне всегда хотелось узнать, что будет быстрее. c++ или pawno?
ведь поидее чем проще язык тем быстрее они выполняются.

а есть языки типо php. который перед выполнением конвертируются в другой язык и только тогда выполняются(скорости не прибавляет)

* модер: название изменил так, чтобы не было оффтоп темой


Re: [OFF] Сложные и элементарные языки программl - dimonml - 20.04.2010

На мой взгляд, не совсем правильный посыл.

Каждый язык дает нам определенный уровень абстракции. Можно в hex редакторе набирать коды и, зная систему команд конкретного процессора, можно написать программу (раньше, так часто поступали на ранних этапах жизни новых архитектур процессоров). В вузе у меня были подобные лабораторные работы (правда процессор был с довольно простой системой команд, больше похожей на RISC)
Поскольку мы имеем дело с командами процессора (самый низкий уровень абстракции), то в теории это позволит написать самый эффективный "код".

Дальше идет ассемблер. Ассемблер дает возможность использовать не опкоды команд процессора (цифры), а более понятные человеку сущности. Данный язык дает возможность использовать все возможности процессора (из программы на ассемблере можно получить машинные коды, и теоретически, проделать обратную операцию), но уже дает определенное удобство человеку.

Дальше идут языки высокого уровня. Например язык с (ну и с++, хотя тот уже может оперировать более абстрактными вещами). Язык с изначально разрабатывался как язык для общего и системного программирования, для написания операционной системы UNIX. Он нужен был для абстракции от систем команд процессоров (ведь команды у каждого процессора свои, и ассемблер соответственно тоже свой), для того чтобы будущую операционную систему не переписывать заново для каждого нового компьютера. Когда первые системы Юникс появились, по оценкам специалистов они работали на 10% медленнее, чем могла бы работать этаже операционистка написанная полностью на ассемблере.

Но тем не менее, язык с разрабатывался и как язык для написания системного кода, который должен был быть как можно более эффективным. Именно по этому я языке присутствуют и полный набор битовых операций, и операций вида +=. К слову, в системе команд х86 нет команды чтобы исполнить сложение 2х операндов с записью результата в третий: a = b + c; Чтобы такую операцию скомпилировать в машинный код, необходимо несколько инструкций процессора, в то время как a += b; может быть скомпилирована намного эффективнее.

Язык С давал нам абстракцию на уровне исходных кодов, именно по этому в Юникс системах программы должны (желательно) распространяться в исходных кодах, чтобы их можно было скомпилировать на любом "железе".

Потом (по степени абстракции) пошли языки, которые компилировали не в машинный код, а в байт код для своей виртуальной машины (вижуал бейски, джава, дот нет, павн, белка, луна и множество других). После компиляции программ на таких языках, получается программа на другом языке. А потом эта программа транслируется или компилируется на месте уже на конкретном процессоре. Именно поэтому павн работает под линуксом и виндоусом, без перекомпиляции, а плагины написанные на с/с++ приходиться компилировать и туда и туда. А поскольку у нас выходит еще один процессор по сути (виртуальная машина), то как правило такие языки более медленны, чем те языки, которые компилируют непосредственно в машинные код. Но тут уже появляется очень много нюансов.

Современные компиляторы с++ могут до неузнаваемости изменить программу, чтобы она могла выполняться быстрей, современные виртуальные машины способны подстраиваться под ход выполнения программы и в разы увеличивать скорость (кто работал с джавой на ресурсоемких задачах должен знать виртуальную машину от оракла, ДжиРокет, которая может творить "чудеса" по скорости работы на некоторых задачах).

И у каждого языка есть его предназначение, то, для чего он разрабатывался. Язык С создавался чтобы писать операционные системы и прикладные программы и в этом он силен, Фортран создавался для научных расчетов и до сих пор не может быть заменен ничем другим, Паскаль создавался как язык для обучению программированию и он академически красив


Так что можно делать общие рассуждения, вот язык С компилируется в машинный код, поэтому он быстрее чем интерпретируемые языки типа павн, но это не совсем правильный подход.

Правильнее сравнивать решение конкретных задач. И смотреть на используемые ресурсы: время на разработку программы, использование получившейся программой памяти, использование процессорного времени, масштабируемость. А вот тут уже становиться все совсем сложно, так как зачастую под каждый язык, для решения одинаковых задач приходиться писать совсем разные алгоритмы, а на некоторых языках многие задачи решить не возможно.


В итоге, ответ на поставленный вопрос такой: если совсем коротко, то С++ быстрей С, а тот быстрей pawn. А если развернуто, то заранее не известно и нужно смотреть конкретную задачу.

ЗЫ: ну и под конец, часто (почти всегда) более важную роль занимают алгоритмы, архитектура программ, а не язык программирования


Re: Что быстрее, С++ или PAWN ? - MX_Master - 21.04.2010

Я поддерживаю dimonml в том, что от алгоритмов зависит так называемое быстродействие. Ведь можно и на С сбацать такой неоптимизированный код, который будет работать менее эффективно и медленнее, чем оптимизированый на языке PAWN.

Если говорить об одинаковом уровне оптимизации, то С канеш выполняется быстрее PAWN, если можно так сказать.


Re: Что быстрее, С++ или PAWN ? - ^Woozie^ - 21.04.2010

Гм.. Есть ли в pawno что нить типо типо big integer?


Re: Что быстрее, С++ или PAWN ? - Zeex - 21.04.2010

Неа, не надо путать с Си, в пешке нет типов, все из ячеек....
В принципе можно соорудить большииие числа из массивов с помощью битовых операций и сделать свои спец. функции, но так ли оно надо? В смысле 4 миллиарда уже мало чтоль?


Re: Что быстрее, С++ или PAWN ? - Romanius - 21.04.2010

Quote:

Гм.. Есть ли в pawno что нить типо типо big integer?

long не знаю есть ли такое в павн.... но в си есть


Re: Что быстрее, С++ или PAWN ? - ^Woozie^ - 21.04.2010

long в pawno это просто слово, а не тип переменной.
в Java находил ему применение, в с+ не пробовал.


Re: Что быстрее, С++ или PAWN ? - JesterX - 21.04.2010

Зачем в pawn такие большие числа типа long? Нет практического применения.


Re: Что быстрее, С++ или PAWN ? - Evgeni_Degerev - 22.04.2010

можно ли колдуя со стеком опкодами выполнять команды реального процессора на абстрактной машине?

Quote:
Originally Posted by JesterX
канечно нет
жаль,просто cleo вспопмнил


Re: Что быстрее, С++ или PAWN ? - JesterX - 22.04.2010

канечно нет