7. Модули рефал-программ
Программа на рефале может состоять из одного или нескольких модулей. Функции, которые будут многократно использоваться, удобно оформлять отдельными модулями. Все стандартные функции оформлены как отдельные модули.
Для описания входных точек модуля используется служебное предложение $ENTRY, для описания имен внешних функций - служебное предложение $EXTRN.
Имена, описанные посредством служебных предложений $ENTRY, $EXTRN становятся глобальными, т.е. ими можно пользоваться в других модулях. Поэтому на имена входных и внешних функций накладываются ограничения, которые требует операционная система.
Все имена функций, которые используются в модуле, и которые не описаны при помощи предложения $EXTRN, должны быть именами функций, описанных в этом модуле.
Если имя D описано в каком-то модуле при помощи предложения $ENTRY, то вычисление терма
<D e.1>
в любом другом модуле, в котором D описана как внешняя функция, вызовет обращение к первому модулю.
Таким образом, предложения $ENTRY, $EXTRN организуют межмодульные связи.
Любая рефал-программа начинает свою работу с вычисления поля зрения следующего вида
<D >
где D должно быть описано в служебном предложении $ENTRY некоторого модуля.
Способ задания имени D зависит от реализации. Имя D задается в качестве параметра задания на выполнение рефал-программы. Во всех примерах у нас используется имя Go.
Одним из способов передачи информации от модуля к модулю является использование копилки. Копилка для всех модулей одна! Поэтому все, что закапывалось в одном из модулей программы, может быть выкопано в другом.