После нескольких лет перерыва в разработке вышла версия Jython2.5 - Java-реализации языка программирования Python. Возможности нового Jython соответствуют возможностям CPython2.5
[#]
Ответ на: Re: Jython 2.5 от Bioreactor 22.06.2009 17:03:37
Re: Jython 2.5
Угу. Плюс от написанного. Тот Python-бенчмарк, что я привел выше, по читабельности хуже Java. Плюс я не мог долго привыкнуть к тому, что половину работы за меня делает Emacs или NetBeans.
> Разве что в случае eval - питон не умеет во время работы программы перечитывать код
Дарю "концепт":
import os
f = open('ext.py','w')
f.write('def func():\n return \':(\'\n')
f.close()
import ext
print ext.func()
os.unlink('ext.pyc')
f = open('ext.py','w')
f.write('def func():\n return \':)\'\n')
f.close()
reload(ext)
print ext.func()
ожидается что программа напечатает
:(
:)
> Дарю "концепт"
Это, по результату, мало отличается о eval. Даже хуже, поскольку в случае с eval, в некоторых случаях мы можем подхватить контекст программы, а в случае полного перечитывания - нет. Мне же важно нечто вроде лисповского REPL, когда я поправил код и тут же скормил его уже выполняющейся программе. Как это негеморойно сделать без eval я не знаю.
Где я провоцирую? Если есть что сказать по делу - скажи. Я всегда рад поправить свои знания. Тем более, что я на Python пишу много и язык мне нравится.
IDE vs vim/emacs - где-то лучше одно, где-то другое. Нет темы для холивара.
статическая vs динамическая типизация - холивар. См. п.1 Хотя мне лично больше нравятся генерики. Но по ситуации. Нет темы для холивара.
Пользуя как жабу, так и питон у меня лично примерно одинаковые затраты времени, о чем я и сказал. У кого-то может быть по другому. Области их применения тоже различны, снова нет темы для холивара.
> Это, по результату, мало отличается о eval. Даже хуже, поскольку в
> случае с eval, в некоторых случаях мы можем подхватить контекст
> программы, а в случае полного перечитывания - нет
Не понимаю о каком контексте и каком "полном перечитывании" тут идёт
речь - я в образце сформировал модуль - загрузил - удалил откомпилированный файл -
сформировал новый модуль - перезагрузил.
А программа как выполнялась, так и выполняется.
Некоторым приближением к лисповскому REPL наверное можно считать такой код:
code = compile('def func():\n return \':(\'\nx=1\n', '<string>', 'exec')
exec code
print func(), x
code = compile('def func():\n return \':)\'\nx=2\n', '<string>', 'exec')
exec code
print func(), x
Да, конечно, без compile и eval/exec не обойтись.
Но и геморроя в таком коде (если пренебречь компилируемым выражением) я не вижу.