Главная

Монитор

Главная
SINT
Ликбез
Уровни
Монитор
Код

Карта

Монитор




Назад...   Далее...

Изначально идея SINT состояла лишь в использовании единого кода, поскольку мне приходилось разрабатывать и сопровождать довольно большое количество разных программ. Большинство этих программ были диалоговые, и вскоре там появились средства программирования в событиях - основная техника программирования диалога. Чуть позже сходный механизм был реализован и для других объектов, которые уже могли иметь входные и выходные параметры. Наконец, оба этих подхода были объединены, и в данный момент "сердце" SINT называется монитор - утилита системного уровня, обеспечивающая возможность объектного, операторного и событийного программирования в рамках одной задачи.

Алгоритмически идея монитора довольно проста - он обслуживает процесс, то есть набор управляющих данных, представленных в виде стека очередей. Новая группа (объектов или событий) просто заносится как очередь (LIFO) на вершину стека (FIFO), т.е. очередь на вершине стека - это самые приоритетные на данный момент данные, которые обслуживаются по своей очереди "вне очереди". Ниже по стеку расположены те очереди, которые не будут обслужены до обработки всех верхних очередей стека. Собственно, именно так работает любой процессор: обслуживание текущей очереди определяется регистром счётчика команд, а выполнение вложенных процедур - регистром указателя стека. Для доступа к возвращаемым значениям методов используется стек аккумуляторов, аналогично стеку регистров сопроцессора, для неоднородных объектов - специальный стек системного уровня. Очередное событие из стека очередей обслуживается текущим обработчиком. Размер стека составляет обычно 64 очереди. Внутри одной очереди элементы однородны и обезличены - их тип указывается лишь для очереди в целом. Понятно, что это никак не сказывается на гибкости инструментария, поскольку очередь может состоять хоть из одного элемента, и при необходимости выполнить разнородную очередь, она просто укладывается по частям в стек нужным образом.

После начальной инициализации системных объектов управление передается диспетчеру (монитору), который и выполняет все требуемые действия, руководствуясь заложенными в эту программу управляющими данными: генерит и обрабатывает события, вызывает необходимые методы и т.д. Программирования в обычном смысле (т.е. разработки специализированных функций) вообще может не быть. По крайней мере, оно играет вспомогательную роль. Монитор работает по паспорту [текущего] процесса, который содержит информацию о потоках данных и методах их обработки. Таких потоков может быть несколько (входных и выходных), и располагаться они могут в ОЗУ (в теле исполняемой программы) или во внешних файлах - как данные, так и методы: программирование возможно не только в операторном стиле, не только на уровне объектов и событий, но и на уровне шаблонов, т.е. для уже скомпилированной программы. При старте программы пакетной обработки открываются файлы входных потоков данных (в т.ч. при необходимости файлы управляющих потоков) и создаются файлы выходных потоков. Вся необходимая информация для этого содержится в стартовой очереди методов, а также, возможно, в аргументах командной строки и/или файлах шаблонов, управляющих процессом обработки. В некоторых случаях эти потоки могут многократно переоткрываться - например, генератор сайтов за один цикл может создать сотни и тысячи веб-страниц, используя сотни и тысячи файлов шаблонов и других входных данных.

Вообще говоря, смотреть на тексты системного уровня SINT - занятие не для слабонервных! Алгоритмически всё просто: инициализация системных переменных, после чего управление передаётся монитору, который и разбирается с установленным по умолчанию стеком очередей, т.е. по внешнему виду головной программы вообще невозможно понять, что она делает - всё вынесено в программирование данными. Но если глянуть хотя бы на утилиту выдачи аварийной диагностики... нет, это отнюдь не знаменитое "Hello, World!" - это кошмар какой-то! Она не просто выводит код ошибки и его расшифровку, но и (при включённом режиме отладки) показывает, при какой операции это случилось, при обработке какого объекта какого класса, причём выдаёт это на текущем языке, в текущей палитре текущего окна сообщений (которое, возможно, создаёт), да ещё и может обращаться к запросом к пользователю на предмет, что с этой ошибкой делать, то бишь входит в режим меню (если посчитает нужным). Весь этот ужас выполняется... всё тем же монитором! Нет, господа - староват я уже для таких подвигов! Будем упрощать со страшной силой: мультиязычность отменяем к чертям собачьим (класс объектов "мультиязычная строка" пока сохраним - он каши не просит), объём диагностики сокращаем, а вывод делаем самый примитивный, максимально приближенный к обычной printf - никаких диалоговых программ в SINT давно уже не пишется: на это дело браузер есть. Да, вот так примерно.
Назад...   Далее...

08.12.2017 20:43
 
`