Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Euphoria - это язык программирования, созданный Робертом Крейгом из Rapid Deployment Software [1] в Торонто , Онтарио , Канада. Изначально разработанный (хотя и не публично выпущен) на Atari ST , [2] первый коммерческий релиз [3] был для 16-битной DOS платформы и была собственностью . В 2006 году с выпуском версии 3 [4] Euphoria стала программным обеспечением с открытым исходным кодом . Группа openEuphoria продолжает администрировать и развивать проект. [5] В декабре 2010 года группа openEuphoria выпустила версию 4 [6]openEuphoria вместе с новой идентичностью и талисманом проекта. OpenEuphoria в настоящее время доступна для Windows , Linux , macOS и трех разновидностей * BSD .

Euphoria - это универсальный императивно-процедурный интерпретируемый язык высокого уровня . Переводчик генерирует C исходный код и сбор ГНУ компилятора (GCC) и открытый Ваток Составители поддерживаются. В качестве альтернативы, программы Euphoria могут быть связаны [7] с интерпретатором для создания автономных исполняемых файлов . Ряд графического пользовательского интерфейса (GUI) библиотеки поддерживаются в том числе Win32lib [8] и оберток для WxWidgets , [9] GTK + , [10] и ИУП . [11] Euphoria имеет простую встроенную базу данных [12] и оболочки для множества других баз данных. [13]

Обзор [ править ]

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

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

История [ править ]

Разработанная как личный проект по созданию языка программирования с нуля, Euphoria была создана Робертом Крейгом [1] на Atari Mega-ST . [2] Многие идеи дизайна для языка пришли из Крейга магистра диссертации в области компьютерных наук в Университете Торонто . [14] На диссертацию Крейга сильно повлияла работа Джона Бэкуса по языкам функционального программирования (FP). [14]

Крейг перенес свою оригинальную реализацию Atari на 16-битную платформу DOS, и первая версия Euphoria была выпущена, версия 1.0, в июле 1993 года [3] под частной лицензией. Первоначальная реализация Atari описана Крейгом как «примитивная» [15] и не была опубликована. Крейг продолжал разрабатывать и выпускать Euphoria через его компанию Rapid Deployment Software (RDS) и веб-сайт rapideuphoria.com. [1] В октябре 2006 года RDS выпустила версию 3 [4] Euphoria и объявила, что отныне Euphoria будет свободно распространяться под лицензией на программное обеспечение с открытым исходным кодом .

RDS продолжила разработку Euphoria, кульминацией которой стал выпуск версии 3.1.1 в августе 2007 года. [14] [16] Впоследствии RDS прекратила одностороннюю разработку Euphoria, и openEuphoria Group [5] взяла на себя текущую разработку. Группа openEuphoria выпустила версию 4 в декабре 2010 года [17] вместе с новым логотипом и талисманом проекта openEuphoria.

Версия 3.1.1 остается важной вехой в выпуске, являясь последней версией Euphoria, поддерживающей платформу DOS . [18]

Euphoria - это аббревиатура от термина «Программирование конечным пользователем с иерархическими объектами для надежных интерпретируемых приложений», хотя есть некоторые подозрения, что это бэкроним . [ согласно кому? ]

Интерпретатор Эйфория был изначально написан на C . С выпуском версии 2.5 [14] в ноябре 2004 года интерпретатор Euphoria был разделен на две части: интерфейсный синтаксический анализатор и внутренний интерпретатор. Интерфейс теперь написан на Euphoria (и используется с переводчиком Euphoria-to-C и Binder). Основная серверная часть и библиотека времени выполнения написаны на C.

Особенности [ править ]

Эйфория была задумана и разработана с учетом следующих целей и особенностей дизайна:

  • Простота обучения и последовательные высокоуровневые конструкции (больше, чем, например, в языке BASIC )
  • Реализация плоской 32-битной памяти для избежания сложного управления памятью и ограничений адресации по размеру
  • Поддержка отладки и обработка ошибок во время выполнения
  • Подстрочный индекс и проверка типа
  • Свободный и строгий ввод переменных
  • Программирование через объекты как типы (определяемые пользователем или иначе)
  • Интерпретируемый, с автоматическим управлением памятью и сборкой мусора
  • Типы гетерогенных коллекций (последовательности)
  • Графическая библиотека DOS (языковые версии Euphoria до 3.1.1 включительно)
  • Отладчик
  • Интегрированная система баз данных
  • Работа с низкоуровневой памятью
  • Простая упаковка библиотек C (или доступ к ним)

Режимы выполнения [ править ]

  • Устный переводчик
  • Переводчик C (E2C) для автономных исполняемых файлов или динамического связывания
  • Компилятор и интерпретатор байт-кода (shrouder [7] )
  • Binder [7] связывает исходный код Euphoria с интерпретатором для создания исполняемого файла.
  • Версия цикла чтения-оценки-печати (REPL) находится в дорожной карте openEuphoria . [19]

Используйте [ редактировать ]

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

Типы данных [ править ]

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

Атом - число, представленное как 31-битное целое число со знаком или 64-битное число с плавающей запятой IEEE . Euphoria динамически переключается между целочисленным представлением и представлением с плавающей запятой в соответствии с текущим значением.
Последовательность - вектор (массив) с нулем или более элементов. Каждый элемент может быть атомом или другой последовательностью . Количество элементов в последовательности не фиксировано (т. Е. Размер вектора / массива не нужно объявлять). Программа может добавлять или удалять элементы по мере необходимости во время выполнения. Выделение-освобождение памяти автоматически обрабатывается подсчетом ссылок. Для ссылки на отдельные элементы используется значение индекса, заключенное в квадратные скобки. Первый элемент в последовательности имеет индекс 1 [1]. На элементы внутри встроенных последовательностей ссылаются дополнительные значения индекса в скобках, таким образом, X [3] [2] относится ко второму элементу, содержащемуся в последовательности, которая является третьим элементом X. Каждый элемент последовательности является объектом. тип (см. ниже).

