Oberon space

General Category => Общий раздел => Тема начата: valexey_u от Май 08, 2013, 12:44:24 pm

Название: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: valexey_u от Май 08, 2013, 12:44:24 pm
Задача следующая: вот допустим у меня есть стандартный пример Cubes (Obx/Docu/Cubes.odc), который соответственно умеет размещать свой Action и свой View, причем этот самый View уже допустим внедрен в какой-то составной документ и там благополучно вращается.

Я хочу иметь возможность модифицировать код этого модуля ObxCubes (например менять его поведение, чтобы например он не вращался а перемещался, логику менять, возможно отрисовку) на лету. То есть чтобы во внедренном в составной документ View сразу отображались изменения (скажем куб перестал вращаться, или вообще в шар превратился).

То есть такой вот hot code swapping.

Это возможно?

PS. В erlang'e я это делал неоднократно - там это элементарно делается.
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: ilovb от Май 08, 2013, 12:55:15 pm
Сделай переменные-параметры (скорость например) экспортными в модуле и создай форму для этого модуля.
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: valexey_u от Май 08, 2013, 01:38:24 pm
Сделай переменные-параметры (скорость например) экспортными в модуле и создай форму для этого модуля.
Не катит. Мне нужно менять алгоритмы. Причем я меняю тот алгоритм который есть на тот о котором во момент написания модуля я ничего не знаю.

То есть мне нужен реальный hot code swapping, не покрывающийся конфигами.

Еще пример - мне нужно в этом модуле пофиксить багу. Фиксить нужно без (видимой)остановки работы приложения.
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: ilovb от Май 08, 2013, 03:25:08 pm
В любом случае делаешь экспортную переменную и ее меняешь во время работы.
Пусть в этой переменной будет реализация некого класса. Вот и подменяй эту реализацию динамически.
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: vlad от Май 08, 2013, 03:41:50 pm
В любом случае делаешь экспортную переменную и ее меняешь во время работы.
Пусть в этой переменной будет реализация некого класса. Вот и подменяй эту реализацию динамически.

Это ручной code swapping. А он хочет из черной коробки :)
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: kkk от Май 09, 2013, 09:42:50 am
Не как в эрланге
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: DddIzer от Май 09, 2013, 10:52:10 am
Сделай переменные-параметры (скорость например) экспортными в модуле и создай форму для этого модуля.
Не катит. Мне нужно менять алгоритмы. Причем я меняю тот алгоритм который есть на тот о котором во момент написания модуля я ничего не знаю.

То есть мне нужен реальный hot code swapping, не покрывающийся конфигами.

Еще пример - мне нужно в этом модуле пофиксить багу. Фиксить нужно без (видимой)остановки работы приложения.
  в теории возможно.. - вроде есть механизм пересылки сообщений (на уровне фреймворка).. чисто гипотетически ничто не мешает сделать модуль который ловит сообщения извне вызывая стороннюю процедуру перерисовки ( с определенной сигнатурой) если нужное сообщение получено, или производит дефолтную прорисовку, если такого нет.....
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: DddIzer от Май 09, 2013, 11:18:26 am
.. также вроде ничто не  мешает действовать по следующей схеме
 пусть есть модуль А ( который экспортирует тип процедуры прорисовки,  дефолтную процедуру прорисовки и глобальную процедурную переменную указывающую на текущую процедуру прорисовки), Модуль Б - который вызывает текущую процедуру прорисовки , и модуль C. которыq
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: DddIzer от Май 09, 2013, 11:23:43 am
.. также вроде ничто не  мешает действовать по следующей схеме
 пусть есть модуль А ( который экспортирует тип процедуры прорисовки,  дефолтную процедуру прорисовки и глобальную процедурную переменную Proc указывающую на текущую процедуру прорисовки - при загрузке A устанавливает в Proc - дефолтную процедуру прорисовки), Модуль Б - который вызывает текущую процедуру прорисовки (например по таймеру) , и модуль C. который при загрузки  подменяет дефолтную процедуру прорисовки (из А) своей, а при выгрузке присваивает переменной Proc дефолтное значение
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: Илья Ермаков от Май 09, 2013, 12:05:30 pm
Сделать, допустим, общую штуку - вьюшку-обёртку, которая понимает сообщение ReloadMsg - сериализует свою внутреннюю вьюшку (в Files.dir.Temp()), выгружает её модуль, делает загрузку вьюшки из временного представления (при этом модуль автоматом загрузится в новой версии) и помещает внутрь себя уже новую вьюшку.
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: kkk от Май 09, 2013, 01:59:01 pm
Веселовский, вы же профессионал, неужели не разобрались сами?
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: valexey_u от Май 09, 2013, 06:21:44 pm
Веселовский, вы же профессионал, неужели не разобрались сами?
Именно потому что профессионал, не исключаю возможность своей ошибки, и поэтому не считаю зазорным посоветоваться с другими и не боюсь показаться глупым.
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: valexey_u от Май 09, 2013, 06:24:21 pm
.. также вроде ничто не  мешает действовать по следующей схеме
 пусть есть модуль А ( который экспортирует тип процедуры прорисовки,  дефолтную процедуру прорисовки и глобальную процедурную переменную Proc указывающую на текущую процедуру прорисовки - при загрузке A устанавливает в Proc - дефолтную процедуру прорисовки), Модуль Б - который вызывает текущую процедуру прорисовки (например по таймеру) , и модуль C. который при загрузки  подменяет дефолтную процедуру прорисовки (из А) своей, а при выгрузке присваивает переменной Proc дефолтное значение

