OberonCore
https://forum.oberoncore.ru/

Ссылка на статическую запись
https://forum.oberoncore.ru/viewtopic.php?f=29&t=3826
Страница 1 из 1

Автор:  Евгений Темиргалеев [ Вторник, 07 Февраль, 2012 21:29 ]
Заголовок сообщения:  Ссылка на статическую запись

Несколько раз приходилось делать обёрточные сканеры и форматтеры:
Код:
MyFormatter = RECORD
  fmt: TextMappers.Formatter;
  ... (* доп. параметры *)
END;
В процедурах-писалках вида PROCEDURE WriteXxx (VAR f: MyFormatter) постоянно приходится обращаться к полю f.fmt. --- возникает естественное желание завести ссылку. В КП это можно сделать при помощь ссылочного параметра, который по сути от локальной переменной ничем не отличается:
PROCEDURE WriteXxx (VAR f: MyFormatter; VAR fmt: TextMappers.Formatter);

Только указывать при каждом вызове: WriteXxx(f, f.fmt). По-моему, похоже на использование "методов" в классическом Обероне...

Автор:  Info21 [ Вторник, 07 Февраль, 2012 21:36 ]
Заголовок сообщения:  Re: Ссылка на статическую запись

Да, еще Stores.Reader/Writer.

Всё это должны бы быть абстрактные типы со скрытой конкретной реализацией.

Непонятно, почему это сделано через обычные записевые типы.
Может, кто-то видит резон?

Автор:  Евгений Темиргалеев [ Вторник, 07 Февраль, 2012 21:42 ]
Заголовок сообщения:  Re: Ссылка на статическую запись

Info21 писал(а):
Непонятно, почему это сделано через обычные записевые типы.
Может, кто-то видит резон?
А чего там скрывать-то? Сколькими способами можно реализовать запись цепочки литер операцией записи одной литеры?

Абстракция со скрытой реализацией --- это TextModels.Reader/Writer.

Автор:  Евгений Темиргалеев [ Среда, 08 Февраль, 2012 08:21 ]
Заголовок сообщения:  Re: Ссылка на статическую запись

Евгений Темиргалеев писал(а):
Несколько раз приходилось делать обёрточные сканеры и форматтеры:
(уточнение)
1) "Обёртка" только в смысле данных, не методов. WriteXxx "высокоуровневые" по отношению к процедурам форматтера. Смысл --- единые параметры ("контекст вызова") группы процедур пакуются в запись, выходит гораздо проще.
2) Эти "обёртки" локальны для модуля.

Делать обёрток методов форматтера в виде библиотечных модулей --- пока потребности не возникало (это к вопросу про абстракции).

Автор:  Александр Ильин [ Среда, 08 Февраль, 2012 09:22 ]
Заголовок сообщения:  Re: Ссылка на статическую запись

Info21 писал(а):
Непонятно, почему это сделано через обычные записевые типы.
Может, кто-то видит резон?
Я думаю, причина та же, что при введении сообщений для шины: избегаем нагрузки на динамическую память где это возможно.

Автор:  Info21 [ Среда, 08 Февраль, 2012 11:44 ]
Заголовок сообщения:  Re: Ссылка на статическую запись

Александр Ильин писал(а):
Info21 писал(а):
Непонятно, почему это сделано через обычные записевые типы.
Может, кто-то видит резон?
Я думаю, причина та же, что при введении сообщений для шины: избегаем нагрузки на динамическую память где это возможно.
Вопрос в том, почему именно здесь?
Почему в других местах этого нет?

Легко понять с Files, например.

Но сложность Stores.Writer (и прикладных задач, где он используется) достаточно велика, чтобы сделать невозможной одну-на-века реализацию.

Ведь Files.Reader тоже кешируется внутри Files.File -- ровно для того, чтобы не грузить память. Работа со Stores.Writer идёт по вполне аналогичным схемам, чтобы оправдать аналогичное решение.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/