Разделы
- 1. Введение
- 2. Описание языка
- 3. Интерфейс программирования приложений (API)
- 3.1. Стек
- 3.2. Резервация памяти
- 3.3. Сообщения
- 3.4. Типы данных
- 3.5. Функции
- 3.5.1. Базовые функции скриптоввой системы
- 3.5.2. Функции для вставки на вершину стека значения
- 3.5.3. Перевод значений со стека в скриптовую ситему (экспорт (stack => script))
- 3.5.4. Функции для получения со стека (stack => C(++))
- 3.5.5. Функции для работы с аргументами в вызванной C(++) функции из скриптовой системы (script => C(++) function)
- 3.5.6. Функции отладки (DEBUG)
- 3.5.7. Функции для работы с препроцессом
- 4. Стандартная библиотека
3.1. Стек
Тип виртуальной машины - стековая. Общение между хост программой и средой s4g осуществляется посредством стека. В данной версии - через стек исполнения виртуальной машины. То есть, по сути, каждый вызов API функции генерирует команды для исполнения виртуальной машиной.
Размер стека исполнения ограничен значением дефайна S4G_VM_MAX_SIZE_STACK_EXE
, который объявлен в s4g.h
, по умолчанию 1000
, при превышении этого количества элементов в стеке будет выдана соответствующая ошибка.
Ограничение стека исполнения сделано для того, чтобы избежать как ошибок программистов хост программы, так и ошибок разработчиков данной машины.
В то же время, инструкции такого большого объема могут свидетельствовать о возможно неверном подходе к разработке скрипта.
Переполнение стека исполнения может говорить о неверной проектировки взаимодействия хост программы со скриптами.
Данный стек может принимать только значения типа s4g_value
. Однако объекты данного типа могут содержать в себе все то, что может содержать код скрипта. И API s4g предоставляет для этого необходимые возможности.
Также виртуальная машина содержит еще дополнительный стек вызовов, который служит для хранения данных для вызова и возврата. Данный стек имеет ограничение по размеру, которое регулируется дефайном S4G_MAX_CALL
, определенным в s4g.h
, и означает максимальное количество вызовов (как рекурсивных, так и вложенных), по умолчанию 1000
. При превышении этого количества будет выдана соответствующая ошибка. Если Вам нужно большее количество - увеличивайте это значение.
Виртуальная машина содержит еще и стек блоков, который не имеет границ (кроме памяти). Данный стек работает (в правильном режиме) по классическому понимаю стека.
Индексация стека начинается с нуля. Реализация стеков не придерживается классического правила стеков (первый зашел – последний вышел). Положительный индекс это абсолютное положение в стеке, отрицательный индекс это позиция элемента относительно вершины стека, то есть -1 это вершина стека, -2 на один элемент ниже вершины и так далее.