Сделать, допустим, общую штуку - вьюшку-обёртку, которая понимает сообщение ReloadMsg - сериализует свою внутреннюю вьюшку (в Files.dir.Temp()), выгружает её модуль, делает загрузку вьюшки из временного представления (при этом модуль автоматом загрузится в новой версии) и помещает внутрь себя уже новую вьюшку.

Спасибо. Понял. Значит в общем случае в ББ задача не решена, но для моего конкретного случая вполне сгодится старый добрый ручной метод. Попробую.
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: Valery Solovey от Май 09, 2013, 08:44:26 pm
в общем - не общем, но возможности те же или почти те же, что и в эрланге.
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: valexey_u от Май 09, 2013, 09:49:39 pm
в общем - не общем, но возможности те же или почти те же, что и в эрланге.
Сори, но ничего общего не наблюдаю. Возможности тут примерно те же, что в Сях с динамическими либами.

В ерланге я могу заменить любой модуль на лету, в том числе тот который сейчас активно используется другими модулями. Все это без остановки системы.
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: kkk от Май 09, 2013, 11:08:43 pm
типичный тред
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: kkk от Май 09, 2013, 11:11:31 pm
Веселовский, вы же профессионал, неужели не разобрались сами?
Именно потому что профессионал, не исключаю возможность своей ошибки, и поэтому не считаю зазорным посоветоваться с другими и не боюсь показаться глупым.
да будет вам, цель этого треда в том, чтобы сравнить кислое с длинным, многозначительно фыркнув в конце.
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: valexey_u от Май 09, 2013, 11:41:03 pm
Веселовский, вы же профессионал, неужели не разобрались сами?
Именно потому что профессионал, не исключаю возможность своей ошибки, и поэтому не считаю зазорным посоветоваться с другими и не боюсь показаться глупым.
да будет вам, цель этого треда в том, чтобы сравнить кислое с длинным, многозначительно фыркнув в конце.
Пётр, кончай фигней страдать и уводить тему в не конструктивное русло. Целью этой и соседней темы ([BlackBox] Быстрое рисование. (http://oberspace.dyndns.org/index.php/topic,494.0.html)) является создание одной поделки, соответственно я с народом консультируюсь.
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: DddIzer от Май 10, 2013, 03:36:21 am

чай фигней страдать и уводить тему в не конструктивное русло. Целью этой и соседней темы ([BlackBox] Быстрое рисование. (http://oberspace.dyndns.org/index.php/topic,494.0.html)) является создание одной поделки, соответственно я с народом консультируюсь.
да ладно Алексей - это быдло как никак себя пол-года сдерживало...рекорд как никак - будьте снисходительным (как я)  :)
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: DddIzer от Май 10, 2013, 03:45:31 am
... а насчет поделки... так  от нее, боюсь, мир не станет лучше и никого вы ею не удивите ибо все началось с нее - ББ и есть изначальное поделье....
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: Valery Solovey от Май 10, 2013, 10:07:52 am
Так и в ББ же можно. Но у этого действия (выгрузки) есть одно логичное следствие - если выгружают код, который исполнялся, то исполнение прервётся. Если данные принадлежат модулю (а в момент исполнения они принадлежат модулю), то они теряются.
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: Valery Solovey от Май 10, 2013, 10:11:01 am

Цитировать
Сори, но ничего общего не наблюдаю. Возможности тут примерно те же, что в Сях с динамическими либами.

В ерланге я могу заменить любой модуль на лету, в том числе тот который сейчас активно используется другими модулями. Все это без остановки системы.
Так и в ББ же можно. Но у этого действия (выгрузки) есть одно логичное следствие - если выгружают код, который исполнялся, то исполнение прервётся. Если данные принадлежат модулю (а в момент исполнения они принадлежат модулю), то они теряются.
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: kkk от Май 10, 2013, 10:49:35 am
дизер раскудахтался. просто иди нах, упырь.
а веселовскому даже к лицу такое простодушное хлопание глазкаме, бгг.
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: DddIzer от Май 10, 2013, 10:55:29 am
дизер раскудахтался. просто иди нах, упырь.
а веселовскому даже к лицу такое простодушное хлопание глазкаме, бгг.
гы... а вот я вас не выгоняю... ибо вы акапет хронический дурак (помимо того, что быдло) - а без дураков жить скучно( даже таких дристунов как вы)...
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: kkk от Май 10, 2013, 11:22:03 am
В вашей местечковой стране слепых разве может быть иное мнение?
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: kkk от Май 10, 2013, 11:23:32 am
ко-ко-ко-ко-ко...
Что?
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: DddIzer от Май 10, 2013, 11:25:12 am
В вашей местечковой стране слепых разве может быть иное мнение?
почему бы и нет?... только это ведь вам не нужно...- вы приперлись сюда с одной целью (как и мохнорыл) - СРАТЬ..
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: kkk от Май 10, 2013, 11:31:22 am
бгг, дизер, ваши упрёки даже выглядят смешно, особенно с соплёй Героя помойки, под юзернеймом
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: DddIzer от Май 10, 2013, 11:34:43 am
бгг, дизер, ваши упрёки даже выглядят смешно, особенно с соплёй Героя помойки, под юзернеймом
  :D какой упрек.. помилуйте.. всего навсего констатация факта... и потом.. я же не против , я за...  :D
(вы сгодитесь нам и таким... ибо повторюсь - без дураков скучно)
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: kkk от Май 10, 2013, 11:36:27 am
эта помойка уже доросла до общности? уже смешно.
Ну впрямь, страна слепых.
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: valexey_u от Май 10, 2013, 11:36:47 am

Цитировать
Сори, но ничего общего не наблюдаю. Возможности тут примерно те же, что в Сях с динамическими либами.

В ерланге я могу заменить любой модуль на лету, в том числе тот который сейчас активно используется другими модулями. Все это без остановки системы.
Так и в ББ же можно. Но у этого действия (выгрузки) есть одно логичное следствие - если выгружают код, который исполнялся, то исполнение прервётся. Если данные принадлежат модулю (а в момент исполнения они принадлежат модулю), то они теряются.
Горячая замена кода (модуля) это не просто механизм загрузки и выгрузки модуля, но и механизм миграции со старого модуля на новый. В Posix (в Си соответственно) и в ББ первые два есть. В Си это dlopen и dlclose соответственно. Но нет механизма миграции. Следовательно на лету менять код можно будет лишь тот который специально для этого был приспособлен. Произвольный модуль не заменить на бегу.

В erlang'e я могу заменить на бегу любой модуль. Просто после подгрузки нового модуля везде где возможно начнут вызываться функции из нового модуля.

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

Когда я создавал эту тему, я думал, что возможно подобный механизм и в ББ уже реализован.
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: DddIzer от Май 10, 2013, 11:37:34 am
эта помойка уже доросла до общности? уже смешно.
Ну впрямь, страна слепых.
вот видите вам смешно.. нам смешно.. и всем -хорошо  :D
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: valexey_u от Май 10, 2013, 11:40:59 am
... а насчет поделки... так  от нее, боюсь, мир не станет лучше и никого вы ею не удивите ибо все началось с нее - ББ и есть изначальное поделье....
It a fun :-)

Ну и вообще, это кроме фана и потенциальной пользы для некоторых, прокачивает также некоторый мой скил, не связанный с Оберонами.
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: valexey_u от Май 10, 2013, 11:43:39 am
дизер раскудахтался. просто иди нах, упырь.
а веселовскому даже к лицу такое простодушное хлопание глазкаме, бгг.
ко-ко-ко-ко-ко...
Что?

А тебе к лицу кривлянье.
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: DddIzer от Май 10, 2013, 11:44:49 am

Цитировать
Сори, но ничего общего не наблюдаю. Возможности тут примерно те же, что в Сях с динамическими либами.

В ерланге я могу заменить любой модуль на лету, в том числе тот который сейчас активно используется другими модулями. Все это без остановки системы.
Так и в ББ же можно. Но у этого действия (выгрузки) есть одно логичное следствие - если выгружают код, который исполнялся, то исполнение прервётся. Если данные принадлежат модулю (а в момент исполнения они принадлежат модулю), то они теряются.


В erlang'e я могу заменить на бегу любой модуль. Просто после подгрузки нового модуля везде где возможно начнут вызываться функции из нового модуля.


1.  ;) прям так и любой... 
2. тут тоже (выгружаете с -выполняется дефолтная прорисовка), загружаете новый.. подставляется новая..
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: DddIzer от Май 10, 2013, 11:47:30 am

А тебе к лицу кривлянье.
блин.. Алексей не портьте малину... когда еще у нас новая зверушка (akaPet) заведется... ибо для мохнорылов нужен вольер.. а это недоразвитый мохнорыл...все ОК  :)
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: valexey_u от Май 10, 2013, 11:51:40 am
В erlang'e я могу заменить на бегу любой модуль. Просто после подгрузки нового модуля везде где возможно начнут вызываться функции из нового модуля.
1.  ;) прям так и любой... 
2. тут тоже (выгружаете с -выполняется дефолтная прорисовка), загружаете новый.. подставляется новая..
Угу. Любой. Но в таким наивном способе не любое изменение корректно отработает. Для произвольных изменений в новом модуле есть OTP.

