OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Суббота, 19 Июнь, 2021 09:44

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




Начать новую тему Ответить на тему  [ Сообщений: 64 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: Re: #046 Библиотекарь модулей
СообщениеДобавлено: Понедельник, 25 Январь, 2021 02:09 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4619
Откуда: Россия, Орёл
Код:
DEFINITION DevCPM;
  VAR lib*: Lib.Librarian;   (* the librarian to use during compilation *)
Поддерживаю такое решение.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: #046 Библиотекарь модулей
СообщениеДобавлено: Понедельник, 25 Январь, 2021 02:49 
Аватара пользователя

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 481
Евгений Темиргалеев писал(а):
Считаю, что библиотекарь должен быть отдельным модулем. Подсистема Std для него подходит (StdDialog.GetSubLoc). Реализацию библиотекаря не стоит делать ни частью StdLoader, ни его альтернативной версии. Замена механизма поиска не обязтельно подразумевает замену механизма загрузки.

Если говорить про внедрение библиотекаря на уровне ББ, то отсюда логично вытекает, что StdLoader должен работать через него. Я представлял себе это как обращение к библиотекарю в StdLoader.ThisObjFile.
Можно сохранить старую версию StdLoader, а новую назвать по-другому. Это позволит собирать пускачи со старой схемой работы без библиотекаря, если это кому-то требуется.

Не представляю, как можно обойтись без линковки библиотекаря с его реализацией в пускач. Схема, когда в пускаче старый StdLoader, а Init выставляет новый не полноценная, потому что тогда библиотекарь не сможет выбирать Init. А этот модуль варьируется в каждой сборке -- он разный для консоли/графики в линуксе, винде и т.д.

Хорошо, когда модулей в пускаче меньше, я это как майнтейнер понимаю, но, с другой стороны, погоня за минимизацией числа модулей в пускаче не должна становиться самоцелью, из-за которой будет снижаться понятность кода, его сопровождаемость и проч.


Я полагаю, в модуле StdLib должен быть абстрактный интерфейс и стандартная реализация (старая процедура ThisObjFile, слегка расширенная). Согласен, что StdLoader должен работать через библиотекаря. При таком раскладе не нужно иметь два StdLoader.

При компоновке придется компоновать StdLib, а если нужна сборка с нестандартным библиотекарем - то и его модуль тоже. (Впрочем, мне пришлось вникать в форматы PE и ELF, и, при необходимости, можно вообще без компоновки "пускача"; было бы желание)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: #046 Библиотекарь модулей
СообщениеДобавлено: Понедельник, 25 Январь, 2021 05:05 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3096
Уловил идею Евгения про загрузку Init. Тогда лучше один загрузчик, чтобы меньше было путаницы. Ок, пусть будет длиннее список сборки. Тогда действительно линковка между StdLib и StdLoader другого модуля MyConf скажем, позволяет решить проблему загрузки альтернативных Init. А теперь ведь ещё и HostGui нужно линковать в Windows сборке, чтобы отличать графические программы от консольных. И для кросс-платформенности всё же нужно Unicode импортировать в ядро. Мы с Александром этот вопрос как-то обсуждали. Идем к сборочному программированию семимильными шагами.

Какой-то такой список я вижу для стантартной сборки с GUI
Unicode Kernel$+ Files Utf HostEnv HostFiles HostGui StdLib StdLoader

Ну и если нужен авторский конфигуратор, который будет читать откуда что грузить, то так
Unicode Kernel$+ Files Utf HostEnv HostFiles HostGui StdLib MyConf StdLoader


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: #046 Библиотекарь модулей
СообщениеДобавлено: Вторник, 26 Январь, 2021 12:22 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1372
adimetrius писал(а):
Я полагаю, в модуле StdLib должен быть абстрактный интерфейс и стандартная реализация

А зачем? Во Вы пишете
Цитата:
При таком раскладе не нужно иметь два StdLoader.

Но когда потребуется что-то добавыит, выяснится, что не нужно иметь два StdLib, проще исправить этот.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: #046 Библиотекарь модулей
СообщениеДобавлено: Вторник, 26 Январь, 2021 13:05 
Аватара пользователя

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 481
Trurl писал(а):
adimetrius писал(а):
Я полагаю, в модуле StdLib должен быть абстрактный интерфейс и стандартная реализация

А зачем?

А как вы предлагаете?

Trurl писал(а):
Но когда потребуется что-то добавить, выяснится, что не нужно иметь два StdLib, проще исправить этот.

Боюсь, что я не понял, что вы имеете в виду под "что-то добавить".
Конкретный пример: я делаю Гершель, это получается "стороннее приложение" по отношению к ББ. Я представляю, что в таком наборе будет три библиотекаря:
1) стандартный в StdLib, который используется в StdLoader и не предполагает каких-либо вариантов
2) еще один - для поддержки компиляции в песочнице, он будет использоваться в DevCPM
3) третий - Гершеле, поскольку у него собственное файловое хозяйство

