С интерпретаторами exw.exe или exu комбинация control-c всегда работает и немедленно прервёт вашу программу, если у вас есть в этом необходимость.
2.6 Специальные команды высшего уровня
Перед тем, как исполнять любую из ваших команд, интерфейсный блок интерпретатора Euphoria быстро читает всю вашу программу полностью от начала и до конца. Все ваши команды проверяются синтаксически и преобразуются в низкоуровневый код на промежуточном языке (IL). Затем исполнительный блок интерпретатора немедленно приступает к исполнению кода IL, размещённого в оперативной памяти. Биндер/шроудер записывает код IL в файл .il на диск для последующих немедленных исполнений с отдельным исполнительным блоком. Транслятор преобразует код IL в код C и записывает программу C на диск. Во всех этих трёх методах преобразования текста исходного кода Euphoria используется один и тот же интерфейсный блок (написанный на Euphoria).
Если ваша программа содержит только объявления подпрограмм и переменных, но не имеет команд высшего уровня, то после её запуска не произойдёт ровно ничего (кроме, конечно, проверки синтаксиса и формирования кода IL). Поэтому в вашей программе должна быть хотя бы одна команда высшего уровня, например, вызывающая вашу главную подпрограмму на исполнение (см. 1.1 Пример программы). Возможны программы, в которых нет ничего, кроме исполняемых команд высшего уровня, без каких бы то ни было подпрограмм. Например, вы можете использовать Euphoria как простой калькулятор, записав просто несколько команд print() (или ?) с выражениями в файл, и затем исполняя его.
Как мы уже видели, на высшем уровне вы можете использовать почти любую команду Euphoria, включая циклы for, циклы while, команды if и так далее (но не return). Высший уровень - это уровень вашего главного файла на тех участках его текста, которые не относятся к определению подпрограмм, то есть вне тела любых ваших функций или процедур. Но имеется несколько специальных команд, которые могут появиться в вашей программе только на высшем уровне, это:
* include
* with / without
2.6.1 include (учесть, включить)
Когда вы пишете большую программу, часто бывает удобно разбить её на логически отдельные файлы, используя команды include. Иногда вы захотите повторно использовать уже ранее написанный и проверенный код, свой или другого автора. Вместо копирования такого кода в новую программу вы также можете использовать команды include, чтобы просто сослаться на файл, в котором необходимый вам готовый код уже имеется. Первая форма команды include записывается следующим образом:
include filename По этой команде считывается (компилируется) необходимый вам файл исходного кода Euphoria, имеющий некоторое имя filename. Несколько примеров:
include graphics.e
include mylibmyroutines.e
* Любой код, расположенный на высшем уровне включаемого файла, будет исполнен. Любые глобальные (global) имена, которые уже были объявлены и определены в вашем главном файле перед включением, будут видны и во включенном файле. Примечание: Но только те из имён, которые объявлены и определены во включаемом файле с ключевым словом global, будут видны и доступны в той части программы, которая следует за командой include. Если задано абсолютное имя файла filename, Euphoria просто откроет файл и начнёт в нём проверку правописания кода. Если задано относительное имя файла filename, Euphoria будет пытаться найти и открыть файл относительно следующих каталогов (директорий) в следующем порядке: Каталог, содержащий текущий файл исходного кода, т.е. файл, который содержит отрабатываемую в данный момент команду include ...
* Каталог, содержащий главный файл, заданный в командной строке интерпретатора, транслятора или биндера (шроудера) ...
Если вы задали на своей машине переменную окружения EUINC, Euphoria будет проверять каждый из каталогов, перечисленных в EUINC (слева направо). Переменная EUINC должна задавать список каталогов, отделённых один от другого точкой с запятой (двоеточием на Linux/FreeBSD), подобно тому, как это делается для переменной PATH. Переменная EUINC может быть добавлена в набор переменных окружения вашей операционной системы Linux/FreeBSD или DOS/Windows. (Через Control Panel/Performance & Maintenance/System/Advanced на XP, или AUTOEXEC.BAT на более старых версиях Windows), то есть,
SET EUINC=C:EUMYFILES;C:EUWIN32LIB
* Переменная EUINC позволяет вам организовать свою систему библиотек Euphoria в соответствии с потребностями конкретных программных проектов, не забивая многочисленными нестандартными библиотеками официальный каталог euphoriainclude.
* И, наконец, если заданный в команде include файл всё ещё не найден, Euphoria проверит каталог euphoriainclude. Этот каталог содержит стандартные официальные включаемые файлы (библиотеки) Euphoria. Переменная окружения EUDIR подскажет Euphoria, где искать (и под каким именем вы назначили) главный каталог, содержащий систему Euphoria, на ваших дисках (это может быть, если вы хотите, не euphoria, а eu или RDS_EU, или ещё какой-то каталог, который вам более удобен).
Включаемый файл может в свою очередь также включать другие файлы. Фактически вы можете использовать до 30 последовательных уровней "вложения" включаемых файлов. Включаемый файл обычно имеет расширение .e, но иногда это может быть .ew или .eu (когда файл предназначен именно для платформы Windows или Linux/FreeBSD). Так просто принято, но это не обязательное требование. Если filename (или путь) содержат в имени символы пробела, вы должны заключить filename в двойные кавычки. В других случаях кавычки необязательны. Не забывайте сдваивать косую черту. Например:
include "c:\program files\myfile.e"
Если не задан специальный идентификатор пространства имён (см. ниже), команда include будет безмолвно игнорировать те полностью идентичные файлы, которые уже однажды были в программу включены. Команда include должна быть записана в отдельной строке. В той же строке допускается только комментарий, но не другие команды. Вторая форма команды include записывается следующим образом:
include filename as namespace_identifier Ко всем свойствам обычной include во второй форме прибавляется возможность объявления префикса пространства имён, который может быть прибавлен перед глобальными именами, объявленными в данном включаемом файле, когда к ним производится обращение из текущего главного файла. Эти префиксы могут быть необходимыми, чтобы исключить двусмысленности с некоторыми именами, или вы находите, что ваш код становится с ними более ясным. См. раздел 2.4.2 Сцена (область видимости), чтобы вспомнить другие детали об этих префиксах.
2.6.2 with / without (с / без)
Эти специальные команды (метакоманды) управляют способами, которыми Euphoria транслирует вашу программу во внутреннюю форму (IL). Они не меняют общую логику вашей программы, но влияют на диагностическую информацию, которую вы получаете при исполнении вашей программы. См. также раздел 3. Отладка и профилирование, там есть дополнительные сведения об этих командах.
with Данная команда включает исполнение программы в один из режимов: profile (профиль), profile_time (профиль_времени), trace (трасса), warning (предупреждение) или type_check (проверка_типа) . Режимы warning и type_check включены по умолчанию, тогда как profile, profile_time и trace по умолчанию выключены. Все предупреждения, скопившиеся во время исполнения вашей программы, выводятся на экран после окончания исполнения кода программы. Предупреждения указывают на очень незначительные погрешности в коде и никогда не прерывают выполнение программы. without Данная команда выключает один из отмеченных выше режимов. Имеется также редкий в настоящее время режим with, который обозначается кодовым числом, следующим непосредственно за словом with. В предыдущих версиях Euphoria эти кодовые числа использовались исключительно RDS для сброса счётчика числа команд в редакции "Public Domain".
Вы можете назначить любую комбинацию режимов, можете изменить эти установки, но все эти изменения должны быть записаны в вашей программе между определениями подпрограмм, на высшем уровне файла, но не в теле определения подпрограммы. Единственное исключение относится к запуску одного из типов профилирования для данного прогона вашей программы.
Во включенном файле наследуются заданные установки with/without по состоянию на тот момент, в той точке, где записана команда include. Во включенном файле эти установки могут измениться, но они вернутся к своему оригинальному состоянию по окончании исполнения включенного файла. Например, библиотечный файл может выключить предупреждения для себя самого и (в первый момент) для всех библиотек, которые он сам использует, но он не может выключить таким же образом предупреждения, если они включены и действуют в главном файле.