Euphoria (язык программирования): различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[непроверенная версия][непроверенная версия]
Содержимое удалено Содержимое добавлено
изменено примечание о выходе 4 версии
стилевые правки
Строка 27: Строка 27:
'''Euphoria''' ({{IPA|[ju:ˈfɔ:riə]}}, юфо́ри, также [[Русский язык|рус.]] эйфори́я, ра́дость) — [[язык программирования]], созданный Робертом Крейгом (Rapid Deployment Software)<ref name=rehomepage /> в Канаде, [[Торонто]]. Первый публичный выпуск<ref name=firstversion /> предназначался для 32-битных машин (i386) с [[MS-DOS]] и был [[Проприетарное программное обеспечение|проприетарным]] (1993 год). В 2006 году с выходом версии 3<ref name=opensource /> проект Euphoria стал [[Открытое программное обеспечение|открытым]], и развивать его начало сообщество OpenEuphoria <ref name=oehomepage />, которое в декабре 2010 года выпустило 4-ю версию<ref name=oever4news /> с новым логотипом и [[Персонаж-талисман|талисманом]]<ref name=mascot />. В настоящее время пакет OpenEuphoria версий 4.* выпускается для [[Microsoft Windows]], [[Linux]], [[Mac OS X]] и трех BSD-систем ([[FreeBSD]], [[NetBSD]], [[OpenBSD]]).
'''Euphoria''' ({{IPA|[ju:ˈfɔ:riə]}}, юфо́ри, также [[Русский язык|рус.]] эйфори́я, ра́дость) — [[язык программирования]], созданный Робертом Крейгом (Rapid Deployment Software)<ref name=rehomepage /> в Канаде, [[Торонто]]. Первый публичный выпуск<ref name=firstversion /> предназначался для 32-битных машин (i386) с [[MS-DOS]] и был [[Проприетарное программное обеспечение|проприетарным]] (1993 год). В 2006 году с выходом версии 3<ref name=opensource /> проект Euphoria стал [[Открытое программное обеспечение|открытым]], и развивать его начало сообщество OpenEuphoria <ref name=oehomepage />, которое в декабре 2010 года выпустило 4-ю версию<ref name=oever4news /> с новым логотипом и [[Персонаж-талисман|талисманом]]<ref name=mascot />. В настоящее время пакет OpenEuphoria версий 4.* выпускается для [[Microsoft Windows]], [[Linux]], [[Mac OS X]] и трех BSD-систем ([[FreeBSD]], [[NetBSD]], [[OpenBSD]]).


Euphoria — [[Интерпретируемый язык программирования|интерпретируемый]] [[Императивное программирование|императивный]] язык [[Высокоуровневый язык программирования|высокого уровня]] общего назначения. C помощью [[транслятор]]а из исходного кода на Euphoria может быть сгенерирован исходный код на языке [[Си (язык программирования)|Си]], который далее подаётся в какой-либо из ряда доступных компиляторов, включая [[GCC]], [[OpenWatcom]] и др., для получения исполняемого файла или динамически подключаемой библиотеки. Программа Euphoria может также быть «связана»<ref name=binding /> с интерпретатором для получения самостоятельного [[Исполняемый файл|исполняемого файла]]. Поддерживается несколько [[GUI]]-библиотек, включая Win32lib<ref name=win32lib /> и [[Обёртка библиотеки|оберток]] для [[wxWidgets]]<ref name=wxeuphoria />, [[GTK+]]<ref name=GTK /> и [[IUP]]<ref name=IUP />. Euphoria имеет встроенную простую систему [[База данных|баз данных]]<ref name=database /> и [[Обёртка библиотеки|обертки]] для работы с другими типам баз данных<ref name=oedatabases />.
Euphoria — [[Интерпретируемый язык программирования|интерпретируемый]] [[Императивное программирование|императивный]] язык [[Высокоуровневый язык программирования|высокого уровня]] общего назначения. C помощью [[транслятор]]а из исходного кода на Euphoria может быть сгенерирован исходный код на языке [[Си (язык программирования)|Си]], который в свою очередь может быть скомпилирован в исполнияемый файл или динамическую библиотеку при помощи таких компиляторов, как [[GCC]], [[OpenWatcom]] и др. Программа Euphoria также может быть «связана»<ref name=binding /> с интерпретатором для получения самостоятельного [[Исполняемый файл|исполняемого файла]]. Поддерживается несколько [[GUI]]-библиотек, включая Win32lib<ref name=win32lib /> и [[Обёртка библиотеки|оберток]] для [[wxWidgets]]<ref name=wxeuphoria />, [[GTK+]]<ref name=GTK /> и [[IUP]]<ref name=IUP />. Euphoria имеет встроенную простую систему [[База данных|баз данных]]<ref name=database /> и [[Обёртка библиотеки|обертки]] для работы с другими типам баз данных<ref name=oedatabases />.