Это как-то отвечает на ваш запрос?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: #046 Библиотекарь модулей
СообщениеДобавлено: Вторник, 26 Январь, 2021 13:16 
Аватара пользователя

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 481
Коллеги, размышляя над вопросом Trurl, я подумал:

Из моего предыдущего поста 1 и 2 вполне могут быть просто разными переменными (экземплярами) одной реализации. И даже для 3 - Гершеля с его отдельным файловым хозяйством - было бы вполне достаточно еще одного экземпляра стандартной реализации.

При условии, что "стандартная реализация" - это раскладывание подсистем по подпапкам некой корневой папки.

Может, тогда стоит добавить
Код:
DEFINITION StdLib;

PROCEDURE NewStdLibrarian* (loc: Files.Locator): Librarian;
(** Returns a standard filesystem-based librarian based at _loc.
Pre
  loc # NIL, 20
Post
  RESULT = NIL => impossible to create a standard librarian for the given location
  RESULT # NIL => standard librarian for location _loc created successfully
*)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: #046 Библиотекарь модулей
СообщениеДобавлено: Вторник, 26 Январь, 2021 13:33 
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: #046 Библиотекарь модулей
СообщениеДобавлено: Среда, 27 Январь, 2021 00:58 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4619
Откуда: Россия, Орёл
adimetrius писал(а):
Может, тогда стоит добавить
Код:
DEFINITION StdLib;
PROCEDURE NewStdLibrarian* (loc: Files.Locator): Librarian;
Еще пример, где это востребовано.
Вложение:
x.png
x.png [ 122.29 КБ | Просмотров: 842 ]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: #046 Библиотекарь модулей
СообщениеДобавлено: Среда, 27 Январь, 2021 01:18 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4619
Откуда: Россия, Орёл
adimetrius писал(а):
Евгений, а как вы видите использование библиотекарей для решения ваших задач вариативности? Т.е. где какие вам потребуются расширения, где расположить экземпляры библиотекарей и т.д.?
Одна реализация нужна для загрузчика. Чтобы использование библиотекаря было его единственным отличием от StdLoader, надо чтобы загрузчик сам ходил в эту реализацию. Если ставить разъем в загрузчик, то он не сможет быть последним модулем в пускаче, который запускает "Init".
Код:
MODULE StdLoaderM;
...
   IMPORT S := SYSTEM, Kernel, Files, Utf8, Lib := XxxxLibrarianForLoader;
...
   PROCEDURE ThisObjFile (VAR name: ARRAY OF CHAR): Files.File;
   BEGIN
      Lib.lib.GetSpec...
Второй библиотекарь нужен для инструментов -- компилятора/линкера. DevCPM.lib, по-моему, для этого вполне подходит.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: #046 Библиотекарь модулей
СообщениеДобавлено: Среда, 27 Январь, 2021 09:09 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1372
adimetrius писал(а):
Я представляю, что в таком наборе будет три библиотекаря

Я чего-то не понимаю. Вроде предлагался один стандартный библиотекарь, а их уже три.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: #046 Библиотекарь модулей
СообщениеДобавлено: Среда, 27 Январь, 2021 10:35 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3096
На мой взгляд, в стандартную комплектацию только один загрузчик должен входить и один библиотекарь.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: #046 Библиотекарь модулей
СообщениеДобавлено: Среда, 27 Январь, 2021 14:10 
Аватара пользователя

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 481
Иван Денисов писал(а):
На мой взгляд, в стандартную комплектацию только один загрузчик должен входить и один библиотекарь.


Trurl писал(а):
adimetrius писал(а):
Я представляю, что в таком наборе будет три библиотекаря

Я чего-то не понимаю. Вроде предлагался один стандартный библиотекарь, а их уже три.


Коллеги, давайте договоримся о терминах:

Librarian = POINTER TO ABSTRACT RECORD ... END; (* если это называется интерфейсом библиотекаря, *)
StdLibrarian = POINTER TO RECORD (Librarian) END; (* тогда это - стандартный библиотекарь (1) *)

VAR
lib-, (* это - библиотекарь (текущий? или текучий? :) (2) *)
stdLib-: Librarian; (* это - тоже стандартный библиотекарь )) (3) *)

MODULE DevCPM;
VAR lib*: StdLib.Librarian; (* а это - библиотекарь, которым пользуется компилятор (4) *)

Я полагаю, что для обычной сборки вполне будет достаточно одного стандартного библиотекаря (1); и при работе ББ в динамической памяти будет, вероятно, один "экземпляр" этого стандартного библиотекаря (1), на который будут указывать (2), (3), (4).

При компиляции в песочницу будет, вероятно, создан еще один экземпляр стандартного библиотекаря (1), указатель на него будет помещен в (4).

