LINUX.ORG.RU

Jython 2.5

 , , ,


0

0

После нескольких лет перерыва в разработке вышла версия Jython2.5 - Java-реализации языка программирования Python. Возможности нового Jython соответствуют возможностям CPython2.5

>>> Подробности

★★★★

Проверено: boombick ()
Ответ на: комментарий от KRoN73

> поправил / посмотрел результат.
Разве что в случае eval - питон не умеет во время работы программы перечитывать код

cab ★★★★
() автор топика
Ответ на: комментарий от cab

>питон не умеет во время работы программы перечитывать код

Питон - не знаю. Jython - умеет. У нас в L2J/L2Fortress квесты на Джайтоне перегружались на лету.

...

Нет, я, конечно, потом и класслоадер для Java сделал с таким же функционалом, но там требовалось ещё перед каждой перезагрузкой соответствующий java-файл компилить. Получалось намного дольше.

...

Хотя тут Jython всё равно тому же Форту сливает. В Форте можно было модифицировать код прямо из командной строки клиента :) Да и быстрее Джайтона он был раз в 30. Зато компилятор ошибки ловил хуже...

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

> В Форте можно было модифицировать код прямо из командной строки клиента :)

Такое и в лиспе можно, в т.ч. для Java-реализаций.

Кстати, Jython разучился компилировать :(.

cab ★★★★
() автор топика
Ответ на: комментарий от cab

>Такое и в лиспе можно, в т.ч. для Java-реализаций.

Можно. Главное в скобках не запутаться. А то при вводе в командной строке клиента при ошибке исправить ввод нельзя, опять по-новой набивать, если что :)

А так на Форте писалось в духе:

"50 golds items-add" do-players

И всем игрокам сервера в онлайне накидывалось по 50 монет :)

>Кстати, Jython разучился компилировать :(.


Ну, я в компилирующем варианте его и не использовал. Всё равно производительность та же, а без Jython-либ полученные *.class всё равно не работают.

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

> Jython - умеет. У нас в L2J/L2Fortress квесты на Джайтоне перегружались на лету.

Кстати, как это делал?

cab ★★★★
() автор топика
Ответ на: комментарий от cab

>Кстати, как это делал?

Не помню. За эту часть системы не я отвечал, так что только краем глаза видел. Можешь порыться в сорцах - trac.balancer.ru/fortress

Там же и класслоадер на Java можешь посмотреть. Его уже я делал. Правда, только сам механизм и реилзован. На практике ничего на нём не сделали кроме тестов, команда раньше развалилась.

KRoN73 ★★★★★
()
Ответ на: комментарий от cab

> Разве что в случае 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()


ожидается что программа напечатает
:(
:)

ZV
()
Ответ на: комментарий от ZV

> Дарю "концепт"
Это, по результату, мало отличается о eval. Даже хуже, поскольку в случае с eval, в некоторых случаях мы можем подхватить контекст программы, а в случае полного перечитывания - нет. Мне же важно нечто вроде лисповского REPL, когда я поправил код и тут же скормил его уже выполняющейся программе. Как это негеморойно сделать без eval я не знаю.

cab ★★★★
() автор топика
Ответ на: комментарий от cab

> Это, по результату, мало отличается о 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 не обойтись. 
Но и геморроя в таком коде (если пренебречь компилируемым выражением) я не вижу.

ZV
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.