Часть I - Ядро языка

1. Введение

 
Euphoria это новый язык программирования, которому свойственны заметные преимущества перед обычными языками:

  • исключительно простое, гибкое и мощное определение языка, которое легко изучить и применять.

  • динамическое распределение памяти. Переменные увеличиваются и уменьшаются, не заставляя программиста заботиться о выделении и освобождении участков памяти. Объекты любой размерности и состава могут быть присвоены единственному элементу ряда Euphoria (массиву).

  • высокопроизводительный, изощренный интерпретатор, который, по меньшей мере, в 10 - 30 раз быстрее обычных интерпретаторов вроде Microsoft QBasic, Perl и Python.

  • молниеносная прекомпиляция. Ваша программа проверяется синтаксически и переводится в эффективную внутреннюю форму со скоростью более 35000 строк в секунду на машине с Pentium-150.

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

  • особенности используемого оборудования полностью лежат на совести интерпретатора. Программы могут ничего не знать о длине машинных слов, битовом представлении величин, порядке байтов и т.д.

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

  • Программы Euphoria исполняются под Linux, 32-бит Windows или любым DOS-окружением, и не испытывают никаких 640K ограничений памяти. Вы можете создавать программы, которые занимают всю многомегабайтную память вашего компьютера. Автоматически подключается перенос кода и данных в своп-файл, если программе нужно больше памяти, чем установлено в банках ОЗУ на вашей машине.

  • Вы можете создать из вашей многофайловой программы единственный самостоятельный .exe-файл.

  • Подпрограммы 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]) < 0 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 как ряды (гибкие массивы). Вторая определяет функцию 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\tutorial\example.ex. Но это не самый быстрый метод сортировки в Euphoria. Перейдите в каталог euphoria\demo и введите "ex allsorts", чтобы просмотреть хронометраж нескольких различных алгоритмов сортировки при возрастающем числе сортируемых объектов. В качестве быстрого учебного введения в программирование на Euphoria прочитайте файл euphoria\demo\bench\filesort.ex, вам очень многое станет ясным после нескольких минут внимательного чтения.



1.2 Установка пакета

Ах, да! Возможно, вы еще не установили пакет Euphoria на своей машине! Чтобы установить Euphoria на вашей машине, сначала прочитайте файл installr.doc. Установка заключается в копировании файлов euphoria на ваш жесткий диск в каталог с именем "euphoria", и последующем изменении вашего файла autoexec.bat так, чтобы поместить каталог euphoria\bin в путь поиска исполняемых программ, а переменную окружения EUDIR установить на каталог euphoria. Под DOS/Windows автоматическая установка пакета производится программой install.bat и включает в себя все вышеперечисленные операции. Чтобы точно представлять, что происходит с вашей машиной при автоматической установке, пожалуйста, прочитайте все же инструкции в файле installr.doc, прежде чем запустить install.bat.

После установки каталог euphoria будет выглядеть примерно следующим образом:

\euphoria
readme.doc
readme.htm
\bin
ex.exe and exw.exe, или exu (Linux), ed.bat, guru.bat, другие утилиты
\include
стандартные include-файлы, т.е. graphics.e и т.д.
\doc
refman.doc, library.doc и несколько других файлов документации в обычном текстовом формате
\html
гипертекстовые HTML-файлы, соответствующие по содержанию каждому из файлов .doc в каталоге doc, но предназначенные для очень удобного чтения с помощью браузера Интернет.
\tutorial
небольшие учебные программы, которые помогут вам изучить Euphoria
\demo
общие демо-программы, которые исполняются на всех платформах
\dos32
специфические для DOS32 демо-программы (может не быть)
\win32
специфические для WIN32 демо-программы (может не быть)
\linux
специфические для Linux демо-программы (может не быть)
\langwar
игра "война языков" (пиксельно-графическая версия для DOS или текстовая версия для Linux)
\bench
программы для проверок производительности
\register
информация о получении Euphoria Complete Edition

Подкаталог linux не создается при установке версии для DOS/Windows, а подкаталоги dos32 и win32 не создаются при установке версии для Linux. В этом руководстве имена каталогов показаны везде с использованием обратной косой черты (\). Пользователи Linux должны учитывать, что для них это обычная косая черта (/).



1.3 Исполнение программы

