LINUX.ORG.RU

Программирование на Scala

 


0

0

Издательством Artima подготовлена к изданию книга "Programming in Scala, A comprehensive step-by-step guide", первая книга от авторов языка Scala.

Programming in Scala обучает функциональному программированию с точки зрения практикующего программиста и рассказывает об особенностях языка, которые помогут читателю стать более продуктивным в программировании

>>> Подробности

anonymous

Проверено: anonymous_incognito ()
Последнее исправление: maxcom (всего исправлений: 1)
Ответ на: комментарий от eao197

мм. безусловно круто конечно, но я честно говоря имел ввиду имел ввиду именно поменял файл с текстом - поменялась _уже запущенная_ программа. в джаве так можно - а именно это кажись и есть самаое интересно - что б не останвливая сервер править код. а такие фишки (мне кажется, если знаете реальный пример - поделитесь плз) нужны редко, да и там легко эмулируются HashMap-ом без особых нагромождений...

theos ★★★
()
Ответ на: комментарий от theos

> мм. безусловно круто конечно, но я честно говоря имел ввиду имел ввиду именно поменял файл с текстом - поменялась _уже запущенная_ программа. в джаве так можно - а именно это кажись и есть самаое интересно - что б не останвливая сервер править код. а такие фишки (мне кажется, если знаете реальный пример - поделитесь плз) нужны редко, да и там легко эмулируются HashMap-ом без особых нагромождений...

Насколько я помню (а на Java не программировал уже лет шесть) в Java нельзя заменить код класса/метода. Можно загрузить class-файл заново. Чем, собственно, и занимались Application Server-а для JSP: контролировали изменение jsp-файла, перекомпилировали его, выгружали старый class (или инициировали его выгрузку сборщиком мусора), затем подгружали новый class-файл. И вуаля -- в сервере работает новый код.

Для C++/D возможно то же самое: выгружается старая DLL-ка, компилируется ее новая версия и новая DLL-ка подгружается. Только здесь можно легко нарваться на повисшие ссылки и указатели.

Но, насколько я понимаю, все это работает для stateless объектов, которые можно выгрузить из приложения без потери данных. Если же мы имеем дело со statefull объектом, выгрузка которого ведет к потере данных, то нужно иметь горячую замену кода. Которая присутствует в SmallTalk, Ruby и Erlang. Применений ей можно найти массу, например, патчинг работающего сервера.

Думаю, что и отладчики Java-кода позволяют подправить исходник, перекомпилировать его и продолжить исполнение приостановленной программы с теми же самыми данными, но с новым кодом. По крайней мере в C++ такое возможно. Но здесь используются фокусы с отладочными режимами. Думаю, что в production server они не применяются.

eao197 ★★★★★
()
Ответ на: комментарий от eao197

>Применений ей можно найти массу, например, патчинг работающего сервера.

Рекомендую посмотреть на Сысоевский nginx - писано на С однако же апдейт на ходу делает! Причем даже для state_full_ ...
А вы мне тут жаба - жаба :)

anonymous
()
Ответ на: комментарий от theos

>кстати, я правильно понимаю, что к в ruby можно добавив в _код_ метод и получить его добавление в уже работающем приложении?

Чему только не могут удивляться люди, не работавшие с Фортом ;)

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

>Чему только не могут удивляться люди, не работавшие с Фортом ;)

Ну вообще меня это ни разу не удивляет - на джаве я этим пользуюсь постоянно. =) Хотя с фортом я действительно не имел знакомства =)

theos ★★★
()
Ответ на: комментарий от eao197

Ну если честно, то от JEE я очень далёк, да и опты на джаве у меня раза в 3 поменеьше =). Но когда я пишу плагин к пресловутому еклипсу, то во время его отладки, я могу менять его код(да, добавлять методы и менять вообще структура класс я не могу к сожалению) то он заменяется без каких либо изменений с объектом - все значения старые, все ссылки на этот объект сораняются, вобщем плагин прекрасно продолжает работать. Хотя вот можно ли такое организвать не в отладочном режиме - не знаю...

Вообще в языках типа Ruby такую возможность действительно сделать не особо сложно.

С дллками можно очень нарваться с сылками на соответствующие методы - они после перезапуска перестают быть валидными.

theos ★★★
()
Ответ на: комментарий от theos

>Ну вообще меня это ни разу не удивляет - на джаве я этим пользуюсь постоянно. =)

М... Расширение Java-кода в рантайме? Это как? Нет, у меня такое на Java в JBForth есть, но это (пока) - расширение не байткода JVM :)

KRoN73 ★★★★★
()
Ответ на: комментарий от theos

>да, добавлять методы и менять вообще структура класс я не могу к сожалению

Вот тут-то собака и порылась :) Кроме того, даже заменять код - можно только при наличии JDK. Его же скомпилить ещё надо...

KRoN73 ★★★★★
()
Ответ на: комментарий от theos

> Хотя вот можно ли такое организвать не в отладочном режиме - не знаю...

Думаю, что нельзя. Иначе это будет уже не безопасная система.

> Вообще в языках типа Ruby такую возможность действительно сделать не особо сложно.

Не только в Ruby это возможно. При разработке Erlang горячая замена кода была одной из важнейших характеристик языка. Про Форт не могу сказать ;)

eao197 ★★★★★
()
Ответ на: комментарий от KRoN73

Ну то что JDK нужен - это то как раз нормально. Ктож виноват что в ruby компайлер с интепритатором сшиты? =)

theos ★★★
()
Ответ на: комментарий от theos

>Ну то что JDK нужен - это то как раз нормально. Ктож виноват что в ruby компайлер с интепритатором сшиты? =)

Просто, сколько они весят, а сколько - Форт ;)

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

>> Ну то что JDK нужен - это то как раз нормально. Ктож виноват что в ruby компайлер с интепритатором сшиты? =)

> Просто, сколько они весят, а сколько - Форт ;)

Они и умеют побольше :D

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

>Но при этом весит чуть больше, чем само JRE, ага? :)

Сам по себе - чуть больше 250кБ :) Правда, так и не дошли ещё руки сделать генерацию настоящего байткода. Тогда несколько разжиреет. Зато сможет делать автономные .class/.jar :) Без JDK.

KRoN73 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.