ПС. В Сообщении о языке нет термина "экземпляр"; это получается безымянная переменная в динамической памяти (referenced variable in free storage).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: #046 Библиотекарь модулей
СообщениеДобавлено: Среда, 27 Январь, 2021 14:51 
Модератор
Аватара пользователя

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

Как бы понятно, для чего это.

Но мне неизвестны случаи, где бы это использовалось - и есть подозрение, что когда понадобится, то std может быть недостаточно (без возможности доступа к стеку реализаций, как у Files - например).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: #046 Библиотекарь модулей
СообщениеДобавлено: Среда, 27 Январь, 2021 18:32 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1372
Тоже об этом подумал. И даже если теоретически достаточно, все равно предпочтут пропатчить Std.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: #046 Библиотекарь модулей
СообщениеДобавлено: Среда, 27 Январь, 2021 18:43 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1372
adimetrius писал(а):
Librarian = POINTER TO ABSTRACT RECORD ... END; (* если это называется интерфейсом библиотекаря, *)
StdLibrarian = POINTER TO RECORD (Librarian) END; (* тогда это - стандартный библиотекарь (1) *)

VAR
lib-, (* это - библиотекарь (текущий? или текучий? :) (2) *)
stdLib-: Librarian; (* это - тоже стандартный библиотекарь )) (3) *)

MODULE DevCPM;
VAR lib*: StdLib.Librarian; (* а это - библиотекарь, которым пользуется компилятор (4) *)


И какой из них самый стандартный? Вместо кучи разрозненных процедур получим кучу разрозненных библиотекарей.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: #046 Библиотекарь модулей
СообщениеДобавлено: Среда, 27 Январь, 2021 19:24 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9418
Откуда: Россия, Орёл
Trurl писал(а):
Тоже об этом подумал. И даже если теоретически достаточно, все равно предпочтут пропатчить Std.


Ну я не с вариантом "пропатчить" сравнивал - а обычно либо очередная реализация полностью заменяет обычную, либо она наслаивается на предыдущую (как обычно с Files). А чтоб на базовую именно...

Хотя - возврат к базовой реализации (SetDir(std)) - типа, полезен.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: #046 Библиотекарь модулей
СообщениеДобавлено: Среда, 27 Январь, 2021 21:26 
Аватара пользователя

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 481
Trurl писал(а):
adimetrius писал(а):
Librarian = POINTER TO ABSTRACT RECORD ... END; (* если это называется интерфейсом библиотекаря, *)
StdLibrarian = POINTER TO RECORD (Librarian) END; (* тогда это - стандартный библиотекарь (1) *)

VAR
lib-, (* это - библиотекарь (текущий? или текучий? :) (2) *)
stdLib-: Librarian; (* это - тоже стандартный библиотекарь )) (3) *)

MODULE DevCPM;
VAR lib*: StdLib.Librarian; (* а это - библиотекарь, которым пользуется компилятор (4) *)


И какой из них самый стандартный? Вместо кучи разрозненных процедур получим кучу разрозненных библиотекарей.


Коллега, если я правильно ваш вопрос понял, то здесь одна процедура:

PROCEDURE (lib: Librarian) GetSpec (...), NEW, ABSTRACT;
PROCEDURE (lib: StdLibrarian) GetSpec (...);
END GetSpec;

Т.е. реализация собрана в одном месте. Везде, где раньше была куча разрозненных процедур, самостоятельно вычислявших пути к модулям и ресурсам, можно использовать один-единственный вызов.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: #046 Библиотекарь модулей
СообщениеДобавлено: Четверг, 25 Февраль, 2021 09:39 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3096
Кто-нибудь возьмется сделать пробную версию библиотекаря в таком обсуждённом виде? Может в виде ветки, к примеру.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: #046 Библиотекарь модулей
СообщениеДобавлено: Четверг, 25 Февраль, 2021 18:21 
Аватара пользователя

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 481
Я уже пользуюсь, не было времени оформить и отправить, могу сделать на днях


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: #046 Библиотекарь модулей
СообщениеДобавлено: Воскресенье, 14 Март, 2021 22:52 
Аватара пользователя

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 481
Загрузил в ветку StdLib модуль StdLib со стандартным библиотекарем и модуль DevCPM, который переводит компилятор на использование библиотекаря. Опробовал DevCPM только на простеньких примерах, предлагаю (и сам буду) опробовать в эксплуатации.
И еще следует опробовать эту 46ю поправку с поправкой 22.

ВНИМАНИЕ! В загруженном StdLib выброшено древнее соглашение об особых Code и Sym для System (на форуме было обсуждение на эту тему). Соответствующие артефакты располагаются в System/Code И System/Sym. На время пробной эксплуатации сделал себе символические ссылки BB/System/Code -> BB/Code и для Sym.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 64 ]  На страницу Пред.  1, 2, 3, 4  След.

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


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

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


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

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