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/ |