При попытке выгрузки-загрузки модуля в ББ я ловил трапы, если логику модулей не разнести как надо. Ну, то есть моя задача решаема, и я в общем то довелен этим. Ну а то что общего механизма нет... Ну нет и нет. :-) Oberon-way - закат солнца вручную ;-) Зато в процессе поймешь как оно закатывается на самом деле.
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: DddIzer от Май 10, 2013, 11:52:43 am
... и потом  помимо fun'а я тоже скил прокачиваю - важнейший для преподавателя (после знания темы и методик преподавания) - умение оперативно реагировать на неблагоприятно меняющуюся обстановку (работа с  неудобной аудиторией).
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: DddIzer от Май 10, 2013, 11:56:17 am
В erlang'e я могу заменить на бегу любой модуль. Просто после подгрузки нового модуля везде где возможно начнут вызываться функции из нового модуля.
1.  ;) прям так и любой... 
2. тут тоже (выгружаете с -выполняется дефолтная прорисовка), загружаете новый.. подставляется новая..
Угу. Любой. Но в таким наивном способе не любое изменение корректно отработает. Для произвольных изменений в новом модуле есть OTP.

При попытке выгрузки-загрузки модуля в ББ я ловил трапы, если логику модулей не разнести как надо. Ну, то есть моя задача решаема, и я в общем то довелен этим. Ну а то что общего механизма нет... Ну нет и нет. :-) Oberon-way - закат солнца вручную ;-) Зато в процессе поймешь как оно закатывается на самом деле.
не понял .. а что в эрланге  разве логику разносить совсем не надо? - что то не верю...
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: valexey_u от Май 10, 2013, 12:03:07 pm
не понял .. а что в эрланге  разве логику разносить совсем не надо? - что то не верю...
Конкретно для горячей замены кода - нет, не надо. По крайней мере я с подобным в своей практике ни разу не сталкивался.
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: valexey_u от Май 10, 2013, 01:33:57 pm
Кстати, мысли в тему - в ББ дико не хватает полноценного repl'a.
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: Valery Solovey от Май 10, 2013, 01:56:14 pm
речь про рид-эвал-принт? Так это же сервер.
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: valexey_u от Май 10, 2013, 02:03:14 pm
речь про рид-эвал-принт? Так это же сервер.
Угу. Про него, родимого.

