OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Воскресенье, 29 Ноябрь, 2020 05:14

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
СообщениеДобавлено: Четверг, 15 Октябрь, 2020 10:24 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8419
Откуда: Троицк, Москва
Для одной задачки компьютерной алгебры делаю некую квази-файловую системку.
Выясняется следующее.

Райдеры (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 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9327
Откуда: Россия, Орёл
Поддерживаю.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 16 Октябрь, 2020 01:01 
Аватара пользователя

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 357
Еще одно преимущество такой схемы - возможность программисту уменьшить нагрузку на динамическую память: можно единожды создать бегунок/райдер и передавать его разным чтецам/писцам.

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

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

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

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2020, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB