После нескольких лет перерыва в разработке вышла версия Jython2.5 - Java-реализации языка программирования Python. Возможности нового Jython соответствуют возможностям CPython2.5
Например, для того, чтобы использовать те Java-либы, аналогов которых нет в питоне, либо чтобы встраиваться в уже существующие Java проекты.
И не говорите, что все java либы имеют аналоги в питоне. Например, для диплома надо работать с онтологиями, и ничего даже отдаленно похожего на Jena ни в питоне, ни в других языках пока нету.
Разработчикам оно таки надо. Мне, вот, тоже. Глядишь, еще народ подтянется. Хотя есть альтернативы и не хуже - Rhino, например. Хотя есть очень интересные Clojure и Scala.
По памяти, у Jython пару версий назад производительность, таки, подправили. Было время, когда он тому же Perl'у сливал раз в 30. В последних версиях - быстродействие одного порядка было.
Это на числодробилке.
Надо будет на объектах пробенчить.
Ну и критический функционал в сабже всегда на Java можно реализовать.
Любопытно, надо будет глянуть на досуге.
Насчет зачем оно надо - ну, если не ошибаюсь, у него нет проблемы GIT-а к примеру так сказать. Памяти правда кушает больше, насчет скорости не знаю.
> Например, для того, чтобы использовать те Java-либы, аналогов которых нет в питоне, либо чтобы встраиваться в уже существующие Java проекты. > И не говорите, что все java либы имеют аналоги в питоне. Например, для диплома надо работать с онтологиями, и ничего даже отдаленно похожего на Jena ни в питоне, ни в других языках пока нету.
Ну, например, Jython - внутренний язык WSAdmin из вебсферы и WLST из веблоджика. Можно, конечно, рулить апп.серверами и из жава-утилы, но зачем админу лезть в дебри JMX, если можно воспользоваться знакомым питоном?
Сабж используют в HP, для скриптования Ъ-жаба-энтерпрайза. И надо сказать очень даже неплохо выходит. Штука однозначно полезная: скрипты, прототипирование, кастомизация аппликух (и все остальные области применения Cpython) только для джава-мира.
Соответственно, при таком подходе конечносу пользователю понадобится уже не JRE, а JDK. Плюс придётся или натаскать его делать javac, или делать системные вызовы из Java. Вроде бы, Java нормально компилировать себя в рантайме пока не умеет :) >> и тяжелее реализует подмену кода на лету.
> А зачем нужна "подмена кода на лету"?
Чтобы сервер не перезапускать по каждому чиху. >> бы не писать сразу на Си вместо PHP
> Не корректные аналогии. Сразу пейсать на Java вместо PHP - это большой позитив.
Совершенно корректное для тех, кто с этим работает. Точно также можно сказать, что писать сразу на Си вместо Перла - большой позитив :)
>Ну, я не "пейсатель диплома", а в реальной жизни для "жабабыдлокодинга" (с) (== нормальной денежной работы) хватает самой Джавы.
Иногда удобнее использовать скриптовые языки, для манипуляции исходниками без перекомпиляции. Интырпрайзрый пример: логика бизнес-процессов или логика docflow. Ее удобно править без перекомпиляций/передеплоев/рестартов сервака. А уж на боевых то серваках это иногда единственный способ исправить ошибку или внести дополнение. Там рестарты/перегрузки недопустимы.
http://pastebin.ca/1445937 - На числодробильне лучше питона (без психа):
miha@asm3:~/tmp$ jython testheap.py
result 290068052
Time : 420
result 290068052
Time : 3247
miha@asm3:~/tmp$ python2.5 testheap.py
result 290068052
Time : 526
result 290068052
Time : 2366
Но хуже, когда работает с кучей. Хотя при работе с кучей лучший результат у Джавы - http://lj.rossia.org/users/kouzdra/664091.html (откуда я и взял тест)
> Грубо говоря - ты спрашиваешь, почему бы не писать сразу на Си вместо PHP или Питона :)
Кстати, тут есть 3 интересных момента
1) много работы в случае с Java за тебя делает IDE. В случае динамически типизируемых языков такого не получится.
2) Генерики в Java, на мой взгляд, удобней динамической типизации Python.
3) С Java меньше времени уходит на тестирование, чем в случае с Python.
Итого - я сейчас даже не сказал бы, что производительность моего труда на Python сильно отличается от производительности при использовании Java. А вот скорость програм и их надежность возросла. Хотя для своей ниши - мелкого и средней руки скриптинга Python удобнее.
>1) много работы в случае с Java за тебя делает IDE. В случае динамически типизируемых языков такого не получится.
Много работы в случае Си за тебя делает IDE. В случае динамически типизируемых языков такого не получится. >2) Генерики в Java, на мой взгляд, удобней динамической типизации Python.
Кому-то генерики и в Си++ намного удобнее покажутся. А уж если с препроцессором :) >3) С Java меньше времени уходит на тестирование, чем в случае с Python.
Зато каждый цикл тестирования может потребовать рестарта системы. А с Питоном (PHP, Perl'ом) - поправил / посмотрел результат.
>питон не умеет во время работы программы перечитывать код
Питон - не знаю. Jython - умеет. У нас в L2J/L2Fortress квесты на Джайтоне перегружались на лету.
...
Нет, я, конечно, потом и класслоадер для Java сделал с таким же функционалом, но там требовалось ещё перед каждой перезагрузкой соответствующий java-файл компилить. Получалось намного дольше.
...
Хотя тут Jython всё равно тому же Форту сливает. В Форте можно было модифицировать код прямо из командной строки клиента :) Да и быстрее Джайтона он был раз в 30. Зато компилятор ошибки ловил хуже...
>Такое и в лиспе можно, в т.ч. для Java-реализаций.
Можно. Главное в скобках не запутаться. А то при вводе в командной строке клиента при ошибке исправить ввод нельзя, опять по-новой набивать, если что :)
А так на Форте писалось в духе:
"50 golds items-add" do-players
И всем игрокам сервера в онлайне накидывалось по 50 монет :) >Кстати, Jython разучился компилировать :(.
Ну, я в компилирующем варианте его и не использовал. Всё равно производительность та же, а без Jython-либ полученные *.class всё равно не работают.
Не помню. За эту часть системы не я отвечал, так что только краем глаза видел. Можешь порыться в сорцах - trac.balancer.ru/fortress
Там же и класслоадер на Java можешь посмотреть. Его уже я делал. Правда, только сам механизм и реилзован. На практике ничего на нём не сделали кроме тестов, команда раньше развалилась.