А при чем тут сервер?
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: Valery Solovey от Май 10, 2013, 02:07:12 pm
При том, что в этой вещи заключена вся суть сервера: в цикле принимать, обрабатывать и отдавать.
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: valexey_u от Май 10, 2013, 02:24:57 pm
При том, что в этой вещи заключена вся суть сервера: в цикле принимать, обрабатывать и отдавать.
Repl он не для серверов совсем.
http://ru.wikipedia.org/wiki/REPL
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: Valery Solovey от Май 10, 2013, 02:52:27 pm
А. Ну, тогда коммандеры - это вариация на тему repl
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: valexey_u от Май 10, 2013, 03:00:53 pm
А. Ну, тогда коммандеры - это вариация на тему repl
Угу. Недоделанная.
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: kkk от Май 10, 2013, 03:33:43 pm
Бгг, веселовский выдал авторитетное профессиональное заключение.
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: ilovb от Май 10, 2013, 06:41:54 pm
valexey, я так и не понял в чем у тебя проблема. Не знаю что там в эрланге, но в ББ это элементарно делается. Смотри переменную dir в модулях подсистемы Host
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: ilovb от Май 10, 2013, 06:47:51 pm
Посмотрел вашу беседу по диагонали. Горячая замена модуля какая-то..... Тык в ББ горячая замена модуля - это штатный режим работы. Система ведь не останавливается во время разработки  ;)  ;D
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: valexey_u от Май 10, 2013, 06:48:48 pm
valexey, я так и не понял в чем у тебя проблема. Не знаю что там в эрланге, но в ББ это элементарно делается. Смотри переменную dir в модулях подсистемы Host
Ну, пример проблемы - пересобрал HostMenus, а вот выгрузить не смог, ибо оно использовалось кем-то. Пришлось перезапускать ББ, хотя там изменилась только константа которая никуда не экспортировалась.

