Comments 27
Скажите, а какой период времени требуется для реализации вашей работы?
0
Python, наверное, стоило включить в голосование.
+1
Для JVM уже есть JRebel, который сложно переплюнуть
0
Он работает на Android?
0
Если я не ошибаюсь, то в Andoid'е Dalvik, а не JVM, соответственно врядли.
0
Вот и ответ. Насчет переплюнуть.
Конечно же про JRebel мы знаем.
Мы не хотим переплюнуть.
Понятно что со своей VM у них более широкие возможности.
Зато мы сможем запустить почти везде.
Конечно же про JRebel мы знаем.
Мы не хотим переплюнуть.
Понятно что со своей VM у них более широкие возможности.
Зато мы сможем запустить почти везде.
+1
Думается, что большая часть их работы заключалась именно в поддержке библиотек и фреймворков, а она там воистину великолепная.
Почему бы не .NET, для которой таких решений нет вовсе?
Почему бы не .NET, для которой таких решений нет вовсе?
0
> в поддержке библиотек и фреймворков
А можно поподробнее? В чем поддержка? У них свои библиотеки для работы в стиле livecoding или же имелось ввиду, что для популярных библиотек у них поддержка? Необходим какой-то особый фунционал для библиотек?
А можно поподробнее? В чем поддержка? У них свои библиотеки для работы в стиле livecoding или же имелось ввиду, что для популярных библиотек у них поддержка? Необходим какой-то особый фунционал для библиотек?
0
Поддержка начинается с серверов приложений (не знаю тонкостей, но полагаю, что есть какие-то различия) и заканчивается библиотеками.
К примеру, если я добавил какой-то бин в spring'е, то мне хочется, чтобы он был сразу инициализирован (стандартно инициализация проходит при старте приложения), JRebel это умеет. Или Hibernate, добавляем сущность и она сразу подхватывает базу, красота.
Возможно есть и какие-то более изощренные кейсы, но что-то не припомню.
К примеру, если я добавил какой-то бин в spring'е, то мне хочется, чтобы он был сразу инициализирован (стандартно инициализация проходит при старте приложения), JRebel это умеет. Или Hibernate, добавляем сущность и она сразу подхватывает базу, красота.
Возможно есть и какие-то более изощренные кейсы, но что-то не припомню.
0
Понятно что со своей VM у них более широкие возможности.
JRebel это не VM вообще.
0
Всенепременно Python. Хотя на реализацию C++ было бы интересно посмотреть, это звучит как очень нетривиальная задача.
+6
Можно посмотреть на функциональные языки как эрланг, хаскель. Или на пролог, под него такого ещё точно нет.
0
UFO just landed and posted this here
Мы уже имеем опыт создания ливкодинга для компилируемых языков. При каждом сохранении кода, мы определяем где были изменения, и выделяем код в отдельные классы, которые компилируем в отдельный артефакт. Который подгружаем в работающее приложение. Все зависит от того как работает конкретный класслоадер.
0
Чем плоха сборка после сохранения, если у вас есть инкрементальный компилятор?
0
Racket/Clojure. С Lisp все это началось, туда логично вернуться.
+1
Хотим Go ;)
+1
На сайте написано, что у вас front-end tool, так ли это? Если да, то при чем тут C++? Честно говоря, слабо представляю, как вы хотите на лету обновлять части C++ приложения без потери состояния. Можно поподробнее, что произойдет в случае добавления одного поля в какой-то базовый для всей системы класс?
0
Вы смотрели раздел про JavaScript. Так же есть поддержка ActionScript. Он компилируется в байткод. Идея очень простая. Тело каждого метода трансформируется в один класс. Вызов в реальном методе, из которого реализацию «выдрали» переадресует вызов этому классу. Такой вот получается глобальный реестр методов. Классы заменяем, подгружаем. Подгрузка классов уже реализуется на уровне класслоадера. Главная загвоздка и трудозатраты в том, чтобы это правильно «выдрать» — трансформировать код. Тут важно написать правильные AST трасформации.
Плюс мы рассылаем события о обновлении, которые позволяют инстансам классов реагировать на изменения — например, перерисовавать свою графику и так далее.
По поводу полей — зависит от конкретного языка. Например, в AS мы все обращения к полям заменяли на вызовы методов — делали специальные getters. Так же меняли видимость мемберов, но главная заморочка была с protected и super вызовами.
Кстати в C++ уже кстати есть реализации ливкодинга. Не уверен что на тех же принципах строится, но есть.
Плюс мы рассылаем события о обновлении, которые позволяют инстансам классов реагировать на изменения — например, перерисовавать свою графику и так далее.
По поводу полей — зависит от конкретного языка. Например, в AS мы все обращения к полям заменяли на вызовы методов — делали специальные getters. Так же меняли видимость мемберов, но главная заморочка была с protected и super вызовами.
Кстати в C++ уже кстати есть реализации ливкодинга. Не уверен что на тех же принципах строится, но есть.
+2
под 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
0
Sign up to leave a comment.
COLT. В какой язык добавить Livecoding?