Замена кода "на лету"
От: md03t4  
Дата: 15.06.09 10:23
Оценка:
Я знаю, что subj реализован в Erlang-е.
Есть ли еще языки/системы, где реализован похожий функционал?
Re: Замена кода "на лету"
От: SergH Россия  
Дата: 15.06.09 10:24
Оценка:
Здравствуйте, md03t4, Вы писали:

M>Я знаю, что subj реализован в Erlang-е.

M>Есть ли еще языки/системы, где реализован похожий функционал?

Загрузка dll?

Делай что должно, и будь что будет
Re: Замена кода "на лету"
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 15.06.09 10:25
Оценка:
Здравствуйте, md03t4, Вы писали:

M>Я знаю, что subj реализован в Erlang-е.

M>Есть ли еще языки/системы, где реализован похожий функционал?

В Ruby.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re: Замена кода "на лету"
От: Aen Sidhe Россия Просто блог
Дата: 15.06.09 10:41
Оценка:
Здравствуйте, md03t4, Вы писали:

M>Я знаю, что subj реализован в Erlang-е.

M>Есть ли еще языки/системы, где реализован похожий функционал?

Что подразумевается под этим? А то, вон в дотнете такое возможно.
С уважением, Анатолий Попов.
ICQ: 995-908
Re[2]: Замена кода "на лету"
От: Cyberax Марс  
Дата: 15.06.09 10:42
Оценка:
Здравствуйте, Aen Sidhe, Вы писали:

M>>Я знаю, что subj реализован в Erlang-е.

M>>Есть ли еще языки/системы, где реализован похожий функционал?
AS>Что подразумевается под этим?
Замена работающего кода.

AS>А то, вон в дотнете такое возможно.

Невозможно.
Sapienti sat!
Re: Замена кода "на лету"
От: Quintanar Россия  
Дата: 15.06.09 10:47
Оценка: +2
Здравствуйте, md03t4, Вы писали:

M>Я знаю, что subj реализован в Erlang-е.

M>Есть ли еще языки/системы, где реализован похожий функционал?

Думаю, для любого интерпретируемого языка с проверкой типов во время исполнения такое элементарно реализовывается.
Классический пример — Лисп.
Re[3]: Замена кода "на лету"
От: Aen Sidhe Россия Просто блог
Дата: 15.06.09 10:49
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Здравствуйте, Aen Sidhe, Вы писали:


M>>>Я знаю, что subj реализован в Erlang-е.

M>>>Есть ли еще языки/системы, где реализован похожий функционал?
AS>>Что подразумевается под этим?
C>Замена работающего кода.

Непонимаю.

AS>>А то, вон в дотнете такое возможно.

C>Невозможно.

А как же тогда ASP.NET работает? Перезаписал dll, код для новых запросов — новый. Или это не то?
С уважением, Анатолий Попов.
ICQ: 995-908
Re[4]: Замена кода "на лету"
От: Cyberax Марс  
Дата: 15.06.09 10:52
Оценка:
Здравствуйте, Aen Sidhe, Вы писали:

C>>Замена работающего кода.

AS>Непонимаю.
Что тут непонятного? Erlang позволяет заменять код уже загруженных и работающих модулей.

AS>>>А то, вон в дотнете такое возможно.

C>>Невозможно.
AS>А как же тогда ASP.NET работает? Перезаписал dll, код для новых запросов — новый.
А ещё можно приложение перезапустить. Тоже код заменится!

AS>Или это не то?

Совсем.
Sapienti sat!
Re[5]: Замена кода "на лету"
От: Aen Sidhe Россия Просто блог
Дата: 15.06.09 10:54
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Здравствуйте, Aen Sidhe, Вы писали:


C>>>Замена работающего кода.

AS>>Непонимаю.
C>Что тут непонятного? Erlang позволяет заменять код уже загруженных и работающих модулей.

Непонятно то, что дотнет тоже это позволяет. Мне никто не мешает выгрузить пару сборок (вместе , загрузить другие и заставить их работать).

Всё, что описано здесь возможно.

AS>>Или это не то?

C>Совсем.

Укажите разницу.
С уважением, Анатолий Попов.
ICQ: 995-908
Re[6]: Замена кода "на лету"
От: Cyberax Марс  
Дата: 15.06.09 11:00
Оценка:
Здравствуйте, Aen Sidhe, Вы писали:

C>>Что тут непонятного? Erlang позволяет заменять код уже загруженных и работающих модулей.

AS>Непонятно то, что дотнет тоже это позволяет. Мне никто не мешает выгрузить пару сборок (вместе , загрузить другие и заставить их работать).
AS>Всё, что описано здесь возможно.
Ещё раз — можно менять уже работающий код.

