Вперед: Основные команды языка
Вверх: Приложение Б. Псевдокод системы
Назад: Ассемблер псевдокода
  Содержание
В машине есть:
- стек. В нем хранятся строки, которые могут быть использованы как
аргументы вызовов, как числа, как HTML-фрагменты. Содержимое стека
нетипизировано.
- текущая последовательность команд и счетчик команд.
- локальные переменные (слоты).
- глобальные переменные (в начале цикла работы машины
инициализируются CGI-переменными).
- стек вызовов. В нем хранятся ссылки на текущие последовательности
команд, счетчики команд и вспомогательные переменные, описывающие
состояние виртуальной машины.
Машина запускается сразу после получения HTTP-запроса. Создаются
стеки, глобальные переменные инициализируются из CGI-переменных. По
URL определив библиотеку и модуль, ответственный за него и значения
слотов, которые должны быть выставлены, система формирует массив
локальных переменных.
Каждая библиотека имеет статическую и динамическую часть. Динамическая
часть представляет собой класс, который является наследником
(возможно, непрямым) класса WebOS::Publishing::Library; модули -- это
методы этого класса. Ясно, что при обработке запроса должен быть
создан объект этого класса. Именно в нем (как свойства объекта)
хранятся переменные, являющиеся общими для всех модулей (т.е.
формирующие данные виртуальной машины) - все системные структуры
(стек операндов, стек вызовов и т.д.).
Кроме того, на каждый вызываемый модуль создается объект класса
WebOS::Publishing::Module , в котором содержится информация о данном
модуле (его имя, ссылка на цепочку команд, счетчик команд, обратная
ссылка на WebOS::Publishing::Library; и т.д.). Стек вызовов просто
представляет собой массив ссылок на объекты класса
WebOS::Publishing::Module . На вершине стека стоит ссылка на того, кто
вызвал текущий модуль. Если стек вызовов пуст, модуль является главным
и его результат есть HTML-страница.
|