Автор Тема: Oberon, Modula-3, паттерны.  (Прочитано 6041 раз)

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Oberon, Modula-3, паттерны.
« : Март 11, 2012, 01:55:02 pm »
Я очень внимательно смотрел Модулу-3 пару лет назад. Язык действительно вызвал очень положительные ощущения.
Не жирный, в сравнении с Обероном смотрится примерно как КП... Чуть приятнее в плане эстетики, по моему мнению.

Для меня крест на нём поставил один промах: там объекты только динамические. А полиморфизм - только для объектов.
А у меня лично огромное число паттернов основано на полиморфных RECORD-ах через VAR-параметры.
Без этого режим "срача в памяти" у языка получается примерно такой же, как у Явы и Шарпа... А хочется ближе к С++. :)
А можно пример такого паттерна (причем чтобы это было именно что критично к срачу в памяти). Посмотрим/покрутим, вдруг найдем красивое решение для третьей модулы?
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

Илья Ермаков

  • Sr. Member
  • ****
  • Сообщений: 493
    • Просмотр профиля
Re: Oberon, Modula-3, паттерны.
« Ответ #1 : Март 11, 2012, 01:57:05 pm »
Да банальный message-bus возьмите.

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Oberon, Modula-3, паттерны.
« Ответ #2 : Март 11, 2012, 01:59:34 pm »
Да банальный message-bus возьмите.
Банальный message bus через стек не работает, он работает через очередь. По крайней мере у меня :-) Иначе асинхронной обработки сообщений не получится.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

Илья Ермаков

  • Sr. Member
  • ****
  • Сообщений: 493
    • Просмотр профиля
Re: Oberon, Modula-3, паттерны.
« Ответ #3 : Март 11, 2012, 02:09:40 pm »
Я имею в виду Обероновский. (Термин bus я и сам считаю несколько неточным, устаревшим).

Фактически, я виду речь о процедуре с полиморфным параметром VAR ANYREC, передаваемым через стек.

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Oberon, Modula-3, паттерны.
« Ответ #4 : Март 11, 2012, 02:10:59 pm »
Я имею в виду Обероновский. (Термин bus я и сам считаю несколько неточным, устаревшим).

Фактически, я виду речь о процедуре с полиморфным параметром VAR ANYREC, передаваемым через стек.
Пул объектов никак не создать?
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

Berserker

  • Sr. Member
  • ****
  • Сообщений: 254
    • Просмотр профиля
Re: Oberon, Modula-3, паттерны.
« Ответ #5 : Март 11, 2012, 03:40:00 pm »
Та же самая проблема и в Delphi. Записи не наследуются, объекты наследуются, но очень урезаны, без виртуальных методов и метаданных. Остаются классы, которые динамичны. Скрепя зубами, сделал HandleMsg на динамических сообщениях.
Касаемо пула: сообщения разнотипны и поступают из разных модулей, каким образом предполагается выделение для них памяти заранее?

Губанов Сергей Юрьевич

  • Hero Member
  • *****
  • Сообщений: 590
    • Просмотр профиля
    • Домашняя страница
Re: Oberon, Modula-3, паттерны.
« Ответ #6 : Март 11, 2012, 06:43:34 pm »
У меня в C# сообщения обрабатываются асинхронно, соответственно размещаются в динамической памяти. Получатель обработав сообщение вызывает message.Dispose(), в результате чего объект сообщения помещается в пул для повторного использования. У каждого типа сообщений свой пул. Заранее память не выделяется. Когда понадобилось сообщение определённого типа оно берётся готовенькое из пула либо создаётся. Размер пула не ограничен, то есть после "смерти" все объекты кладутся в пул, никто в мусор не выбрасывается. Очищаются пулы один раз в минуту на десять процентов (то есть чистятся по закону радиоактивного распада).

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Oberon, Modula-3, паттерны.
« Ответ #7 : Март 11, 2012, 06:52:49 pm »
У меня в C# сообщения обрабатываются асинхронно, соответственно размещаются в динамической памяти. Получатель обработав сообщение вызывает message.Dispose(), в результате чего объект сообщения помещается в пул для повторного использования. У каждого типа сообщений свой пул. Заранее память не выделяется. Когда понадобилось сообщение определённого типа оно берётся готовенькое из пула либо создаётся. Размер пула не ограничен, то есть после "смерти" все объекты кладутся в пул, никто в мусор не выбрасывается. Очищаются пулы один раз в минуту на десять процентов (то есть чистятся по закону радиоактивного распада).
Ну а в Модуле-3 просто одним тегом в типе объекта можно сказать, чтобы GC на них не обращал внимания (типа мы сами с усами - у нас пулы и свои Dispos'ы). Соответственно специально прятать и как-то иначе извращаться с полиморфными типами там не надо - дополнительной нагрузки на GC пулы таких полиморфных объектов там не дадут.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Oberon, Modula-3, паттерны.
« Ответ #8 : Март 11, 2012, 08:30:37 pm »
Кстати, полистал исходники рантайма и вообще библиотек CM3 - писано очень приятно, читабельно (хоть ключевые слова и капсом). Не производит впечатления большой свалки как исходники ББ (сори если кого обидел, но это мои вполне себе имховые впечатления). Ну и разделение на интерфейс и реализацию модуля тоже решает.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re: Oberon, Modula-3, паттерны.
« Ответ #9 : Март 11, 2012, 09:13:11 pm »
Да, и они потихоньку пытаются в качестве бекенда использовать llvm.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

Vartovyj

  • Full Member
  • ***
  • Сообщений: 197
    • Просмотр профиля
Re: Oberon, Modula-3, паттерны.
« Ответ #10 : Март 12, 2012, 08:26:01 am »
Для меня крест на нём поставил один промах: там объекты только динамические. А полиморфизм - только для объектов.
А у меня лично огромное число паттернов основано на полиморфных RECORD-ах через VAR-параметры.
так там объекты и сделаны для ооп, а записи - просто записями
Цитировать
Без этого режим "срача в памяти" у языка получается примерно такой же, как у Явы и Шарпа... А хочется ближе к С++. :)
что можно поменять в модуле3, чтобы приблизиться к вашему идеалу?