Эйфория (язык программирования) - Euphoria (programming language)

Эйфория
логотип openEuphoria
Парадигма Императивная, процедурная
Разработано Джереми Каугар, Роберт Крейг (оригинал), Мэтт Льюис, Дерек Парнелл
Разработчик openEuphoria Group
Впервые появился 1993 ; 28 лет назад ( 1993 )
Стабильный выпуск
4.0.5 / 19 октября 2012 г . ; 8 лет назад ( 2012-10-19 )
Печатная дисциплина статический, динамический
Операционные системы Кроссплатформенность : Win32 , Linux , macOS , FreeBSD , NetBSD , OpenBSD.
Лицензия BSD
Расширения имени файла .e, .ex, .exw, .edb
Веб-сайт openeuphoria .org
Под влиянием
БАЗОВЫЙ
Под влиянием
Фикс

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

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

Обзор

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

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

История

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

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

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

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

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

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

Функции

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

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

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

Использовать

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 интерпретирует заключенные в двойные кавычки символы как последовательность целых чисел. Таким образом

"ABC"

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

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

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

{65, 66, 67}

Привет, мир!

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

Примеры

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

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

global function delete_item( object old, sequence group )
    integer pos
            -- Code begins --
    pos = find( old, 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
            -- Code begins --
    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 для различных платформ, пакетов, Windows IDE, библиотек Windows API, кроссплатформенной оболочки GTK3 для Linux и Windows, графических библиотек (DOS, OpenGL и т. Д.).