Язык программирования Euphoria
Часть I - Ядро языка
1. Введение
Язык программирования Euphoria имеет следующие преимущества перед другими языками:
* исключительно простое, гибкое и мощное определение ядра, которое легко поддаётся изучению и дальнейшему использованию.
* динамическое распределение памяти. Переменные изменяются, не доставляя программисту забот о выделении под них и высвобождении участков памяти. Объекты любой размерности могут быть присвоены элементу ряда (массива) Euphoria.
* уникальный высокопроизводительный интерпретатор, который в 30 раз быстрее обычных интерпретаторов вроде Perl или Python.
* оптимизирующий транслятор с Euphoria на Си, ещё более разгоняющий вашу программу, часто от 2-х до 5-ти раз прибавляя ей скорости по сравнению с интерпретатором, и без того необыкновенно быстрым.
* широкая проверка правильности хода программы: контролируются индексы вне диапазона, неинициализированные переменные, неверные величины параметров библиотечных подпрограмм, недопустимые типы данных, присваиваемых переменным и т.п. Здесь практически не бывает загадочных машинных исключений -- вы всегда получаете полное описание на человеческом языке того, что случилось с вашей программой во время её прогона, плюс распечатку последовательности вызовов подпрограмм и значений всех переменных программы. Программа отлаживается быстро, просто и более досконально.
* вы полностью защищены от необходимости знать особенности вашей машины. Для программирования не требуются сведения о длине машинных слов, представлении величин на битовом уровне, порядке байтов и т.д. и т.п.
* в интерпретатор встроены полноэкранный отладчик исходного кода и профилировщик хода программы. В пакете имеется полноэкранный многофайловый редактор с цветной подсветкой правильного синтаксиса и автозавершением стандартных конструкций языка. Этот редактор написан на Euphoria, и его исходный код предоставляется вам без каких бы то ни было ограничений.
* программы Euphoria работают на платформах Linux, FreeBSD, 32-битной Windows и DOS любой версии, не имея никаких ограничений на объем доступной для использования памяти, в том числе, пресловутых 640K. Вы можете создавать программы, которые автоматически используют всю много-мегабайтную оперативную память вашей машины, плюс дисковый файл памяти, если оперативной оказывается недостаточно.
* вы можете трансформировать исходный код ваших программ в самостоятельные двоичные исполняемые файлы разнообразных типов и форматов.
* подпрограммы Euphoria естественным образом универсальны. Пример программы, который вы найдете чуть ниже, демонстрирует единственную подпрограмму, которая одинаково успешно сортирует данные любого типа : целые числа, числа с плавающей точкой, строки и т.д. При этом Euphoria не является "объектно-ориентированным" языком, а достигает многих преимуществ этих языков значительно более простым путём.
* система программирования Euphoria полностью свободна и открыта.
1.1 Пример программы
Здесь представлен пример завершённой программы Euphoria.
~~~~~~~~~~~
sequence list, sorted_list
function merge_sort(sequence x)
-- сортирует x в порядке возрастания методом рекурсивного слияния
integer n, mid
sequence merged, a, b
n = length(x)
if n = 0 or n = 1 then
return x -- тривиальный случай
end if
mid = floor(n/2)
a = merge_sort(x[1..mid]) -- сортируется первая половина x
b = merge_sort(x[mid+1..n]) -- сортируется вторая половина x
-- слияние двух отсортированных половинок
merged = {}
while length(a) 0 and length(b) 0 do
if compare(a[1], b[1]) then
merged = append(merged, a[1])
a = a[2..length(a)]
else
merged = append(merged, b[1])
b = b[2..length(b)]
end if
end while
return merged & a & b -- слитые данные плюс остатки
end function
procedure print_sorted_list()
-- генерирует sorted_list из list
list = {9, 10, 3, 1, 4, 5, 8, 7, 6, 2}
sorted_list = merge_sort(list)
? sorted_list
end procedure
print_sorted_list() -- эта команда запускает программу
~~~~~~~~~~~
Данный пример содержит 4 отдельные команды, которые выполняются последовательно. Первая объявляет две переменные: list и sorted_list как ряды (sequence) (гибкие массивы). Вторая определяет функцию merge_sort(). Третья определяет процедуру print_sorted_list(). Четвёртая и последняя команда вызывает процедуру print_sorted_list() на исполнение.
Программа печатает на экране:
{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}.
merge_sort() так же легко отсортирует {1.5, -9, 1e6, 100} или {"oranges", "apples", "bananas"} .
Данный пример имеется в каталоге Euphoria -- euphoria\tutorial\example.ex . Это не самый быстрый из методов сортировки, доступных в Euphoria. Перейдите в каталог -- euphoria\demo -- и введите команду "ex allsorts", чтобы проверить хронометраж различных алгоритмов сортировки при возрастании числа сортируемых объектов. Быстрый учебный пример программирования аналогичной функции на Euphoria вы можете также найти в -- euphoria\demo\bench\filesort.ex .
1.2 Установка
Чтобы установить систему Euphoria на своей машине, сначала прочтите инструкцию в файле install_r.doc . Установка заключается в простом копировании файлов euphoria на ваш жесткий диск в каталог (директорию) с именем "euphoria", и последующей модификации вашего файла autoexec.bat с таким расчётом, чтобы включить каталог euphoria\bin в путь поиска, а переменную окружения EUDIR установить на каталог euphoria.
После установки каталог euphoria на вашей машине будет выглядеть примерно так:
\euphoria readme.doc readme.htm License.txt \bin Интерпретаторы ex.exe и exw.exe. Трансляторы ec.exe и ecw.exe. Или на Linux/FreeBSD, интерпретатор exu и транслятор ecu. Здесь также будут служебные программы, такие как ed.bat, guru.bat и т.д. \include стандартные библиотеки, т.е. graphics.e и т.п. \source полный исходный код (интерпретатор, транслятор, биндер) \doc refman.doc, library.doc и другие файлы документации в простом текстовом формате \html файлы формата HTML, соответствующие каждому из файлов .doc в каталоге doc \tutorial небольшие учебные программы, которые помогут вам в изучении Euphoria \demo общие демо-программы, которые работают на всех платформах \dos32 демо-программы, специфические для DOS32 (может не быть) \win32 демо-программы, специфические для WIN32 (может не быть) \linux демо-программы, специфические для Linux/FreeBSD (может не быть) \langwar игра language war (пиксельно-графическая версия для DOS или текстовая версия для Linux/FreeBSD) \bench программы оценки производительности Подкаталог Linux не включается в пакет для DOS/Windows, а dos32 и win32 подкаталоги не включаютя в пакет для Linux/FreeBSD. В данном Руководстве каталоги показаны с использованием обратной косой черты. ( \ ). Пользователи Linux/FreeBSD должны помнить, что там действует обычная косая черта( / ).