В erlang'e этого делать не пришлось бы. Переход на новую версию модуля прошел бы бесшовно (даже если при проектировании этого модуля о горячем замене кода не беспокоились).
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: ilovb от Май 10, 2013, 06:54:29 pm
valexey, этого быть не может. Если модуль нельзя выгрузить значит его физически нельзя выгрузить (например это сам загрузчик модулей ;) ) Если эрланг позволяет выгрузить любой модуль, значит на нем нельзя написать такую систему как ББ :) Ибо в противном случае это смахивает на фантастику.
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: valexey_u от Май 10, 2013, 06:57:43 pm
valexey, этого быть не может. Если модуль нельзя выгрузить значит его физически нельзя выгрузить (например это сам загрузчик модулей ;) ) Если эрланг позволяет выгрузить любой модуль, значит на нем нельзя написать такую систему как ББ :) Ибо в противном случае это смахивает на фантастику.
Не выгрузить, а заменить модуль на новый. Я по работе писал на erlang'e, и это не фантастика, это жизнь :-) И это одна из киллер-фич именно erlang'a, потому как если у тебя крутится телефонная станция, и идут звонки постоянно, то ты не имеешь права ни на секунду её останавливать чтобы воткнуть новую версию модуля, в которой скажем пофикшен баг. Естественно этот модуль постоянно активно используется, то есть он не лист в графе.
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: ilovb от Май 10, 2013, 07:01:12 pm
valexey, я тебе привел пример с загрузчиком модулей...
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: valexey_u от Май 10, 2013, 07:04:34 pm
valexey, я тебе привел пример с загрузчиком модулей...
Ну, во-первых загрузчиков модулей может быть несколько (см. ClassLoader в той же жабе). Во вторых про именно ВЫГРУЗКУ я ничего сейчас не говорил. В-третьих, ты же понимаешь, что в erlang'а есть некое ядро писанное на сях, где никаких модулей ерланговых нет вообще.
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: ilovb от Май 10, 2013, 07:16:30 pm
Может я после огорода туплю... В чем проблема то? Модули в ББ выгружаются и загружаются. Заменить модуль во время работы можно. (чем ты и занимаешься во время разработки в ББ)

Хотя я не очень понимаю зачем менять модуль, когда можно заменить реализацию класса.
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: DddIzer от Май 10, 2013, 07:18:33 pm
Может я после огорода туплю... В чем проблема то? Модули в ББ выгружаются и загружаются. Заменить модуль во время работы можно. (чем ты и занимаешься во время разработки в ББ)

Хотя я не очень понимаю зачем менять модуль, когда можно заменить реализацию класса.
проблема в том, что не все модули.. однако, вероятно, что для решения КОНКРЕТНОЙ задачи функционала ББ вполне хватит.
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: DddIzer от Май 10, 2013, 07:23:27 pm
кроме того,  эта возможность зависит от зависимостей.. например, в схеме которую привел я - модуль A - не должен выгружаться (пока не выгружены модули его использующие)
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: ilovb от Май 10, 2013, 07:27:09 pm
PROCEDURE UnloadMod (name: TextMappers.String; VAR ok: BOOLEAN);
VAR mod: Kernel.Module; str: Dialog.String; n: Kernel.Name;
BEGIN
n := SHORT(name$); mod := Kernel.ThisLoadedMod(n);
IF mod # NIL THEN
Dialog.ShowParamStatus("#Dev:Unloading", name, "", "");
Kernel.UnloadMod(mod);
IF mod.refcnt < 0 THEN
Dialog.MapParamString("#Dev:Unloaded", name, "", "", str);
StdLog.String(str); StdLog.Ln
ELSE
Dialog.ShowParamMsg("#Dev:UnloadingFailed", name, "", "");
ok := FALSE
END
ELSE
Dialog.ShowParamMsg("#Dev:NotFound", name, "", "");
ok := FALSE;
END
END UnloadMod;

Цитировать
refcnt-: INTEGER
Число ссылок на модуль, то есть, число загруженных в настоящий момент модулей, импортирующих данный. Если refcnt = 0, то модуль ничем не импортируется и может быть выгружен. Однако следует учитывать, что модуль может использоваться неявно. Например, модуль реализации может инсталлировать свои фабрики в некоторый абстрактный модуль, но при этом сам он не импортируется никаким модулем. При выгрузке такого модуля и последующему обращению к фабрике в абстрактном модуле произойдет ошибка. Если refcnt < 0, то модуль уже выгружен из памяти. Однако при этом в памяти остается вся информация о типах данного модуля, поскольку еще могут существовать динамические экземпляры этих типов с соотв. тегом. Таким образом, в списке модулей может находиться несколько версий модуля с одним именем, но только для одного из них refcnt >= 0, то есть, загружены его секция данных и кода.

Вот вся логика. Может ты импорт не учел? В этом случае нужно списком выгружать.
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: valexey_u от Май 10, 2013, 07:48:42 pm
PROCEDURE UnloadMod (name: TextMappers.String; VAR ok: BOOLEAN);
VAR mod: Kernel.Module; str: Dialog.String; n: Kernel.Name;
BEGIN
n := SHORT(name$); mod := Kernel.ThisLoadedMod(n);
IF mod # NIL THEN
Dialog.ShowParamStatus("#Dev:Unloading", name, "", "");
Kernel.UnloadMod(mod);
IF mod.refcnt < 0 THEN
Dialog.MapParamString("#Dev:Unloaded", name, "", "", str);
StdLog.String(str); StdLog.Ln
ELSE
Dialog.ShowParamMsg("#Dev:UnloadingFailed", name, "", "");
ok := FALSE
END
ELSE
Dialog.ShowParamMsg("#Dev:NotFound", name, "", "");
ok := FALSE;
END
END UnloadMod;

