Oberon space

General Category => Общий раздел => Тема начата: valexey от Март 11, 2012, 01:55:02 pm

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

Для меня крест на нём поставил один промах: там объекты только динамические. А полиморфизм - только для объектов.
А у меня лично огромное число паттернов основано на полиморфных RECORD-ах через VAR-параметры.
Без этого режим "срача в памяти" у языка получается примерно такой же, как у Явы и Шарпа... А хочется ближе к С++. :)
А можно пример такого паттерна (причем чтобы это было именно что критично к срачу в памяти). Посмотрим/покрутим, вдруг найдем красивое решение для третьей модулы?
Название: Re: Oberon, Modula-3, паттерны.
Отправлено: Илья Ермаков от Март 11, 2012, 01:57:05 pm
Да банальный message-bus возьмите.
Название: Re: Oberon, Modula-3, паттерны.
Отправлено: valexey от Март 11, 2012, 01:59:34 pm
Да банальный message-bus возьмите.
Банальный message bus через стек не работает, он работает через очередь. По крайней мере у меня :-) Иначе асинхронной обработки сообщений не получится.
Название: Re: Oberon, Modula-3, паттерны.
Отправлено: Илья Ермаков от Март 11, 2012, 02:09:40 pm
Я имею в виду Обероновский. (Термин bus я и сам считаю несколько неточным, устаревшим).

Фактически, я виду речь о процедуре с полиморфным параметром VAR ANYREC, передаваемым через стек.
Название: Re: Oberon, Modula-3, паттерны.
Отправлено: valexey от Март 11, 2012, 02:10:59 pm
Я имею в виду Обероновский. (Термин bus я и сам считаю несколько неточным, устаревшим).

Фактически, я виду речь о процедуре с полиморфным параметром VAR ANYREC, передаваемым через стек.
Пул объектов никак не создать?
Название: Re: Oberon, Modula-3, паттерны.
Отправлено: Berserker от Март 11, 2012, 03:40:00 pm
Та же самая проблема и в Delphi. Записи не наследуются, объекты наследуются, но очень урезаны, без виртуальных методов и метаданных. Остаются классы, которые динамичны. Скрепя зубами, сделал HandleMsg на динамических сообщениях.
Касаемо пула: сообщения разнотипны и поступают из разных модулей, каким образом предполагается выделение для них памяти заранее?
Название: Re: Oberon, Modula-3, паттерны.
Отправлено: Губанов Сергей Юрьевич от Март 11, 2012, 06:43:34 pm
У меня в C# сообщения обрабатываются асинхронно, соответственно размещаются в динамической памяти. Получатель обработав сообщение вызывает message.Dispose(), в результате чего объект сообщения помещается в пул для повторного использования. У каждого типа сообщений свой пул. Заранее память не выделяется. Когда понадобилось сообщение определённого типа оно берётся готовенькое из пула либо создаётся. Размер пула не ограничен, то есть после "смерти" все объекты кладутся в пул, никто в мусор не выбрасывается. Очищаются пулы один раз в минуту на десять процентов (то есть чистятся по закону радиоактивного распада).
Название: Re: Oberon, Modula-3, паттерны.
Отправлено: valexey от Март 11, 2012, 06:52:49 pm
У меня в C# сообщения обрабатываются асинхронно, соответственно размещаются в динамической памяти. Получатель обработав сообщение вызывает message.Dispose(), в результате чего объект сообщения помещается в пул для повторного использования. У каждого типа сообщений свой пул. Заранее память не выделяется. Когда понадобилось сообщение определённого типа оно берётся готовенькое из пула либо создаётся. Размер пула не ограничен, то есть после "смерти" все объекты кладутся в пул, никто в мусор не выбрасывается. Очищаются пулы один раз в минуту на десять процентов (то есть чистятся по закону радиоактивного распада).
Ну а в Модуле-3 просто одним тегом в типе объекта можно сказать, чтобы GC на них не обращал внимания (типа мы сами с усами - у нас пулы и свои Dispos'ы). Соответственно специально прятать и как-то иначе извращаться с полиморфными типами там не надо - дополнительной нагрузки на GC пулы таких полиморфных объектов там не дадут.
Название: Re: Oberon, Modula-3, паттерны.
Отправлено: valexey от Март 11, 2012, 08:30:37 pm
Кстати, полистал исходники рантайма и вообще библиотек CM3 - писано очень приятно, читабельно (хоть ключевые слова и капсом). Не производит впечатления большой свалки как исходники ББ (сори если кого обидел, но это мои вполне себе имховые впечатления). Ну и разделение на интерфейс и реализацию модуля тоже решает.
Название: Re: Oberon, Modula-3, паттерны.
Отправлено: valexey от Март 11, 2012, 09:13:11 pm
Да, и они потихоньку пытаются в качестве бекенда использовать llvm.
Название: Re: Oberon, Modula-3, паттерны.
Отправлено: Vartovyj от Март 12, 2012, 08:26:01 am
Для меня крест на нём поставил один промах: там объекты только динамические. А полиморфизм - только для объектов.
А у меня лично огромное число паттернов основано на полиморфных RECORD-ах через VAR-параметры.
так там объекты и сделаны для ооп, а записи - просто записями
Цитировать
Без этого режим "срача в памяти" у языка получается примерно такой же, как у Явы и Шарпа... А хочется ближе к С++. :)
что можно поменять в модуле3, чтобы приблизиться к вашему идеалу?