OberonCore
https://forum.oberoncore.ru/

#018 Единая точка отладочного вывода
https://forum.oberoncore.ru/viewtopic.php?f=134&t=6522
Страница 3 из 3

Автор:  Trurl [ Суббота, 29 Февраль, 2020 08:29 ]
Заголовок сообщения:  Re: #018 Единая точка отладочного вывода Kernel.ConsHook

adimetrius писал(а):
При этом SYSTEM.PTR участвует в сборке мусора, а untagged POINTER - нет.

Как локальные переменные они участвуют в сборке мусора абсолютно одинаково. Впрочем, как и INTEGER и даже REAL.

Автор:  Евгений Темиргалеев [ Суббота, 29 Февраль, 2020 23:31 ]
Заголовок сообщения:  Re: #018 Единая точка отладочного вывода Kernel.ConsHook

adimetrius писал(а):
Евгений, вы в чате предложили ввести Kernel.SetErr(двеПроцедурыВывода). Вас такое решение устроит в плане сохранности интерфейса ядра?

Да, меня оно устроит. Потому что если говорить о сохранности интерфейса, учитывая контекст, то надо различать два случая.

1) В интерфейсе модуля Kernel могут появиться процедуры, которые настраивают работу самого ядра. Варианты ядер могут быть разные, и это нормально. Это никак не затрагивает другие модули, которые используют существующий интерфейс Kernel.
2) В интерфейсе модуля Kernel могут появиться новые "прикладные" процедуры, которые непосредственно предназначены для использования другими модулями. И ряд модулей предлагается посадить на этот расширенный прикладной интерфейс.

Автор:  Иван Денисов [ Воскресенье, 01 Март, 2020 05:34 ]
Заголовок сообщения:  Re: #018 Единая точка отладочного вывода Kernel.ConsHook

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

Как я понял, есть опасения, что их начнут использовать для других модулей.
Но ведь можно оговорить это в документации "используйте Console.WriteErrStr".

В самом Console предлагаю переделать, чтобы был вывод раздельный в два канала.
Код:
STDOUT_FILENO* = 1;
STDERR_FILENO* = 2;


Эти два канала есть и в Windows, как я убедился уже.

Вот сейчас такой интерфейс.
Код:
   PROCEDURE (c: Console) WriteStr- (IN s: ARRAY OF CHAR), NEW, ABSTRACT;
   PROCEDURE (c: Console) WriteChar- (ch: CHAR), NEW, ABSTRACT;
   PROCEDURE (c: Console) WriteLn-, NEW, ABSTRACT;


Для общепринятого журналирования ошибок надо добавить процедуры, которые будут писать в канал STDERR
Код:
   PROCEDURE (c: Console) WriteErrStr- (IN s: ARRAY OF CHAR), NEW, ABSTRACT;
   PROCEDURE (c: Console) WriteErrChar- (ch: CHAR), NEW, ABSTRACT;
   PROCEDURE (c: Console) WriteErrLn-, NEW, ABSTRACT;

Автор:  Борис Рюмшин [ Воскресенье, 01 Март, 2020 13:46 ]
Заголовок сообщения:  Re: #018 Единая точка отладочного вывода Kernel.ConsHook

Иван Денисов писал(а):
И придется делать копию реализации.

И для системных целей в этом нет совершенно ничего плохого.

Автор:  Евгений Темиргалеев [ Понедельник, 02 Март, 2020 05:01 ]
Заголовок сообщения:  Re: #018 Единая точка отладочного вывода Kernel.ConsHook

Иван Денисов писал(а):
Для общепринятого журналирования ошибок надо добавить процедуры, которые будут писать в канал STDERR

А может лучше добавить еще одну консоль?

VAR
out-, err-: Console;

Автор:  Иван Денисов [ Понедельник, 02 Март, 2020 06:48 ]
Заголовок сообщения:  Re: #018 Единая точка отладочного вывода Kernel.ConsHook

В плане реализации так можно. Но потом ведь ещё интерфейсный процедуры делать:

Код:
   PROCEDURE WriteStr* (IN text: ARRAY OF CHAR);
   BEGIN
      cons.WriteStr(text)
   END WriteStr;

   PROCEDURE WriteChar* (c: CHAR);
   BEGIN
      cons.WriteChar(c)
   END WriteChar;

   PROCEDURE WriteLn*;
   BEGIN
      cons.WriteLn
   END WriteLn;