== Обзор ==
== Обзор ==

Версия от 12:00, 4 мая 2012

Euphoria
Логотип openEuphoria
Семантика императивный
Класс языка процедурный
Тип исполнения интерпретация, интерпретация байт-кода, трансляция в Си
Появился в 1993
Автор Роберт Крейг (создатель) и Джереми Ковгар, Мэтт Льюис, Дерек Парнелл (разработчики версии 4)
Разработчик openEuphoria Group
Расширение файлов .e, .ex, .exw, .edb
Выпуск 4.0.4 [1] (8 апреля 2012 года)
Тестовая версия 4.1.0 (8 мая 2011 года)
Система типов статическая, динамическая
Диалекты RDS Euphoria, openEuphoria
Испытал влияние BASIC, Си
Повлиял на Phix
Лицензия открытая
Сайт openeuphoria.org
ОС кроссплатформенность
Логотип Викисклада Медиафайлы на Викискладе
Мангуст — талисман проекта openEuphoria

Euphoria ([ju:ˈfɔ:riə], юфо́ри, также рус. эйфори́я, ра́дость) — язык программирования, созданный Робертом Крейгом (Rapid Deployment Software)[2] в Канаде, Торонто. Первый публичный выпуск[3] предназначался для 32-битных машин (i386) с MS-DOS и был проприетарным (1993 год). В 2006 году с выходом версии 3[4] проект Euphoria стал открытым, и развивать его начало сообщество OpenEuphoria [5], которое в декабре 2010 года выпустило 4-ю версию[6] с новым логотипом и талисманом[7]. В настоящее время пакет OpenEuphoria версий 4.* выпускается для Microsoft Windows, Linux, Mac OS X и трех BSD-систем (FreeBSD, NetBSD, OpenBSD).

Euphoria — интерпретируемый императивный язык высокого уровня общего назначения. C помощью транслятора из исходного кода на Euphoria может быть сгенерирован исходный код на языке Си, который в свою очередь может быть скомпилирован в исполнияемый файл или динамическую библиотеку при помощи таких компиляторов, как GCC, OpenWatcom и др. Программа Euphoria также может быть «связана»[8] с интерпретатором для получения самостоятельного исполняемого файла. Поддерживается несколько GUI-библиотек, включая Win32lib[9] и оберток для wxWidgets[10], GTK+[11] и IUP[12]. Euphoria имеет встроенную простую систему баз данных[13] и обертки для работы с другими типам баз данных[14].

Обзор

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

Простота
  • Язык использует только четыре встроенных типа данных (см. ниже).
  • Автоматическая сборка мусора.
Удобочитаемость
  • Для отделения синтаксических конструкций используются простые ключевые слова из английского языка, а не знаки пунктуации.
Быстрое развертывание
  • Euphoria интерпретируемый язык, что облегчает прототипирование и инкрементальную разработку.
Производительность
  • Euphoria использует эффективный сборщик мусора подсчитывающий ссылки, и корректно обрабатывающий циклические ссылки.

