Почему Jython намного медленнее, чем CPython, несмотря на достижения JVM? - PullRequest
37 голосов
/ 15 февраля 2011

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

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

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

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

1 Ответ

21 голосов
/ 15 февраля 2011

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

Итак, есть два основных моментаздесь есть разница:

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

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

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

...