Согласно этому:
IronPython (Python для .Net) работает быстрее, чем обычный Python (cPython) на той же машине. Почему это? Я бы подумал, что скомпилированный код C всегда будет быстрее, чем эквивалентный байт-код CLI.
Согласно этому:
IronPython (Python для .Net) работает быстрее, чем обычный Python (cPython) на той же машине. Почему это? Я бы подумал, что скомпилированный код C всегда будет быстрее, чем эквивалентный байт-код CLI.
Код Python не компилируется в C, сам Python написан на C и интерпретирует байт-код Python. CIL компилируется в машинный код, поэтому вы видите лучшую производительность при использовании IronPython.
Вы правы, C намного быстрее. Вот почему в этих результатах CPython в два раза быстрее, когда речь идет о словарях, которые являются почти чистым C. С другой стороны, код Python не компилируется, он интерпретируется. Вызовы функций в CPython ужасно медленные. Но с другой стороны:
TryRaiseExcept: +4478.9%
Вот где IronPython ужасно ошибается.
А еще есть этот проект PyPy, одной из целей которого является компилятор Just-In-Time. Существует даже подмножество Python, называемое RPython (Reduced Python), которое можно статически скомпилировать. Что, конечно, намного быстрее.
Я не уверен, как именно вы делаете вывод, что IronPython быстрее, чем CPython. Ссылка, которую вы публикуете, похоже, указывает на то, что они хороши в разных вещах (например, в исключениях, как было указано).
Переход от вашего вопроса «Почему?» к «О, правда?» «Хороший в разных вещах» (Джейсон Бейкер) прав. Например, cpython превосходит IronPython по времени запуска.
c:\Python26\python.exe Hello.py
c:\IronPython\ipy.exe Hello.py
Cpython выполняет базовый приветственный мир почти мгновенно (‹100 мс), в то время как у IronPython накладные расходы на запуск составляют 4 или 5 секунд. Это меня раздражает, но не настолько, чтобы удержать меня от использования IronPython.
Может ли это быть объяснено этой записью на странице, на которую вы ссылаетесь:
Из-за кэширования сайта в среде выполнения Dynamic Language Runtime IronPython работает лучше с большим количеством проходов PyStone, чем значение по умолчанию.