Руководство разработчика

Функции, определенные в модулях

Функции в подключаемых модулях могут производить оптимизированные расчеты, взаимодействовать с внешними данными и устройствами, т.е. решать самый широкий круг задач. Функции и методы, определяемые в подключаемых модулях, могут иметь нестандартного вида параметры, что в некоторых случаях бывает очень полезно. Например, это необходимо для определения функций с переменным числом параметров.

Функции, объявленные в подключаемых модулях, могут иметь необязательные параметры, использовать гибкую интерпретацию типов (в зависимости от какого-то условия, например, от вида других параметров, параметр может принимать значения различных типов), и т.п. Для этого в подключаемых модулях используются функции кодирования и декодирования параметров.

Функция-кодировщик запускается каждый раз, когда компилятор встречает в исходном тексте алгоритма вызов функции или метода. Функция принимает в качестве параметров дескриптор компилятора, дескриптор текущего исходного текста и, в качестве выходного параметра, дескриптор буфера компиляции. Задачей функции является анализ исходного текста и запись необходимых выходных данных в буфер компиляции.

Например, вызвана функция Ф1(а, [ПЕРЕМ СТРОКА:б]) - первый параметр функции ("а") является выражением, а второй необязательный параметр ("б") передается по ссылке (параметр-переменная).

Кодирование параметров функции в этом случае производится по следующей схеме:

  1. Проверка наличия обязательного символа открывающей скобки;
  2. Запись выражения "а" в буфер параметров;
  3. Проверка наличия запятой (запятая - необязательный символ). Если запятая присутствует - выполняется п.4., если запятой нет - п.5;
  4. Запись переменной "б" в буфер параметров;
  5. Проверка наличия обязательного символа закрывающей скобки.

Функция-декодировщик вызывается при выполнении кода функции или метода виртуальной машиной. Функция производит декодирование буфера параметров и вычисляет их значения. Функции кодирования и декодирования параметров являются парными функциями, то есть находятся в одном модуле, функционируют в одной информационной среде, и их работа должна быть синхронизирована.


См. также: