Comments 27
Скажите, а какой период времени требуется для реализации вашей работы?
Python, наверное, стоило включить в голосование.
Для JVM уже есть JRebel, который сложно переплюнуть
Он работает на Android?
Если я не ошибаюсь, то в Andoid'е Dalvik, а не JVM, соответственно врядли.
Вот и ответ. Насчет переплюнуть.
Конечно же про JRebel мы знаем.
Мы не хотим переплюнуть.
Понятно что со своей VM у них более широкие возможности.
Зато мы сможем запустить почти везде.
Конечно же про JRebel мы знаем.
Мы не хотим переплюнуть.
Понятно что со своей VM у них более широкие возможности.
Зато мы сможем запустить почти везде.
Думается, что большая часть их работы заключалась именно в поддержке библиотек и фреймворков, а она там воистину великолепная.
Почему бы не .NET, для которой таких решений нет вовсе?
Почему бы не .NET, для которой таких решений нет вовсе?
> в поддержке библиотек и фреймворков
А можно поподробнее? В чем поддержка? У них свои библиотеки для работы в стиле livecoding или же имелось ввиду, что для популярных библиотек у них поддержка? Необходим какой-то особый фунционал для библиотек?
А можно поподробнее? В чем поддержка? У них свои библиотеки для работы в стиле livecoding или же имелось ввиду, что для популярных библиотек у них поддержка? Необходим какой-то особый фунционал для библиотек?
Поддержка начинается с серверов приложений (не знаю тонкостей, но полагаю, что есть какие-то различия) и заканчивается библиотеками.
К примеру, если я добавил какой-то бин в spring'е, то мне хочется, чтобы он был сразу инициализирован (стандартно инициализация проходит при старте приложения), JRebel это умеет. Или Hibernate, добавляем сущность и она сразу подхватывает базу, красота.
Возможно есть и какие-то более изощренные кейсы, но что-то не припомню.
К примеру, если я добавил какой-то бин в spring'е, то мне хочется, чтобы он был сразу инициализирован (стандартно инициализация проходит при старте приложения), JRebel это умеет. Или Hibernate, добавляем сущность и она сразу подхватывает базу, красота.
Возможно есть и какие-то более изощренные кейсы, но что-то не припомню.
Понятно что со своей VM у них более широкие возможности.
JRebel это не VM вообще.
Всенепременно Python. Хотя на реализацию C++ было бы интересно посмотреть, это звучит как очень нетривиальная задача.
Можно посмотреть на функциональные языки как эрланг, хаскель. Или на пролог, под него такого ещё точно нет.
Мы уже имеем опыт создания ливкодинга для компилируемых языков. При каждом сохранении кода, мы определяем где были изменения, и выделяем код в отдельные классы, которые компилируем в отдельный артефакт. Который подгружаем в работающее приложение. Все зависит от того как работает конкретный класслоадер.
Чем плоха сборка после сохранения, если у вас есть инкрементальный компилятор?
Racket/Clojure. С Lisp все это началось, туда логично вернуться.
Хотим Go ;)
На сайте написано, что у вас front-end tool, так ли это? Если да, то при чем тут C++? Честно говоря, слабо представляю, как вы хотите на лету обновлять части C++ приложения без потери состояния. Можно поподробнее, что произойдет в случае добавления одного поля в какой-то базовый для всей системы класс?
Вы смотрели раздел про JavaScript. Так же есть поддержка ActionScript. Он компилируется в байткод. Идея очень простая. Тело каждого метода трансформируется в один класс. Вызов в реальном методе, из которого реализацию «выдрали» переадресует вызов этому классу. Такой вот получается глобальный реестр методов. Классы заменяем, подгружаем. Подгрузка классов уже реализуется на уровне класслоадера. Главная загвоздка и трудозатраты в том, чтобы это правильно «выдрать» — трансформировать код. Тут важно написать правильные AST трасформации.

Плюс мы рассылаем события о обновлении, которые позволяют инстансам классов реагировать на изменения — например, перерисовавать свою графику и так далее.
По поводу полей — зависит от конкретного языка. Например, в AS мы все обращения к полям заменяли на вызовы методов — делали специальные getters. Так же меняли видимость мемберов, но главная заморочка была с protected и super вызовами.
Кстати в C++ уже кстати есть реализации ливкодинга. Не уверен что на тех же принципах строится, но есть.

Плюс мы рассылаем события о обновлении, которые позволяют инстансам классов реагировать на изменения — например, перерисовавать свою графику и так далее.
По поводу полей — зависит от конкретного языка. Например, в AS мы все обращения к полям заменяли на вызовы методов — делали специальные getters. Так же меняли видимость мемберов, но главная заморочка была с protected и super вызовами.
Кстати в C++ уже кстати есть реализации ливкодинга. Не уверен что на тех же принципах строится, но есть.
под avm2 (as3) уже был 'лайфкодинг' — A lisp compiler for the AVM2
github.com/aemoncannon/las3r
переписали исходники clojure(кроме многопоточности) на as3
>Если идея livecoding для вас в новинку, то посмотрите презентацию Bret Victor — www.youtube.com/watch?v=PUv66718DII.
еще можно сюда www.pawfal.org/fluxus/projects-using-fluxus/ посмотреть
fluxus это racket на opengl
github.com/aemoncannon/las3r
переписали исходники clojure(кроме многопоточности) на as3
>Если идея livecoding для вас в новинку, то посмотрите презентацию Bret Victor — www.youtube.com/watch?v=PUv66718DII.
еще можно сюда www.pawfal.org/fluxus/projects-using-fluxus/ посмотреть
fluxus это racket на opengl
Sign up to leave a comment.
COLT. В какой язык добавить Livecoding?