Re[4]: Что мы потеряли?
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 30.08.06 08:47
Оценка:
VladD2,

M>> Возможности замены работающих модулей на лету до сих пор нет нигде, кроме тех же Лиспа и Эрланга (ну и наверняка других, не менее экзотических языков).


VD>Серьезно? А мужики то не знали и даже на VB5 это делали.


Можно порадоваться за Васик, но он здесь не к месту. Такая "горячая замена" есть для любого интерпретатора и называется она "переписывание исходников". Поэтому, имхо, VB5 не эквивалент ниразу.

Чуть усложнили язык — и привет. Такие вещи как статическая типизация и инкапсуляция являясь преимуществами с одной стороны оборачиваются большими препятствиями со стороны hot upgrade. (Например, я обновил интерфейс класса, как мне теперь обновить все объекты этого класса? Все ссылки на эти объекты? Если я заменил класс двумя классами? Если сделал рефакторинг?) Кстати, наиболее продвинутая в этом вопросе Ява также ещё далека от совершенства (я о HotSwap).

Вот что понимают под горячей заменой кода другие люди :
1. Переход от старого к новому коду и обратно так же эффективен для выполняемого кода, как и отсутствие перехода. (Это совсем не то, что например "горячая замена" JSP-формы, что вызывает генерацию и перекомпиляцию соответствующего сервлета и является по сути маленькой кнопочкой "reset").
2. Контроль за гранулярностью загрузки.
3. Контроль над процессом загрузки (в т.ч. и откат).
4. Слабые условия на новый код, произвольный старый код.
5. Замена (то есть загрузка кода и передача управления) выполняется автоматически средой.

Между прочим, такая горячая замена у компилируемых языков есть только у динамически типизированных (Erlang, Lisp, Smalltalk). А REPL вообще только для двух последних. Совпадение?
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.