История

Разработка языка Euphoria началась с опытов Роберта Крейга[2] на персональном компьтере Atari Mega-ST[15]. Многие идеи дизайна языка пришли из магистерской диссертации Крейга, защищённой им в Университете Торонто[16]. Диссертация была написана под влиянием работ Джона Бэкуса по функциональным языкам программирования[16].

Затем Крейг портировал оригинальную реализацию языка для Atari на 32-битную платформу машин с процессором 386 под управлением Microsoft MS-DOS и выпустил первый пакет (версия 1.0) в июле 1993 года[3] с проприетарной лицензией, основав собственную компанию Rapid Deployment Softawre (RDS) по разработке и продаже интерпретатора Euphoria в варианте DOS32. Первоначальную реализацию для Atari Крейг называет «примитивной»[17] и не публиковал её. До 2006 года Крейг продолжал развивать и издавать Euphoria в своей фирме (сайт rapideuphoria.com[2]), состоявшей из него самого и его жены Джанко Миура, выпустив более десятка версий в двух сериях, 1.* и 2.*. В октябре 2006 года RDS начала 3-ю[4] серию Euphoria и объявила, что в дальнейшем Euphoria будет свободно распространяться по открытой лицензии. Итогом работы с проприетарными сериями 1 и 2 является сообщество зарегистрированных пользователей в 67 странах мира, включающее множество программистов, точное число которых известно только RDS, но на момент выпуска версии 2.5 значительно превышало тысячу.

Под непосредственным руководством RDS сообщество продолжало выпускать Euphoria, доведя пакет до версии 3.1.1 (август 2007 года)[16][18]. После этого RDS постепенно отошла от руководства разработкой Euphoria, и дальнейшие усовершенствования и изменения вносятся сообществом OpenEuphoria[5] под коллегиальным руководством. В декабре 2010 года[19] сообщество выпустило версию 4.0, положив начало 4-ой серии, теперь с новым логотипом и талисманом проекта[7].

Версия 3.1.1 является важной вехой в развитии языка, так как это последняя версия, официально поддерживающая платформу DOS32 для машин с Microsoft MS-DOS[20], хотя и в версии 4 уже имеется множество наработанных новых решений для этой платформы. Версия 3.1.1 пока остаётся последней версией строгого классического направления, без goto и других "вольностей", появившихся в 4-ой.

Название Euphoria — это акроним для «End-User Programming with Hierarchical Objects for Robust Interpreted Applications».

Интерпретатор языка Euphoria первоначально был написан на . Начиная с версии 2.5[16], выпущенной в ноябре 2004 года, интерпретатор был разделен на две части: фронт-энд-парсер и бэк-энд-интерпретатор. Фронт-энд (который также используется транслятором с Euphoria на Си и программой связывания, биндером) теперь написан на Euphoria, в то же время бэк-энд написан на Си.

Отличительные черты

Euphoria задумывался и разрабатывался со следующими целями и отличительными чертами:

  • Легкость в изучении и простота высокоуровневых конструкций (даже большая, чем например в языке BASIC)
  • Реализация «плоской» 32-битной модели памяти для MS-DOS-версии, для того чтобы избежать сложностей управления памятью и ограничения объектов по размеру и адресации
  • Поддержка отладки и обработки ошибок во время выполнения
  • Контроль индексов и проверка типов
  • Динамическая и строгая типизация переменных
  • Программирование с помощью объектов как типов (определяемых пользователем или встроенных)
  • Интерпретируемость с автоматическим управлением памяти и сборкой мусора
  • Неоднородные динамические массивы (sequence)
  • Графическая библиотека DOS (Версии языка Euphoria вплоть до версии 3.1.1 включительно)
  • Отладчик
  • Встроенная система баз данных
  • Низкоуровневое управление памятью
  • Простое и понятное оборачивание библиотек

