OberonCore
https://forum.oberoncore.ru/

о механике райдеров модулей Stores, Files
https://forum.oberoncore.ru/viewtopic.php?f=23&t=6661
Страница 1 из 1

Автор:  Info21 [ Четверг, 15 Октябрь, 2020 10:24 ]
Заголовок сообщения:  о механике райдеров модулей Stores, Files

Для одной задачки компьютерной алгебры делаю некую квази-файловую системку.
Выясняется следующее.

Райдеры (Reader, Writer) модуля Stores (это, кстати, записи на стеке) подсоединяются к нужному файлу посредством метода .ConnectTo( файл ),
а затем нацеливаются на нужное место в файле методом .SetPos( pos ).

На самом деле точнее было бы подсоединять их не к файлу, а к райдеру, типа:

Stores.Writer.BindTo( baton: Files.Writer ); (* baton = эстафетная палочка *)

Райдеры модуля Files помнят своё положение, и из-за этого очищается код:
ансамбль процедурок обмениваются таким baton-ом без необходимости мусолить Pos, SetPos и передавать соответствующее целое.

Для себя я добавил в Stores простые процедуры

PROCEDURE BindReader (VAR rd: Reader; to: Files.Reader);
PROCEDURE BindWriter (VAR wr: Writer; to: Files.Writer);

но чище было бы сделать их стандартным средством каркаса, привязав к Reader/Writer.

Это предложение по развитию каркаса.

PS
Разумеется, я пробовал всякие варианты вроде того, чтобы роль эстафетной палочки играл указатель на Stores.Writer, размещённый на куче. Как-то обойтись можно -- но ценой грязи в коде.
Объективная логика диктует вышеописанное решение.

Автор:  Илья Ермаков [ Четверг, 15 Октябрь, 2020 13:15 ]
Заголовок сообщения:  Re: о механике райдеров модулей Stores, Files

Поддерживаю.

Автор:  adimetrius [ Пятница, 16 Октябрь, 2020 01:01 ]
Заголовок сообщения:  Re: о механике райдеров модулей Stores, Files

Еще одно преимущество такой схемы - возможность программисту уменьшить нагрузку на динамическую память: можно единожды создать бегунок/райдер и передавать его разным чтецам/писцам.

Я ради этой экономии создаю глобальные "кешированные" чтецы/писцы и/или бегунки, но ясности программе это, конечно, не добавляет. И чаше работаю с текстами, чем с файлами.

Читатели, конечно, пытаются повторно использовать уже созданные бегунки, и внутри .ConnectTo вызывают .NewReader(rd); однако "старый" бегунок может быть не совместим с той реализацией текста/файла, к которой подсоединяется читатель, и поэтому создается новый.

Можно расширить, чтобы не ломать старые программы:

PROCEDURE (rd: Stores.Writer) ConnectToRd (rd: Files.Reader), NEW;

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