Что быстрее, С++ или PAWN ?
#1

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

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

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

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

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

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

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

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

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

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

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

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


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

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


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

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

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

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

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

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

Quote:

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

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

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

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

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

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

канечно нет
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)