Программы Euphoria запускаются на исполнение вводом команды ex, exw или exu, сопровождаемой именем файла, содержащего программу Euphoria. Вы можете к имени файла добавлять так называемые параметры запуска (аргументы командной строки), которые должны идти за именем программы в той же самой строке приглашения, известной как командная строка. В программе Euphoria может быть вызвана стандартная подпрограмма command_line(), чтобы прочитать из командной строки параметры запуска и учесть их. Версия интерпретатора Euphoria для DOS32 называется ex.exe. Версия интерпретатора Euphoria для WIN32 называется exw.exe. Версия интерпретатора Euphoria для Linux называется exu. Соответственно, главные файлы Euphoria имеют расширение .ex, .exw или .exu. Другие файлы Euphoria, предназначенные для включения в более крупные программы в качестве библиотек, имеют расширение .e или иногда .ew или .eu. Для краткости вы можете опускать ".ex", вводя команду запуска, и интерпретатор, запущенный командой ex, автоматически проверит правильность типа файла, выбранного вами для исполнения как программы Euphoria. exw.exe автоматически поддерживает расширение ".exw", а exu ".exu". Если файла нет в текущем каталоге, проверяется путь PATH. Вы можете перенаправить стандартные вход и выход при запуске программы Euphoria, например:

        ex filesort.ex < raw.txt > sorted.txt
или проще,
        ex filesort < raw.txt > sorted.txt

В отличие от многих других компиляторов и интерпретаторов, ex, exw и exu не требуют никаких параметров запуска в командной строке. Они ожидают только имя вашей программы Euphoria, и если не находят его, приглашают вас набрать и ввести его с клавиатуры.

В запуске часто используемых программ Euphoria под DOS/Windows вам могут помочь маленькие .bat-файлы, так называемые пакетные программы (batch), например, как эта myprog.bat, содержащая два оператора, по одному в каждой строке:

        @echo off
        ex myprog.ex %1 %2 %3
Первый оператор выключает вывод собственно пакетных команд на экран. Второй запускает ex myprog.ex, и при необходимости в программу Euphoria может быть подано до трех параметров запуска, если этими параметрами сопроводить .bat-файл. Прочитайте справку о command_line(), чтобы уяснить, как эти параметры попадают в программу Euphoria. Если вашей программе необходимо больше параметров, их легко добавить, дописав во второй строке %4 %5 и т.д. Имея .bat-файлы, вы с помощью подобных элементарных приемов можете сэкономить много времени, продумав, как вам организовать и упростить свою работу. Это только на первый взгляд кажется, что нет большой разницы, когда вы пишете каждый раз ex (или exw), или не пишете, то есть, можете вы просто набрать:
        myprog
вместо:
        ex myprog
или не можете. К сожалению, DOS не разрешает перенаправление стандартных входа и выхода, если вы используете .bat-файлы.

Под Linux вы можете ввести путь к интерпретатору Euphoria в первой строке вашего главного программного файла, т.е. если ваша программа называется foo.exu:

        #!/home/rob/euphoria/bin/exu
        
        procedure foo()
            ? 2+2
        end procedure

        foo()
Затем вы делаете ваш файл исполняемым:
        chmod +x foo.exu
и можете просто вводить:
        foo.exu 
чтобы запустить вашу программу. Вы можете даже укоротить имя до простого "foo". Euphoria игнорирует первую строку вашей программы, если она начинается с #!. Однако будьте внимательны, в этом случае строка должна заканчиваться в стиле Linux - \n, но не в стиле DOS/Windows - \r\n, иначе оболочка Linux может запутаться.

Вы можете также запустить bind.bat (DOS32), bindw.bat (WIN32) или bindu (Linux), чтобы объединить (связать) вашу программу Euphoria с интерпретатором ex.exe, exw.exe или exu, и создать из вашей программы самостоятельный исполняемый файл (.exe-файл под DOS/Windows). С этим самостоятельным .exe-файлом вы уже сможете перенаправлять стандартные вход и выход. Связывание подробно обсуждается позже, в разделе 1.5 Распространение программы.

Интерпретаторы exu или ex.exe и exw.exe находятся в каталоге euphoria\bin, который должен быть в пути (в дорожке) поиска исполняемых программ. Переменная окружения EUDIR должна быть установлена на главный каталог Euphoria, т.е. c:\euphoria, конечно, если вы поместили Euphoria на диск c:, а не на d:.


1.3.1 Исполнение программы под Windows