Режимы выполнения

  • Интерпретация
  • Трансляция программы на язык Си с последующей компиляцией в самостоятельный исполняемый модуль или динамическую библиотеку
  • Компилятция в байт-код (англ. shrouding, буквально — окутывание)[8] и последующая интерпретация
  • Связывание байт-кода с интерпретатором (англ. binding, буквально — связывание)[8] для получения исполняемого файла
  • Интерактивное выполнение (REPL) — в планах сообщества openEuphoria[21]

Использование

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

Типы данных

Euphoria имеет четыре встроенных типа данных:

atom (атом)
число, реализованное как 31-битное целое со знаком или 64-битное число с плавающей запятой стандарта IEEE. Euphoria динамически переключается между представлением числа как целого или числа с плавающей запятой в зависимости от его текущего значения.
sequence (ряд, последовательность)
набор, состоящий из нескольких элементов. Каждый элемент набора может быть как атомом, так и рядом. Количество элементов ряда не фиксировано (не требует обязательного объявления). Программа в любое время может при необходимости добавлять или удалять элементы. Выделение/освобождение памяти обрабатывается автоматически с помощью подсчета ссылок. Доступ к отдельным элементам происходит с помощью значения индекса, заключенного в квадратные скобки. Индекс первого элемента равен [1]. Доступ к элементам вложенных рядов происходит при помощи дополнительных индексов в квадратных скобках, таким образом X[3][2] ссылается на второй элемент вложенного ряда, который является третьим элементом ряда X. Каждый элемент ряда имеет тип object (объект) (см. ниже).
integer (целое)
атом, значения которого могут быть только целыми числами от −1073741824 до 1073741823 (от −2^30 до 2^30-1). Тип целое часто более эффективен в операциях, чем тип атом, но не может содержать того же диапазона значений. Символы хранятся как числа, например в кодировке ASCII 'A' то же самое, что и 65.
object (объект)
общий тип данных, который может содержать данные любого из перечисленных типов (atom, sequence или integer), изменяющихся во время выполнения программы.

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

"ABC"

эквивалентно:

{'A', 'B', 'C'}

и эквивалентно:

{65,66,67}

Кроме встроенных типов, программа Euphoria может работать с типами данных, определяемых программистом, и задающих более узкий диапазон значений переменной внутри пределов встроенных типов. Пользовательские типы данных используются в основном при отладке программы, по её окончании проверка этих типов может быть отключена директивой without type_check, при этом проверка встроенных типов всегда остается включенной.

Примеры

Hello World

 puts(1,"Hello World!\n")

Работа с рядами

Примечание: комментарии начинаются с двойного дефиса и продолжаются до конца строки.

Следующий код ищет элемент x в группе элементов. Если такой элемент найден, он удаляется при помощи конкатенации всех элементов группы стоящих перед ним со всеми элементами после него. Заметьте, что первый элемент ряда имеет индекс один [1], а знак доллара $ обозначает длину ряда (общее количество его элементов) и может использоваться только как индекс.

global function delete_item( object x, sequence group )
   integer pos
             -- Начало кода --
   pos = find( x, group )
   if pos > 0 then
       group = group[1 .. pos-1] & group[pos+1 .. $]
   end if
   return group
end function

Следующая модификация предыдущего примера заменяет старый элемент новым. Поскольку переменные old и new объявлены как объекты, то они могут быть как атомами, так и рядами. Проверка типов не требуется, так как функция может работать с любыми типами данных.

global function replace_item( object old, object new, sequence group )
   integer pos
             -- Начало кода --
   pos = find( old, group )
   if pos > 0 then
       group[pos] = new
   end if
   return group
end function

Более того, здесь не используются указатели и значения индексов проверяются автоматически, то есть функция не может выйти за пределы ряда. Не нужно явно выделять или освобождать память, что могло бы привести к ее утечке.

Строка кода

group = group[1 .. pos-1] & group[pos+1 .. $]