Будет тогда так
Код:
   PROCEDURE WriteErrStr* (IN text: ARRAY OF CHAR);
   BEGIN
      cons.WriteErrStr(text)
   END WriteErrStr;

   PROCEDURE WriteErrChar* (c: CHAR);
   BEGIN
      cons.WriteErrChar(c)
   END WriteErrChar;

   PROCEDURE WriteErrLn*;
   BEGIN
      cons.WriteErrLn
   END WriteErrLn;


Или так
Код:
   PROCEDURE WriteErrStr* (IN text: ARRAY OF CHAR);
   BEGIN
      err.WriteStr(text)
   END WriteErrStr;

   PROCEDURE WriteErrChar* (c: CHAR);
   BEGIN
      err.WriteChar(c)
   END WriteErrChar;

   PROCEDURE WriteErrLn*;
   BEGIN
      err.WriteLn
   END WriteErrLn;

Автор:  Sergej Durmanov [ Понедельник, 02 Март, 2020 09:05 ]
Заголовок сообщения:  Re: #018 Единая точка отладочного вывода Kernel.ConsHook

Зачем все эти сложности, когда можно напрямую обращаться, типа Log.out.WriteChar( c ); Log.err.WriteChar( c );

Автор:  Иван Денисов [ Понедельник, 02 Март, 2020 09:29 ]
Заголовок сообщения:  Re: #018 Единая точка отладочного вывода Kernel.ConsHook

Sergej Durmanov писал(а):
Зачем все эти сложности, когда можно напрямую обращаться, типа Log.out.WriteChar( c ); Log.err.WriteChar( c );


Лучше стараться уходить от ООП в интерфейсах. Скрывать его в реализации, как позорную веху истории :)

Автор:  Sergej Durmanov [ Понедельник, 02 Март, 2020 12:09 ]
Заголовок сообщения:  Re: #018 Единая точка отладочного вывода Kernel.ConsHook

Как раз с ооп есть единая точка с возможностью смены реализации без всяких правок. необоснованный отказ от ооп и создает подобные проблемы.

Автор:  Илья Ермаков [ Понедельник, 02 Март, 2020 15:39 ]
Заголовок сообщения:  Re: #018 Единая точка отладочного вывода Kernel.ConsHook

adimetrius писал(а):
Илья Ермаков писал(а):
на уровне системных соглашений принять за некий инвариант существующую модель (как она бинарно организована и во время выполнения "живёт")...
Не считать её тупо внутренней кухней "аа, поменяем как хотим".


Илья, а как вы себе это "принять" представляете? Вы вот сделали документацию к ядру, я постоянно в ней справляюсь - я принял, к сведению и на вооружение.

Вы осенью справедливо упомянули о "пробеле" в этой структуре: оссуствуют метасведения о типовых процедурах. Если "цементировать", то сначала бы восполнить его. Как полагаете?

Я, кмк, еще один пробел нашел: SYSTEM.PTR и POINTER [untagged] TO Something в метасведениях про локальные переменные - неотличимы. При этом SYSTEM.PTR участвует в сборке мусора, а untagged POINTER - нет. Впрочем, это уж совсем частности.


Принять не в смысле "цементировать". Как раз пробелы дополнять.

Но понимать, что это тоже есть целостная модель, а не просто "потроха".

Автор:  Борис Рюмшин [ Понедельник, 02 Март, 2020 15:47 ]
Заголовок сообщения:  Re: #018 Единая точка отладочного вывода Kernel.ConsHook

Отладку для Host части (и только для неё), кстати, целесообразно разместить не в Kernel, или в дополнительном модуле линкуемом, а в HostFiles. Евгений об этом, кажется, говорил.

Автор:  Иван Денисов [ Понедельник, 02 Март, 2020 15:52 ]
Заголовок сообщения:  Re: #018 Единая точка отладочного вывода Kernel.ConsHook

В HostFiles я за копипасту теперь, раз использовать ядро нельзя.
Обсуждаем вопрос доработки Console для остальных Host модулей.

Автор:  Иван Денисов [ Воскресенье, 08 Март, 2020 17:22 ]
Заголовок сообщения:  Re: #018 Единая точка отладочного вывода Kernel.ConsHook

Организация единства точки отладочного вывода теперь возможна установкой процедур вывода через SetErr в модулях Kernel, HostFiles, HostPackedFiles. По умолчанию в этих модулях скопированы внутри платформы (Windows/Linux) реализации для вывода в консоль.

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