Oberon space
General Category => Общий раздел => Тема начата: valexey от Март 11, 2012, 01:55:02 pm
-
Я очень внимательно смотрел Модулу-3 пару лет назад. Язык действительно вызвал очень положительные ощущения.
Не жирный, в сравнении с Обероном смотрится примерно как КП... Чуть приятнее в плане эстетики, по моему мнению.
Для меня крест на нём поставил один промах: там объекты только динамические. А полиморфизм - только для объектов.
А у меня лично огромное число паттернов основано на полиморфных RECORD-ах через VAR-параметры.
Без этого режим "срача в памяти" у языка получается примерно такой же, как у Явы и Шарпа... А хочется ближе к С++. :)
А можно пример такого паттерна (причем чтобы это было именно что критично к срачу в памяти). Посмотрим/покрутим, вдруг найдем красивое решение для третьей модулы?
-
Да банальный message-bus возьмите.
-
Да банальный message-bus возьмите.
Банальный message bus через стек не работает, он работает через очередь. По крайней мере у меня :-) Иначе асинхронной обработки сообщений не получится.
-
Я имею в виду Обероновский. (Термин bus я и сам считаю несколько неточным, устаревшим).
Фактически, я виду речь о процедуре с полиморфным параметром VAR ANYREC, передаваемым через стек.
-
Я имею в виду Обероновский. (Термин bus я и сам считаю несколько неточным, устаревшим).
Фактически, я виду речь о процедуре с полиморфным параметром VAR ANYREC, передаваемым через стек.
Пул объектов никак не создать?
-
Та же самая проблема и в Delphi. Записи не наследуются, объекты наследуются, но очень урезаны, без виртуальных методов и метаданных. Остаются классы, которые динамичны. Скрепя зубами, сделал HandleMsg на динамических сообщениях.
Касаемо пула: сообщения разнотипны и поступают из разных модулей, каким образом предполагается выделение для них памяти заранее?
-
У меня в C# сообщения обрабатываются асинхронно, соответственно размещаются в динамической памяти. Получатель обработав сообщение вызывает message.Dispose(), в результате чего объект сообщения помещается в пул для повторного использования. У каждого типа сообщений свой пул. Заранее память не выделяется. Когда понадобилось сообщение определённого типа оно берётся готовенькое из пула либо создаётся. Размер пула не ограничен, то есть после "смерти" все объекты кладутся в пул, никто в мусор не выбрасывается. Очищаются пулы один раз в минуту на десять процентов (то есть чистятся по закону радиоактивного распада).
-
У меня в C# сообщения обрабатываются асинхронно, соответственно размещаются в динамической памяти. Получатель обработав сообщение вызывает message.Dispose(), в результате чего объект сообщения помещается в пул для повторного использования. У каждого типа сообщений свой пул. Заранее память не выделяется. Когда понадобилось сообщение определённого типа оно берётся готовенькое из пула либо создаётся. Размер пула не ограничен, то есть после "смерти" все объекты кладутся в пул, никто в мусор не выбрасывается. Очищаются пулы один раз в минуту на десять процентов (то есть чистятся по закону радиоактивного распада).
Ну а в Модуле-3 просто одним тегом в типе объекта можно сказать, чтобы GC на них не обращал внимания (типа мы сами с усами - у нас пулы и свои Dispos'ы). Соответственно специально прятать и как-то иначе извращаться с полиморфными типами там не надо - дополнительной нагрузки на GC пулы таких полиморфных объектов там не дадут.
-
Кстати, полистал исходники рантайма и вообще библиотек CM3 - писано очень приятно, читабельно (хоть ключевые слова и капсом). Не производит впечатления большой свалки как исходники ББ (сори если кого обидел, но это мои вполне себе имховые впечатления). Ну и разделение на интерфейс и реализацию модуля тоже решает.
-
Да, и они потихоньку пытаются в качестве бекенда использовать llvm.
-
Для меня крест на нём поставил один промах: там объекты только динамические. А полиморфизм - только для объектов.
А у меня лично огромное число паттернов основано на полиморфных RECORD-ах через VAR-параметры.
так там объекты и сделаны для ооп, а записи - просто записями
Без этого режим "срача в памяти" у языка получается примерно такой же, как у Явы и Шарпа... А хочется ближе к С++. :)
что можно поменять в модуле3, чтобы приблизиться к вашему идеалу?