Программы Euphoria могут запускаться непосредственно из окружения Windows или из оболочки DOS, которая открыта вами из Windows. После "ассоциирования" .ex-файлов с ex.exe и .exw-файлов с exw.exe вы сможете запускать программы Euphoria, дважды щелкнув мышью на файлах .ex или .exw. Под Windows вы можете определить новый тип файла .ex, щелкая мышью в окне My Computer на опциях / view / options / file types. Возможен запуск нескольких программ Euphoria в различных окнах. Если вы превратили свою программу в самостоятельный .exe-файл, она будет запускаться двойным щелчком мыши на ней, как и любой другой исполняемый файл.


1.3.2 Использование своп-файла

Если программа Euphoria прогоняется под Linux или Windows (или в окне DOS под Windows) и ей перестает хватать имеющейся на машине оперативной памяти, она начинает использование "виртуальной памяти". Операционная система автоматически обеспечивает программу этой виртуальной памятью, перенося на жесткий диск код и данные и размещая их в так называемом системном своп-файле. Чтобы изменить при необходимости размер своп-файла Windows, вам понадобится обращение к соответствующим опциям Control Panel / 386 Enhanced / "virtual memory...". Под OS/2 вы сможете подстроить "DPMI_MEMORY_LIMIT", вызвав для Virtual DOS machine опцию "DOS Settings", чтобы выделить своей программе больше расширенной памяти.

Под чистой DOS, вне Windows, системный своп-файл не создается и не функционирует, но расширитель DOS, встроенный в ex.exe (DOS32), создает собственный своп-файл для возможного использования его вашей программой. Подробности по этому важному вопросу можно найти в файле platforr.doc.



1.4 Редактирование программы

Для редактирования и написания программ Euphoria подойдет почти любой текстовый редактор. Тем не менее, Euphoria поставляется со своим собственным специальным редактором, который написан полностью на Euphoria. Наберите: ed, сопроводив эту команду полным именем файла, который вы хотите редактировать (расширения .ex/.exw/.exu/.e/.ew нужно указывать тоже). Вы можете использовать этот редактор для работы с любыми текстовыми файлами, но когда это файлы Euphoria с указанными расширениями, они получают преимущества в виде цветной подсветки правильного синтаксиса, автозавершения стандартных операторов, встроенной помощи и т.п. и т.д., чтобы сделать ваше программирование под Euphoria еще более легким делом.

Когда бы ни прервалось исполнение вашей программы Euphoria с сообщением об ошибке, во время компиляции или во время прогона, вам достаточно просто ввести ed, даже не упоминая имени файла этой невезучей программы. Тут же вы окажетесь в редакторе с загруженным ошибочным файлом и именно в необходимой его строке и колонке, там, где в программу вкралась ошибка. Сообщение о характере ошибки будет в верхней (служебной) строке экрана.

Под Windows вы можете ассоциировать ed.bat с различными типами текстовых файлов, которые вам приходится редактировать. Цветная подсветка синтаксиса работает с файлами Euphoria типов .ex, .exw, .exu, .e, .ew, .eu, и .pro (профиль).

Когда вы редактируете текст, клавиатура этого редактора работает в режиме вставки. Нажав клавишу Esc, вы переходите в меню специальных команд. Клавиши со стрелками, а также клавиши Insert/Delete/Home/End/PageUp/PageDown также задействованы. Под Linux некоторые клавиши могут быть недоступны, поэтому предлагаются альтернативные. Прочитайте файл euphoria\doc\ed_____r.doc (euphoria\html\ed_____r.htm), чтобы ознакомиться с полным описанием команд редактора. Команда Esc h (помощь) позволяет вам получить в отдельном окне инструкции из файла ed.doc непосредственно во время сеанса редактирования.

Если вы хотите получше разобраться с работой редактора или уже готовы его переделать по своему вкусу, вы можете редактировать этот редактор в нем же самом, набрав ed ed.ex в каталоге euphoria\bin. Не забудьте сделать резервную копию исходного файла ed.ex, чтобы не переустанавливать его, если с первого раза вы что-то напутаете, и чтобы не потерять возможность тут же все восстановить. Если имя ed конфликтует с какой-то другой командой на вашей системе, просто переименуйте файл euphoria\bin\ed.bat на что-либо более подходящее. Поскольку редактор написан на Euphoria, он замечательно краток и прост для понимания всех деталей. Такой же функционально оснащенный редактор, но написанный на языке вроде C, потребовал бы значительно более объемного и сложного исходного кода.

