Разберёмся с написанным кодом.
Команда _load в файле сценария запуска с расширением scol указывает, что нужно запустить файл программы с расширением pkg, находящемуся по указанному пути.
В нашем случае виртуальная машина автоматически распознала путь C:\Program Files (x86)\Scol Voyager\Partition_LockedApp , а потом перешла уже по дальнейшему пути к нужному файлу "Moya_pervaya_programma/Hello_mir.pkg"
Вторая строка скрипта, где написана команда
main приказывает программе запустить главную функцию
fun main()Программа, написанная на языке SCOL может содержать следующие виды определений:
--
def - определение функций
--
var и
typeof - с этих ключевых слов начинаются определения переменных
--
typedef и
struct - определения новых типов
-- И так далее...
Каждое определение заканчивается двойной точкой с запятой ";;". Такой способ записи взят из языка Caml, который был разработан в 1985 году в Национальном научно-исследовательском институте Франции (INRIA).
Комментарии записываются как в языке Си - между символами /* и */
Но в отличии от языка Си, комментарии можно делать многоуровневыми (древовидными), что является более практичным.
Итак, в нашей программе у нас есть главная функция "main", за которой следует пара скобок. Между скобками ничего нет - это значит, что функция не принимает никакие аргументы (параметры). За знаком равно "=" следует тело функции, которое может состоять из множества операторов. Каждый оператор (выражение) заканчивается точкой с запятой, а каждое определение, как было сказано выше - двойной точкой с запятой. В нашем примере тело функции имеет два оператора
_showconsole;
_fooS ">>>>>>>>>>>> Hello Mir!";;
Чтобы указать, что _fooS ">>>>>>>>>>>> Hello Mir!" является последним оператором в теле функции, он закрывается двойной точкой с запятой. показывая таким образом виртуальной машине, что определение функции закончено.
Выражение _showconsole; указывает, что консольное окно нужно отобразить на экране. В противном случае консоль окажется скрытой.
Проще говоря - это окно вообще не покажется на экране, ни в развёрнутом, ни в свёрнутом виде.
Второе выражение позволяет напечатать нужную нам строку в консоли.
_showconsole и _fooS это библиотечные функции (то есть заранее записанные и встроенные в виртуальную машину) языка.
_fooS требует принятия аргументов типа "строка"
(типы изучим позже), затем отображая эту строку в консоли.
В языке SCOL аргументы функций записываются не в скобках, как в языке Си. Они следуют сразу за именем функции. Также аргументы не разделяются запятыми как в Си, а пишутся друг за другом через пробел.
Если вы захотите всё же использовать скобки, то нужно заключать в них либо аргумент, либо полностью запись "функция+аргумент"
Следующие три выражения равнозначны и полностью корректны:
_fooS (">>>>>>>>>>>> Hello World»)
(_fooS ">>>>>>>>>>>> Hello World")
(_fooS (">>>>>>>>>>>> Hello World"))
Позднее мы вернёмся к этому важному моменту.
Обратите внимание - если вам не нравится использовать круглые скобки, можете писать вместо них фигурные скобки. Они работают точно таким же образом (используются для той же цели).
Виртуальная машина работает до тех пор, пока не закрыто окно консоли. Как только вы закроете это окно - машина тоже прекратит работу. Это, кстати, один из способов прекращения работы SCOL-машины.
Что касается вывода нашей программы в консоль, заметьте, что перед выводом на печать строки Hello Mir! чуть выше появляется строка
fun main : fun [] S Эта надпись очень важна - она говорит о том, что виртуальная машина успешно скомпилировала функцию main, дав ей нужный тип. Машина поняла, что функция не принимает никаких значений (параметров, аргументов), и возвращает тип "строка".
Обратите внимание, что в SCOL очень редко приходится вручную определять тип функции а также типы её аргументов и возвращаемых значений. Виртуальная машина обычно делает это за программиста.