Грубо говоря, оно было бы таким же, если бы можно было для:
class Blah
{
    int a, b;
}

В рантайме добавить ко всем существующим инстансам этого класса новое поле или поменять тип поля.
Sapienti sat!
Re: Замена кода "на лету"
От: Lazy Cjow Rhrr Россия lj://_lcr_
Дата: 15.06.09 11:01
Оценка: 44 (6)
md03t4,

M>Я знаю, что subj реализован в Erlang-е.

M>Есть ли еще языки/системы, где реализован похожий функционал?

С очень маленькой гранулярностью (единица загрузки — символ)
Lisp, Scheme, J, K, ... ну можно даж до Васика наверное дойти

С маленькой гранулярностью (единица загрузки — функция/метод, бинд или тип)
Haskell (библиотека hs-plugins), .net dml, C (с мегахаком
Автор: Lazy Cjow Rhrr
Дата: 01.02.07
), Smalltalk

Со средней гранулярностью (единица загрузки — класс/модуль)
Java, Ocaml

С большой гранулярностью (единица загрузки — домен)
.net 1.0

// Не уверен насчёт Смоллтока, возможно там-таки очень маленькая гранулярность
quicksort =: (($:@(<#[),(=#[),$:@(>#[)) ({~ ?@#)) ^: (1<#)
Re[2]: Замена кода "на лету"
От: md03t4  
Дата: 15.06.09 11:01
Оценка:
Здравствуйте, Quintanar, Вы писали:

Q>Здравствуйте, md03t4, Вы писали:


M>>Я знаю, что subj реализован в Erlang-е.

M>>Есть ли еще языки/системы, где реализован похожий функционал?

Q>Думаю, для любого интерпретируемого языка с проверкой типов во время исполнения такое элементарно реализовывается.

Q>Классический пример — Лисп.
Для любого интерпретируемого, или любого функционального?
Как выгрузить модуль (любую другую единицу компиляции), если ссылки на его переменные могут быть со[ранены в других модулях? функции в чистом функциональном языке не имеют сторонних эффектов, чистый функциональный язык не имеет и глобальных переменных, да и переменных как таковых не имеет , но лисп не таков. Руби — тем более. Простая замена DLL — в двойне "тем более".
Спасибо, я покопаю Руби, попытаюсь понять как там это сделано, если сделано. Пока мне не удалось ничего похожего найти.
Re: Замена кода "на лету"
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 15.06.09 11:03
Оценка:
Здравствуйте, md03t4, Вы писали:

M>Я знаю, что subj реализован в Erlang-е.

M>Есть ли еще языки/системы, где реализован похожий функционал?

Кроме названного — Python, перезагрузка модулями.
The God is real, unless declared integer.
Re[5]: Замена кода "на лету"
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 15.06.09 11:04
Оценка:
Здравствуйте, Cyberax, Вы писали:

AS>>>>А то, вон в дотнете такое возможно.

C>>>Невозможно.
AS>>А как же тогда ASP.NET работает? Перезаписал dll, код для новых запросов — новый.
C>А ещё можно приложение перезапустить. Тоже код заменится!
В случае asp.net при изменении страницы приложение не перезапускается.

В принципе вполне возможно заменять код в .NET, приседаний много надо
Re[7]: Замена кода "на лету"
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 15.06.09 11:06
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Здравствуйте, Aen Sidhe, Вы писали:


C>>>Что тут непонятного? Erlang позволяет заменять код уже загруженных и работающих модулей.

AS>>Непонятно то, что дотнет тоже это позволяет. Мне никто не мешает выгрузить пару сборок (вместе , загрузить другие и заставить их работать).
AS>>Всё, что описано здесь возможно.
C>Ещё раз — можно менять уже работающий код.

C>Грубо говоря, оно было бы таким же, если бы можно было для:

C>
C>class Blah
C>{
C>    int a, b;
C>}
C>

C>В рантайме добавить ко всем существующим инстансам этого класса новое поле или поменять тип поля.

А где здесь работающий код?
Re[7]: Замена кода "на лету"
От: Aen Sidhe Россия Просто блог
Дата: 15.06.09 11:09
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Здравствуйте, Aen Sidhe, Вы писали:


C>>>Что тут непонятного? Erlang позволяет заменять код уже загруженных и работающих модулей.

AS>>Непонятно то, что дотнет тоже это позволяет. Мне никто не мешает выгрузить пару сборок (вместе , загрузить другие и заставить их работать).
AS>>Всё, что описано здесь возможно.
C>Ещё раз — можно менять уже работающий код.

Очевидно, в примере с ASP.NET меняется не работающий код. Я вас правильно понял?

C>В рантайме добавить ко всем существующим инстансам этого класса новое поле или поменять тип поля.


Ну, к существующим нельзя так вот просто сделать. К новым — легко. Буквально, одна строка кода/одна настройка в конфиге
С уважением, Анатолий Попов.
ICQ: 995-908
Re[8]: Замена кода "на лету"
От: Cyberax Марс  
Дата: 15.06.09 11:16
Оценка:
Здравствуйте, Aen Sidhe, Вы писали:

C>>Ещё раз — можно менять уже работающий код.

AS>Очевидно, в примере с ASP.NET меняется не работающий код. Я вас правильно понял?
Да. В примере с ASP.NET загружается новый код, который просто начинает обслуживать новые запросы.

C>>В рантайме добавить ко всем существующим инстансам этого класса новое поле или поменять тип поля.

AS>Ну, к существующим нельзя так вот просто сделать. К новым — легко. Буквально, одна строка кода/одна настройка в конфиге
Нет, не легко. Например, если я передам в новый код инстанс старого класса — получится фигня.
Sapienti sat!
Re[3]: Замена кода "на лету"
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 15.06.09 11:21
Оценка: 16 (3) +1
Здравствуйте, md03t4, Вы писали:

M>Для любого интерпретируемого, или любого функционального?

M>Как выгрузить модуль (любую другую единицу компиляции), если ссылки на его переменные могут быть со[ранены в других модулях? функции в чистом функциональном языке не имеют сторонних эффектов, чистый функциональный язык не имеет и глобальных переменных, да и переменных как таковых не имеет :), но лисп не таков. Руби — тем более. Простая замена DLL — в двойне "тем более".

Я использовал это в Питоне. У него, с одной стороны, можно переопределять практически всё (например, определения класса), с другой стороны, старые определения сохраняются, пока на них есть ссылки. В результате получается следующий эффект. Если использовать, например, так:

from Module import Class
...
c = Class()

то импорт срабатывает на этапе компиляции вызывающего модуля. В результате перезагрузки Module.Class уже новый, но заимпортированная ссылка — старая. Если же написать

import Module
...
c = Module.Class()

то разрешение происходит в момент вызова Class(), и грузится новый код.

Думаю, в Ruby эффекты не отличаются. В результате такого подхода, может быть произвольное количество копий старых определений, пока они используются. Это определённый плюс — по сравнению с Erlang, например, где может быть только текущая и предыдущая копия — но тут же и минус: процесс перехода может растянуться надолго. Эффекты от необходимости перезапускать операции "from X import Y" обсуждаются, например, здесь, вместе с методами надёжного перезапуска. Но для разных случаев надо это делать достаточно по-разному. У меня, например, получались группы модулей, внутри которых связи надо было обновлять сразу, а за их пределами — не обязательно или вообще нежелательно (объект должен доработать с кодом своего класса, а не с обновлённым).

В последних версиях делал перезагрузку модуля специальной функцией, которая до и после этого вызывала в нём специальные хуки (_prereload, _postreload). Это давало возможность модулю произвести "дочистку" определений по необходимости.

Перезагрузку в Erlang'е собираемся применять, но тут таки много особенностей, которые в стандартный relup не укладываются. И все его методы не помогают против того, что если логика сменилась, например, с использованием других модулей или смены порядка прохождения обработчиков (при пересылке между ними), оказывается необходимо ставить не просто версию B после версии A, а версию "вариант B для перехода с A" и только когда этот переход произошёл успешно — переходить на окончательную B. relup помогает только тривиальным случаям, когда нет несовместимых изменений межмодульной логики или интерфейсов, а лучше — все изменения локализованы внутри модуля.
The God is real, unless declared integer.
Re[3]: Замена кода "на лету"
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 15.06.09 11:24
Оценка:
Здравствуйте, md03t4, Вы писали:

M>Спасибо, я покопаю Руби, попытаюсь понять как там это сделано, если сделано. Пока мне не удалось ничего похожего найти.


http://rsdn.ru/forum/philosophy/2091241.1.aspx
Автор: eao197
Дата: 04.09.06


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re: Замена кода "на лету"
От: thesz Россия http://thesz.livejournal.com
Дата: 15.06.09 13:34
Оценка:
Здравствуйте, md03t4, Вы писали:

M>Я знаю, что subj реализован в Erlang-е.

M>Есть ли еще языки/системы, где реализован похожий функционал?

В старом добром Си.
Yours truly, Serguey Zefirov (thesz NA mail TOCHKA ru)
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.