Почему IronPython быстрее, чем официальный интерпретатор Python

В соответствии с этим:

http://www.codeplex.com/IronPython/Wiki/View.aspx?title=IP20VsCPy25Perf&referringTitle=IronPython%20Performance

IronPython (Python для .Net) быстрее обычного Python (cPython) на той же машине. Почему это? Я бы подумал, что скомпилированный код C всегда будет быстрее, чем эквивалентный байт-код CLI.

Ответ 1

Код Python не скомпилируется в C, сам Python написан на C и интерпретирует байт-код Python. CIL компилируется в машинный код, поэтому вы видите лучшую производительность при использовании IronPython.

Ответ 2

Вы правы, C намного быстрее. Вот почему в этих результатах CPython в два раза быстрее, когда речь идет о словарях, которые почти чисты C. С другой стороны, код Python не компилируется, он интерпретируется. Вызовы функций в CPython ужасно медленны. Но с другой стороны:

TryRaiseExcept:  +4478.9%

Теперь, там, где IronPython get, это ужасно неправильно.

И вот, есть этот проект PyPy, одна из целей - компилятор Just-In-Time. Существует даже подмножество Python, называемое RPython (Reduced Python), которое можно статически компилировать. Это, конечно, лот быстрее.

Ответ 3

Я точно не знаю, как вы делаете вывод, что IronPython быстрее CPython. Ссылка, которую вы публикуете, кажется, указывает на то, что они хороши в разных вещах (например, исключения, о которых было указано).

Ответ 4

Отбросив свой вопрос "Почему?", "О, правда?" "Хорошо в разных вещах" (Джейсон Бейкер) прямо. Например, cpython бьет IronPython сбрасывает время запуска.

c:\Python26\python.exe Hello.py
c:\IronPython\ipy.exe Hello.py

Cpython почти мгновенно выполняет базовый мир привет (< 100ms), где IronPython имеет накладные расходы на запуск 4 или 5 секунд. Это меня раздражает, но этого недостаточно, чтобы удержать меня от использования IronPython.

Ответ 5

Не может быть объяснено это обозначение на странице, на которую вы ссылались:

Из-за кэширования сайта в динамическом режиме Язык Runtime, IronPython выполняет лучше с большим количеством проходов PyStone, чем значение по умолчанию