В Euphoria предопределены два дополнительных типа данных:

Целое число - атом , ограниченный 31-битовыми целыми числами со знаком в диапазоне от -1073741824 до 1073741823 (от -2 ^ 30 до 2 ^ 30-1). Целочисленные типы данных более эффективны, чем типы данных атома , но не могут содержать тот же диапазон значений. Символы хранятся как целые числа, например, кодировка ASCII- 'A' точно такая же, как кодировка 65.
Объект - общий тип данных, который может содержать любое из вышеперечисленных (например, атом , последовательность или целое число ) и который может быть изменен на другой тип во время выполнения.

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

"Азбука"

выглядит так, как если бы кодировщик написал:

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

что то же самое, что:

{65, 66, 67}

Привет, мир! [ редактировать ]

put (1, "Привет, мир! \ n")

Примеры [ править ]

Комментарии к программе начинаются с двойного дефиса --и проходят до конца строки.

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

глобальная функция delete_item ( объект старый, группа последовательности ) целое число pos - Код начинается - pos = find (old, group) если pos> 0, то group = group [1 .. pos-1] и group [pos + 1 .. $] конец, еслифункция конца группы  возврата

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

глобальная функция replace_item ( объект старый, объект новый, группа последовательности ) целое число pos - начало кода - pos = find (old, group) if pos> 0 then группа [pos] = новая конец, еслифункция конца группы  возврата

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

Линия

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

показывает некоторые средства обработки последовательностей . Последовательность может содержать набор любых типов, и это может быть нарезано (взять подмножество данных в последовательности ) и сцепляется в выражениях без необходимости использования специальных функций.

Передача параметров [ править ]

Аргументы подпрограмм всегда передаются по значению; нет возможности передачи по ссылке. Однако разрешено изменять параметры локально (т. Е. Внутри вызываемого объекта), что реализуется очень эффективно, поскольку последовательности имеют семантику автоматического копирования при записи . Другими словами, когда вы передаете последовательность в подпрограмму, сначала передается только ссылка на нее, но в момент, когда подпрограмма изменяет этот параметр последовательности, последовательность копируется, а подпрограмма обновляет только копию оригинала.

Сопоставимые языки [ править ]

  • Lua
  • Фикс
  • Python
  • REBOL
  • Рубин

Ссылки [ править ]

  1. ^ a b c "Домашняя страница RapidEuphoria" . Архивировано из оригинала на 2012-07-11 . Проверено 30 декабря 2010 .
  2. ^ a b "Форум RapidEuphoria, 10 сентября 2002 г., Роберт Крейг" . Архивировано из оригинала на 2011-07-16 . Проверено 30 декабря 2010 .
  3. ^ a b "Форум RapidEuphoria, 18-10-2006, 16:44 Роберт Крейг" . Архивировано из оригинала на 2011-07-16 . Проверено 30 декабря 2010 .
  4. ^ a b «Форум RapidEuphoria, 18.10.2006, 1:19 Роберта Крейга» . Архивировано из оригинала на 2011-07-16 . Проверено 30 декабря 2010 .
  5. ^ a b "домашняя страница группы openEuphoria" . Проверено 30 декабря 2010 .
  6. ^ "Страница загрузки openEuphoria" . Проверено 30 декабря 2010 .
  7. ^ a b c "Руководство openEuhporia, Связывание и окутывание" . Проверено 7 января 2011 .
  8. ^ "Проект Euphoria Win32Lib на Sourceforge" . Проверено 30 декабря 2010 .
  9. ^ "Проект Euphoria wxEuphoria на Sourceforge" . Проверено 30 декабря 2010 .
  10. ^ "Проект Euphoria GTK + в Sourceforge" . Проверено 30 декабря 2010 .
  11. ^ "Проект Euphoria IUP Джереми Каугаром" . Проверено 30 декабря 2010 .
  12. ^ "Руководство openEuphoria, База данных" . Проверено 30 декабря 2010 .
  13. ^ "openEuphoria wiki, Интерфейсы баз данных" . Проверено 2 января 2011 .
  14. ^ a b c d "Веб-сайт RapidEuphoria, примечания к выпуску" . Архивировано из оригинала на 2012-07-14 . Проверено 30 декабря 2010 .
  15. ^ "Форум RapidEuphoria, 2 марта 1998 г., 13:04 Роберт Крейг" . Архивировано из оригинала на 2011-07-16 . Проверено 30 декабря 2010 .
  16. ^ "Новости RapidEuphoria" . Архивировано из оригинала на 2010-12-16 . Проверено 30 декабря 2010 .
  17. ^ "Примечания к выпуску openEuphoria" . Архивировано из оригинала на 2011-07-27 . Проверено 30 декабря 2010 .
  18. ^ "Руководство openEuhporia, Проблемы, связанные с платформой" . Проверено 30 декабря 2010 .
  19. ^ "Дорожная карта openEuphoria" . Проверено 30 декабря 2010 .

Внешние ссылки [ править ]

Бесплатная загрузка Euphoria для различных платформ, пакетов, Windows IDE, библиотек Windows API, кроссплатформенной оболочки GTK3 для Linux и Windows, графических библиотек (DOS, OpenGL и т. Д.).

  • Официальный сайт OpenEuphoria
  • Официальный сайт RapidEuphoria
  • openEuphoria Wiki
  • Форум openEuphoria
  • OpenEuphoria · Репозитории разработки GitHub .
  • Использование Euphoria