Ок, спасибо за идеи. Ну как только станет превращаться — сразу бросим это дело :) Обещаем :)
Пока фунционал выглядит как полезный и быстро реализуемый.
то есть то что есть интерпретатор особо ничего не дает.
эвал все же не совсем livecoding.
в JS есть eval, но нам потребовалось потратить большие усилия чтобы сделать livecoding для JS.
до этого мы делали для AS и я бы не сказал что JS livecoding было сделать проще.
Вы смотрели раздел про JavaScript. Так же есть поддержка ActionScript. Он компилируется в байткод. Идея очень простая. Тело каждого метода трансформируется в один класс. Вызов в реальном методе, из которого реализацию «выдрали» переадресует вызов этому классу. Такой вот получается глобальный реестр методов. Классы заменяем, подгружаем. Подгрузка классов уже реализуется на уровне класслоадера. Главная загвоздка и трудозатраты в том, чтобы это правильно «выдрать» — трансформировать код. Тут важно написать правильные AST трасформации.
Плюс мы рассылаем события о обновлении, которые позволяют инстансам классов реагировать на изменения — например, перерисовавать свою графику и так далее.
По поводу полей — зависит от конкретного языка. Например, в AS мы все обращения к полям заменяли на вызовы методов — делали специальные getters. Так же меняли видимость мемберов, но главная заморочка была с protected и super вызовами.
Кстати в C++ уже кстати есть реализации ливкодинга. Не уверен что на тех же принципах строится, но есть.
Мы уже имеем опыт создания ливкодинга для компилируемых языков. При каждом сохранении кода, мы определяем где были изменения, и выделяем код в отдельные классы, которые компилируем в отдельный артефакт. Который подгружаем в работающее приложение. Все зависит от того как работает конкретный класслоадер.
А, я понял. То есть некоторые события изменения кода специальным образом обрабатываются для определенных библиотек. То есть вместо того чтобы самому это обрабатывать, за нас это уже сделано. Действительно здорово. Спасибо.
> в поддержке библиотек и фреймворков
А можно поподробнее? В чем поддержка? У них свои библиотеки для работы в стиле livecoding или же имелось ввиду, что для популярных библиотек у них поддержка? Необходим какой-то особый фунционал для библиотек?
Вот и ответ. Насчет переплюнуть.
Конечно же про JRebel мы знаем.
Мы не хотим переплюнуть.
Понятно что со своей VM у них более широкие возможности.
Зато мы сможем запустить почти везде.
Ждите через две недели.
для редактирования JS добавить Ace
Пока фунционал выглядит как полезный и быстро реализуемый.
эвал все же не совсем livecoding.
в JS есть eval, но нам потребовалось потратить большие усилия чтобы сделать livecoding для JS.
до этого мы делали для AS и я бы не сказал что JS livecoding было сделать проще.
Плюс мы рассылаем события о обновлении, которые позволяют инстансам классов реагировать на изменения — например, перерисовавать свою графику и так далее.
По поводу полей — зависит от конкретного языка. Например, в AS мы все обращения к полям заменяли на вызовы методов — делали специальные getters. Так же меняли видимость мемберов, но главная заморочка была с protected и super вызовами.
Кстати в C++ уже кстати есть реализации ливкодинга. Не уверен что на тех же принципах строится, но есть.
Но все же хочется делать что-то для массового пользователя :)
А можно поподробнее? В чем поддержка? У них свои библиотеки для работы в стиле livecoding или же имелось ввиду, что для популярных библиотек у них поддержка? Необходим какой-то особый фунционал для библиотек?
Конечно же про JRebel мы знаем.
Мы не хотим переплюнуть.
Понятно что со своей VM у них более широкие возможности.
Зато мы сможем запустить почти везде.