Pull to refresh

Comments 27

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

image

Плюс мы рассылаем события о обновлении, которые позволяют инстансам классов реагировать на изменения — например, перерисовавать свою графику и так далее.

По поводу полей — зависит от конкретного языка. Например, в 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
то есть то что есть интерпретатор особо ничего не дает.
эвал все же не совсем livecoding.
в JS есть eval, но нам потребовалось потратить большие усилия чтобы сделать livecoding для JS.
до этого мы делали для AS и я бы не сказал что JS livecoding было сделать проще.
Sign up to leave a comment.