Иван Денисов писал(а):
Я бы ещё предпочёл импортировать Librarian, в StdLoader, чтобы там убрать дублирование кода.
А я бы нет. И дальше буду настаивать на неизменности StdLoader. Объясню почему.
0) Files является достаточно завершённой абстракцией в ББ. Там может чего-то не хватать, но выработана она ещё на опыте ETHOS. Так как все привыкли к традиционным ФС и путям, то локаторы воспринимаются обычно, как указатель на каталог. А это вообще говоря не так.
1) Повторим, библиотекарь, в исходной позиции, это средство для унификации обращения к подсистемам. Он понадобился потому, что подсистемы, хотим мы того или нет, являются
неявной частью абстракции файловой системы BlackBox. Так как за счёт этого поддерживается текущая компонентная модель. А хочется сделать эту абстракцию явной.
2) Files почему-то воспринимается как средство обращения к файлам нижележащей ОС. Но это не так. Files - это средство обращения к файлам в рамках файловой системы BlackBox. Происхождение от операционных систем даёт о себе знать. За счёт локаторов, кстати, она может быть не только иерархической, но иметь и более сложную структуру. Если надо системно кувыркаться с файлами ФС Linux/Windows, то для этого нужно делать другое средство.
3) Итого, в модель компонентов попадают Files, StdLoader, SplitName (где бы он не находился), та часть компилятора, которая читает и пишет файлы (Антон на неё указывал).
4) Если пытаться наставить тут расширений на будущее, то это проектно неправильное решение. Нужен опыт? Мы пробовали. По результатам могу сказать, что если менять компонентную модель, то её надо менять целиком: Files, StdLoader, SplitName (где бы он не находился), I/O часть компилятора. Files (в старом виде) при этом может сохраниться для всего остального, просто он выпадает из загрузочного образа и в него встраивается другая реализация, которая соотносится с новой компонентной моделью (если это требуется).
Выводы:* SplitName я уже пытался отправить в Files, но народ не согласился, в виду того, что это типа не по смыслу. Библиотекарь мог бы тоже стать частью модуля Files, но если он нужен в виде отдельного модуля, то может быть и так. Тогда и со SplitName, да.
* Делать в Библиотекаре точку расширения для изменения принципов компонентной модели неверно. Какими бы благими пожеланиями для разработчиков оно не сопровождалось. Соглашусь с Антоном, что если хочется мочь всё перестраивать, то надо I/O компилятора сделать заменяемой частью.
* Смена компонентной модели в текущем виде
требует замены указанных выше частей. Но если хочется, чтобы не требовало, то надо перепроектировать и ввести, начиная с уровня загрузки, соответствующую абстракцию. А это задача не такая тривиальная. Костылями к текущей модели не обойтись.