Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 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, пытаются немного закрыть этот пробел).