Почему Jython намного медленнее, чем CPython, несмотря на продвижение JVM?

Нет пламенных войн, пожалуйста. Я, по общему признанию, не поклонник Java, но считаю JVM довольно приличной и хорошо оптимизированной виртуальной машиной. Он включен JIT и очень близок к общему знаменателю преобладающих архитектур процессора. Я бы предположил, что время выполнения CPython будет дальше от металла, чем соответствующая среда выполнения на основе JVM.

Если мои предположения верны, может кто-нибудь объяснить мне, почему Jython страдает такой большой потерей производительности по сравнению с CPython? Мое первоначальное предположение заключалось в том, что JVM был просто разработан для статических языков, и было сложно подключить к нему динамический. Однако Clojure представляется контрпримером к этой строке аргумента.

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

Я не могу понять, какая именно причина; любая помощь будет оценена.

Ответ 1

Имейте в виду, что IronPython был запущен одним из первоначальных разработчиков Jython (Джим Хьюгинин), пытаясь доказать, что .NET CLR была плохой платформой для динамических языков. В результате он оказался неверным, а ядро ​​IronPython в конечном итоге стало .NET Dynamic Language Runtime (создание других динамических языковых реализаций на .NET, таких как IronRuby, значительно проще в построении).

Итак, там есть две основные точки различия:

  • оригинальные разработчики .NET CLR выиграли от дополнительного опыта работы в отрасли по сравнению с ранними версиями JVM, позволяя им избежать известных проблем без обратной совместимости.
  • то же самое применимо для Джима, зная, какие ловушки избегать, основываясь на его опыте в Jython.

Добавьте в простой недостаток ресурсов для разработки, посвященных Jython по отношению как к CPython, так и к IronPython, а также к приоритетам развития Jython, которые были сосредоточены на том, чтобы довести его до сочетания с предыдущими версиями Python moreso, чем оптимизация скорости, и вполне понятно, что Jython отставание, когда дело доходило до скорости.

Тем не менее, Jython похож на CPython и IronPython, поскольку использование лучших алгоритмов часто превосходит более низкую производительность на микрообъектах. JVM/CLR также означает, что переход к Java или С# для определенных компонентов проще, чем переход к расширению C для CPython (хотя такие инструменты, как Cython, пытаются немного закрыть этот пробел).