ed является простым редактором тектового режима, который исполняется под DOS, Linux и в консольном окне Windows. Познакомьтесь также с превосходным редактором Дэвида Куни, ee.ex, для DOS32 и Linux. Вы можете получить его на узле Web Euphoria. Имеется также несколько Windows-редакторов, ориентированных на Euphoria. Их также можно найти на нашем узле Web.



1.5 Распространение программы

Euphoria предлагает вам 4 различных способа распространения программы.

По первому способу вы можете просто поставлять вашим пользователям файлы ex.exe, exw.exe или exu редакции Public Domain вместе с вашим главным файлом программы Euphoria .ex, .exw или .exu и любыми библиотечными файлами .e, которые вам необходимы (включая любые стандартные из каталога euphoria\include). Если исходные файлы программы Euphoria размещены все вместе в одном каталоге и ex.exe, exw.exe или exu находится там же или где-то в пути поиска исполняемых файлов, ваш пользователь сможет запускать программу, набрав ex, (exw) или (exu) и сопроводив эту команду путем к вашему .ex, .exw или exu файлу. Неплохо будет, если вы напишете небольшой .bat-файл для запуска вашей программы. Что греха таить, люди неохотно набирают на клавиатуре даже такое простое, как ex (exw), не говоря уже о полном пути к программному файлу на другом диске. Этот способ распространения предполагает, что вы не прочь поделиться всеми секретами вашей программы с вашими пользователями.

Пакет Euphoria Complete Edition дает вам на два способа распространения больше. При его наличии вы можете окутать вашу программу или связать ее. Окутывание объединяет все .e-файлы, которые необходимы вашей программе, с вашим главным файлом, чтобы получить единственный .ex, .exw или .exu-файл. При этом вы можете сжать/зашифровать вашу программу, чтобы скрыть код и сделать его защищенным от вмешательств, или оставить ее в читабельном виде, чтобы иметь лучшую диагностику во время использования. Связывание объединяет вашу окутанную программу с интерпретатором ex.exe, exw.exe, или exu, чтобы создать единственный самостоятельный исполняемый файл (.exe). К примеру, если ваша программа называется "myprog.ex", вы можете создать файл "myprog.exe", который будет исполняться идентичным образом. Подробности об окутывании и связывании можно найти в файле bind___r.doc.

И наконец, с транслятором Euphoria на C вы можете перевести вашу программу Euphoria на язык C, а затем откомпилировать ее с помощью компилятора C, чтобы получить исполняемый (.exe) файл. Транслятор поставляется отдельно и доступен на узле Web RDS.


1.5.1 Лицензирование

Вы имеете полное право распространения любых программ Euphoria, которые вы разработали, без отчислений авторского гонорара. Вы имеете право свободного распространения Public Domain Edition файлов ex.exe, exw.exe и exu, так что любой пользователь может запускать ваши программы. С Complete Edition вы можете окутывать или связывать ваши программы и распространять результирующие файлы без отчислений авторского гонорара.

Вы можете включать любые исходные файлы Euphoria из данного пакета в вашу программу или "как есть", или с вашими модификациями. (Вам может понадобиться, вероятно, как минимум, несколько стандартных include-файлов в любой большой программе).

Мы высоко оценим ваше внимание, если вы скажете людям, что ваша программа разработана с использованием Euphoria, и дадите им адрес нашего узла Web: http://www.RapidEuphoria.com, но мы не требуем никаких подобных выражений признательности.

Вы НЕ можете распространять только следующие файлы, относящиеся к интерпретатору: ex.exe, exw.exe, bind.ex, bind.bat, bindw.bat и shroud.bat, которые поступают в пакете Complete Edition для WIN32 + DOS32, и: exu, bind.ex, bindu и shroud, которые поставляются в пакете Complete Edition для Linux. Файл значка, euphoria.ico, который включен в пакет WIN32 + DOS32 Complete Edition, вы можете распространять с вашими изменениями или без них.

Интерпретатор Euphoria написан на языке ANSI C и может быть откомпилирован с помощью многих различных компиляторов C. Вы можете приобрести исходный код интерпретатора. Прежде чем купить его, прочтите, пожалуйста, Лицензию исходного кода интерпретатора.

Чтобы ознакомиться с ограничениями по распространению файлов транслятора с Euphoria на C, получите, пожалуйста, этот пакет на нашем узле Web.

 

...продолжение 2. Определение языка