Эйфория (язык программирования) - Euphoria (programming language)
Парадигма | Императивная, процедурная |
---|---|
Разработано | Джереми Каугар, Роберт Крейг (оригинал), Мэтт Льюис, Дерек Парнелл |
Разработчик | openEuphoria Group |
Впервые появился | 1993 |
Стабильный выпуск | 4.0.5 / 19 октября 2012 г .
|
Печатная дисциплина | статический, динамический |
Операционные системы | Кроссплатформенность : Win32 , Linux , macOS , FreeBSD , NetBSD , OpenBSD. |
Лицензия | BSD |
Расширения имени файла | .e, .ex, .exw, .edb |
Веб-сайт | openeuphoria |
Под влиянием | |
БАЗОВЫЙ | |
Под влиянием | |
Фикс |
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 (или доступ к ним)
Режимы исполнения
- Устный переводчик
- Переводчик C (E2C) для автономных исполняемых файлов или динамического связывания
- Компилятор и интерпретатор байт-кода (окутывающий)
- Binder связывает исходный код Euphoria с интерпретатором для создания исполняемого файла.
- Версия цикла чтения-оценки-печати (REPL) находится в дорожной карте openEuphoria .
Использовать
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 и т. Д.).
- Официальный сайт OpenEuphoria
- Официальный сайт RapidEuphoria
- openEuphoria Wiki
- Форум openEuphoria
- OpenEuphoria · Репозитории разработки GitHub .
- Использование Euphoria