показывает один из способов работы с рядами. Ряд может содержать группу элементов любого типа, и они могут быть выделены, а потом объединены (конкатенированы) с другим рядом при помощи встроенных операторов. Операция выделения элементов ряда называется сечением ряда.

Передача параметров

Аргументы (параметры) подпрограмме всегда передаются по значению. Однако любой аргумент может быть изменён «локально», что реализовано очень эффективно с помощью метода «копирование при записи». Другими словами, когда вы передаёте подпрограмме ряд, первоначально передаётся только ссылка на него, но как только подпрограмма пытается изменить этот ряд, автоматически создается его копия, подпрограмма меняет только эту копию и в дальнейшем работает только с ней, оставляя ряд-аргумент в неизменном виде.

Основные модификации и диалекты Euphoria

Двуязычная версия Euphoria

Существует модификация 2.5 версии Euphoria с английскими и русскими ключевыми словами (в кодировке CP866) и неограниченным алфавитом для идентификатров, разработанная с участием Крейга[22]. Также ведется разработка двуязычной модификации для Euphoria версии 3, в данный момент на стадии альфа.

Phix

Phix - разрабатываемый Питом Ломаксом компилятор языка программирования, базирующегося на синтаксисе RDS Euphoria, но имеющий следующие отличия[23][24]:

  • Улучшенный механизм подключения файлов
  • Специальный строковый тип
  • Сравнение рядов с помощью операторов сравнения
  • Возможность присвоения сечению ряда произвольной длины (пример: s="food" s[2..3]="e"; s теперь равно "fed")
  • Отрицательные индексы для индексирования с конца ряда
  • Поддержка вложенных блочных комментариев
  • не указано название статьи всех логических выражений
  • Дополнительная проверка типов во время компиляции
  • Директивы with/without console/gui
  • Конструкция for может использовать уже существующую локальную переменную в качестве счетчика
  • Вывод ассемблерного листинга при компиляции
  • Поддержка ассемблерных вставок

На данный момент текущая 0.6.2 версия компилятора, выпущенная 10 июля 2011 года имеет статус бета.

Похожие языки программирования

Ссылки

Примечания

  1. Страница скачивания openEuphoria (англ.).
  2. 1 2 3 Сайт RapidEuphoria (англ.).
  3. 1 2 RapidEuphoria forum, 2006-10-18 16:44 by Robert Craig (англ.).
  4. 1 2 RapidEuphoria forum, 2006-10-18 1:19 by Robert Craig (англ.).
  5. 1 2 Сайт сообщества openEuphoria (англ.).
  6. Сообщение о выходе openEuphoria версии 4.0.0.
  7. 1 2 Логотип и талисман openEuphoria (англ.).
  8. 1 2 3 openEuhporia manual, Binding and Shrouding (англ.).
  9. Euphoria проект Win32Lib на Sourceforge (англ.).
  10. Euphoria проект wxEuphoria на Sourceforge (англ.).
  11. Euphoria проект GTK+ на Sourceforge (англ.).
  12. Euphoria проект IUP Джереми Ковгара (англ.).
  13. openEuphoria manual, Database (англ.).
  14. openEuphoria wiki, Database Interfaces (англ.).
  15. RapidEuphoria forum, 2002-09-10 by Robert Craig (англ.).
  16. 1 2 3 4 RapidEuphoria webiste, release notes (англ.).
  17. RapidEuphoria forum, 2 Mar 1998 13:04 by Robert Craig (англ.).
  18. RapidEuphoria news (англ.).
  19. openEuphoria release notes (англ.).
  20. openEuhporia manual, Platform Specific Issues (англ.).
  21. openEuphoria roadmap (англ.).
  22. Двуязычная версия Euphoria в архиве сайта RapidEuphoria.com (англ.).
  23. Сообщение Пита Ломакса об отличиях Phix от Euphoria (англ.).
  24. Сообщение Пита Ломакса на форуме OpenEuphoria об отличиях Phix от Euphoria 4.0 (англ.).


Шаблон:Link FA