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

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

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

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

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