Цитировать
refcnt-: INTEGER
Число ссылок на модуль, то есть, число загруженных в настоящий момент модулей, импортирующих данный. Если refcnt = 0, то модуль ничем не импортируется и может быть выгружен. Однако следует учитывать, что модуль может использоваться неявно. Например, модуль реализации может инсталлировать свои фабрики в некоторый абстрактный модуль, но при этом сам он не импортируется никаким модулем. При выгрузке такого модуля и последующему обращению к фабрике в абстрактном модуле произойдет ошибка. Если refcnt < 0, то модуль уже выгружен из памяти. Однако при этом в памяти остается вся информация о типах данного модуля, поскольку еще могут существовать динамические экземпляры этих типов с соотв. тегом. Таким образом, в списке модулей может находиться несколько версий модуля с одним именем, но только для одного из них refcnt >= 0, то есть, загружены его секция данных и кода.

Вот вся логика. Может ты импорт не учел? В этом случае нужно списком выгружать.
Так вот, в ерланге заменить (не выгрузить!) модуль можно даже если refcnt не нуль.
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: valexey_u от Май 10, 2013, 07:50:27 pm
Может я после огорода туплю... В чем проблема то? Модули в ББ выгружаются и загружаются. Заменить модуль во время работы можно. (чем ты и занимаешься во время разработки в ББ)

Хотя я не очень понимаю зачем менять модуль, когда можно заменить реализацию класса.
проблема в том, что не все модули.. однако, вероятно, что для решения КОНКРЕТНОЙ задачи функционала ББ вполне хватит.
Угу. В данной конкретной моей задаче вполне хватает декомпозиции такой вот ООПшной :-)
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: ilovb от Май 10, 2013, 08:13:07 pm
valexey, я посмотрел в гугле... в общем понятно... интерпретируемый функциональный эрланг с динамической типизацией специально разработанный для горячей замены кода таки позволяет это.  :)

А кроме эрланга там лисп, смолток и 1С (O_o OMG): http://ru.wikipedia.org/wiki/%D0%93%D0%BE%D1%80%D1%8F%D1%87%D0%B0%D1%8F_%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D0%B0

Вопрос: при чем тут ББ?

Из коробки вот прям такого функционала нету. Не было такого пункта в ТЗ у разрабов  ;D Можешь сам написать.
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: valexey_u от Май 10, 2013, 08:20:15 pm
valexey, я посмотрел в гугле... в общем понятно... интерпретируемый функциональный эрланг с динамической типизацией специально разработанный для горячей замены кода таки позволяет это.  :)

А кроме эрланга там лисп, смолток и 1С (O_o OMG): http://ru.wikipedia.org/wiki/%D0%93%D0%BE%D1%80%D1%8F%D1%87%D0%B0%D1%8F_%D0%B7%D0%B0%D0%BC%D0%B5%D0%BD%D0%B0

Вопрос: при чем тут ББ?

Из коробки вот прям такого функционала нету. Не было такого пункта в ТЗ у разрабов  ;D Можешь сам написать.
Кстати, для этого динамическая типизация и интерпретируемость не нужна на самом деле :-)
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: ilovb от Май 10, 2013, 08:27:53 pm
Ну как и для замыканий. Вот только реализовать это сложнее в компилируемом языке.

Кстати почитал на хабре про эрланг... Тык там система как в 1С практически  ;D Фигасе я на передовой софтварине работаю  ;D
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: valexey_u от Май 10, 2013, 08:41:37 pm
Ну как и для замыканий. Вот только реализовать это сложнее в компилируемом языке.

Кстати почитал на хабре про эрланг... Тык там система как в 1С практически  ;D Фигасе я на передовой софтварине работаю  ;D
Да ты ваще крут :-)
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: ilovb от Май 10, 2013, 08:54:02 pm
На самом деле про горячую замену в 1С конечно сильно преувеличено.
Кодить на горячую можно, да. Вот только пользователю нужно перезапускать клиента чтобы изменения вступили в силу. Единственный гуд, что сервер не нужно перезапускать. А в остальном типа как в эрланге... На сервере может быть несколько версий конфигурации одновременно. Старые версии уничтожаются как только исчезнет последний якорь (клиентское соединение)
Название: Re: [BlackBox] Динамическая выгрузка/загрузка.
Отправлено: qp от Май 11, 2013, 01:51:00 pm
То есть такой вот hot code swapping.
Техника code injection в приложении написанном на обероне (AOS): https://www.youtube.com/watch?v=Pe0ZdzO_urU (https://www.youtube.com/watch?v=Pe0ZdzO_urU)