Автор Тема: [BlackBox] Динамическая выгрузка/загрузка.  (Прочитано 23931 раз)

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: [BlackBox] Динамическая выгрузка/загрузка.
« Ответ #30 : Май 10, 2013, 11:36:47 am »

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

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

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

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

Когда я создавал эту тему, я думал, что возможно подобный механизм и в ББ уже реализован.
Y = λf.(λx.f (x x)) (λx.f (x x))

DddIzer

  • Гость
Re: [BlackBox] Динамическая выгрузка/загрузка.
« Ответ #31 : Май 10, 2013, 11:37:34 am »
эта помойка уже доросла до общности? уже смешно.
Ну впрямь, страна слепых.
вот видите вам смешно.. нам смешно.. и всем -хорошо  :D

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: [BlackBox] Динамическая выгрузка/загрузка.
« Ответ #32 : Май 10, 2013, 11:40:59 am »
... а насчет поделки... так  от нее, боюсь, мир не станет лучше и никого вы ею не удивите ибо все началось с нее - ББ и есть изначальное поделье....
It a fun :-)

Ну и вообще, это кроме фана и потенциальной пользы для некоторых, прокачивает также некоторый мой скил, не связанный с Оберонами.
Y = λf.(λx.f (x x)) (λx.f (x x))

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: [BlackBox] Динамическая выгрузка/загрузка.
« Ответ #33 : Май 10, 2013, 11:43:39 am »
дизер раскудахтался. просто иди нах, упырь.
а веселовскому даже к лицу такое простодушное хлопание глазкаме, бгг.
ко-ко-ко-ко-ко...
Что?

А тебе к лицу кривлянье.
Y = λf.(λx.f (x x)) (λx.f (x x))

DddIzer

  • Гость
Re: [BlackBox] Динамическая выгрузка/загрузка.
« Ответ #34 : Май 10, 2013, 11:44:49 am »

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

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


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


1.  ;) прям так и любой... 
2. тут тоже (выгружаете с -выполняется дефолтная прорисовка), загружаете новый.. подставляется новая..

DddIzer

  • Гость
Re: [BlackBox] Динамическая выгрузка/загрузка.
« Ответ #35 : Май 10, 2013, 11:47:30 am »

А тебе к лицу кривлянье.
блин.. Алексей не портьте малину... когда еще у нас новая зверушка (akaPet) заведется... ибо для мохнорылов нужен вольер.. а это недоразвитый мохнорыл...все ОК  :)

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: [BlackBox] Динамическая выгрузка/загрузка.
« Ответ #36 : Май 10, 2013, 11:51:40 am »
В erlang'e я могу заменить на бегу любой модуль. Просто после подгрузки нового модуля везде где возможно начнут вызываться функции из нового модуля.
1.  ;) прям так и любой... 
2. тут тоже (выгружаете с -выполняется дефолтная прорисовка), загружаете новый.. подставляется новая..
Угу. Любой. Но в таким наивном способе не любое изменение корректно отработает. Для произвольных изменений в новом модуле есть OTP.

При попытке выгрузки-загрузки модуля в ББ я ловил трапы, если логику модулей не разнести как надо. Ну, то есть моя задача решаема, и я в общем то довелен этим. Ну а то что общего механизма нет... Ну нет и нет. :-) Oberon-way - закат солнца вручную ;-) Зато в процессе поймешь как оно закатывается на самом деле.
Y = λf.(λx.f (x x)) (λx.f (x x))

DddIzer

  • Гость
Re: [BlackBox] Динамическая выгрузка/загрузка.
« Ответ #37 : Май 10, 2013, 11:52:43 am »
... и потом  помимо fun'а я тоже скил прокачиваю - важнейший для преподавателя (после знания темы и методик преподавания) - умение оперативно реагировать на неблагоприятно меняющуюся обстановку (работа с  неудобной аудиторией).

DddIzer

  • Гость
Re: [BlackBox] Динамическая выгрузка/загрузка.
« Ответ #38 : Май 10, 2013, 11:56:17 am »
В erlang'e я могу заменить на бегу любой модуль. Просто после подгрузки нового модуля везде где возможно начнут вызываться функции из нового модуля.
1.  ;) прям так и любой... 
2. тут тоже (выгружаете с -выполняется дефолтная прорисовка), загружаете новый.. подставляется новая..
Угу. Любой. Но в таким наивном способе не любое изменение корректно отработает. Для произвольных изменений в новом модуле есть OTP.

При попытке выгрузки-загрузки модуля в ББ я ловил трапы, если логику модулей не разнести как надо. Ну, то есть моя задача решаема, и я в общем то довелен этим. Ну а то что общего механизма нет... Ну нет и нет. :-) Oberon-way - закат солнца вручную ;-) Зато в процессе поймешь как оно закатывается на самом деле.
не понял .. а что в эрланге  разве логику разносить совсем не надо? - что то не верю...

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: [BlackBox] Динамическая выгрузка/загрузка.
« Ответ #39 : Май 10, 2013, 12:03:07 pm »
не понял .. а что в эрланге  разве логику разносить совсем не надо? - что то не верю...
Конкретно для горячей замены кода - нет, не надо. По крайней мере я с подобным в своей практике ни разу не сталкивался.
Y = λf.(λx.f (x x)) (λx.f (x x))

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: [BlackBox] Динамическая выгрузка/загрузка.
« Ответ #40 : Май 10, 2013, 01:33:57 pm »
Кстати, мысли в тему - в ББ дико не хватает полноценного repl'a.
Y = λf.(λx.f (x x)) (λx.f (x x))

Valery Solovey

  • Hero Member
  • *****
  • Сообщений: 509
    • Просмотр профиля
Re: [BlackBox] Динамическая выгрузка/загрузка.
« Ответ #41 : Май 10, 2013, 01:56:14 pm »
речь про рид-эвал-принт? Так это же сервер.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: [BlackBox] Динамическая выгрузка/загрузка.
« Ответ #42 : Май 10, 2013, 02:03:14 pm »
речь про рид-эвал-принт? Так это же сервер.
Угу. Про него, родимого.

А при чем тут сервер?
Y = λf.(λx.f (x x)) (λx.f (x x))

Valery Solovey

  • Hero Member
  • *****
  • Сообщений: 509
    • Просмотр профиля
Re: [BlackBox] Динамическая выгрузка/загрузка.
« Ответ #43 : Май 10, 2013, 02:07:12 pm »
При том, что в этой вещи заключена вся суть сервера: в цикле принимать, обрабатывать и отдавать.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: [BlackBox] Динамическая выгрузка/загрузка.
« Ответ #44 : Май 10, 2013, 02:24:57 pm »
При том, что в этой вещи заключена вся суть сервера: в цикле принимать, обрабатывать и отдавать.
Repl он не для серверов совсем.
http://ru.wikipedia.org/wiki/REPL
Y = λf.(λx.f (x x)) (λx.f (x x))