OberonCore https://forum.oberoncore.ru/ |
|
Ссылка на статическую запись https://forum.oberoncore.ru/viewtopic.php?f=29&t=3826 |
Страница 1 из 1 |
Автор: | Евгений Темиргалеев [ Вторник, 07 Февраль, 2012 21:29 ] |
Заголовок сообщения: | Ссылка на статическую запись |
Несколько раз приходилось делать обёрточные сканеры и форматтеры: Код: MyFormatter = RECORD В процедурах-писалках вида PROCEDURE WriteXxx (VAR f: MyFormatter) постоянно приходится обращаться к полю f.fmt. --- возникает естественное желание завести ссылку. В КП это можно сделать при помощь ссылочного параметра, который по сути от локальной переменной ничем не отличается:fmt: TextMappers.Formatter; ... (* доп. параметры *) END; 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/ |