Эйфория (язык программирования)
![]() | |
Парадигма | Императивный, процедурный |
---|---|
Разработано | Джереми Каугар, Роберт Крэйг (оригинал), Мэтт Льюис, Дерек Парнелл |
Разработчик | openEuphoria Group |
Впервые появился | 1993 год |
Стабильная версия | 4.1.0
/ 1 марта 2021 г |
Дисциплина набора текста | статический, динамический |
ТЫ | Кроссплатформенность : Win32 , Linux , macOS , FreeBSD , NetBSD , OpenBSD. |
Лицензия | БСД |
Расширения имен файлов | .e, .ex, .exw, .edb |
Веб-сайт | открытая эйфория |
Под влиянием | |
БАЗОВЫЙ | |
Под влиянием | |
Фикс |
Euphoria — это язык программирования, созданный Робертом Крейгом из компании Rapid Deployment Software. [1] в Торонто , Онтарио , Канада. Первоначально разработанный (хотя и не выпущенный публично) на Atari ST , [2] первый коммерческий релиз [3] был для MS-DOS как проприетарного программного обеспечения . В 2006 году, с выпуском версии 3, [4] Euphoria стала программным обеспечением с открытым исходным кодом . openEuphoria Group продолжает администрировать и развивать проект. [5] В декабре 2010 года openEuphoria Group выпустила версию 4. [6] openEuphoria вместе с новым брендом и талисманом проекта. OpenEuphoria в настоящее время доступна для Windows , Linux , macOS и трех версий *BSD .
Euphoria — это универсальный высокого уровня императивно-процедурный интерпретируемый язык . Транслятор компиляторы Open генерирует C исходный код , коллекция компиляторов GNU (GCC) и Watcom поддерживаются . Альтернативно, программы Euphoria могут быть привязаны [7] с интерпретатором для создания автономных исполняемых файлов . ряд библиотек графического интерфейса пользователя (GUI), включая Win32lib. Поддерживается [8] и обертки для wxWidgets , [9] ГТК+ [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 — это аббревиатура от «Программирование конечных пользователей с использованием иерархических объектов для устойчивых интерпретируемых приложений», хотя есть некоторые подозрения, что это бэкроним . [ по мнению кого? ]
Интерпретатор Euphoria изначально был написан C. на С выходом версии 2.5 [14] в ноябре 2004 года интерпретатор Euphoria был разделен на две части: внешний синтаксический анализатор и внутренний интерпретатор. Интерфейс теперь написан на Euphoria (и используется с транслятором Euphoria-to-C и Binder). Основная серверная часть и библиотека времени выполнения написаны на C.
Функции
[ редактировать ]Euphoria была задумана и разработана со следующими целями и особенностями дизайна:
- Простота обучения и последовательные конструкции высокого уровня (больше, чем, например, язык BASIC )
- Реализация плоской 32-битной памяти, чтобы избежать сложного управления памятью и ограничений по размеру адресации.
- Поддержка отладки и обработка ошибок во время выполнения.
- Проверка индексов и типов
- Свободная и строгая типизация переменных
- Программирование с использованием объектов как типов (определяемых пользователем или иным образом)
- Интерпретируется с автоматическим управлением памятью и сборкой мусора .
- Гетерогенные типы коллекций (последовательности)
- Графическая библиотека DOS (языковые версии Euphoria до 3.1.1 включительно)
- Отладчик
- Интегрированная система баз данных
- Низкоуровневая обработка памяти
- Простая упаковка (или доступ к ним) C библиотек
Режимы выполнения
[ редактировать ]- Устный переводчик
- Транслятор C (E2C) для автономных исполняемых файлов или динамической компоновки.
- Компилятор и интерпретатор байт-кода (shrouder [7] )
- Переплетчик [7] связывает исходный код Euphoria с интерпретатором для создания исполняемого файла.
- Версия цикла чтения-оценки-печати (REPL) включена в дорожную карту openEuphoria . [19]
Использовать
[ редактировать ]Euphoria разработана для упрощения обработки динамических наборов данных различных типов и особенно полезна для обработки строк и изображений. Euphoria использовалась в экспериментах по искусственному интеллекту , изучении математики , для обучения программированию и для реализации шрифтов, включающих тысячи символов. [ нужна ссылка ] Большая часть интерпретатора Euphoria написана на Euphoria.
Типы данных
[ редактировать ]Euphoria имеет два основных типа данных:
- Атом — число, реализованное как 31-битное целое число со знаком или 64-битное число с плавающей запятой IEEE . Euphoria динамически переключается между целочисленным представлением и представлением с плавающей запятой в соответствии с текущим значением.
- Последовательность — вектор (массив) с нулем или более элементами. Каждый элемент может быть атомом или другой последовательностью . Количество элементов в последовательности не фиксировано (т. е. размер вектора/массива не обязательно объявлять). Программа может добавлять или удалять элементы по мере необходимости во время выполнения. Выделение-освобождение памяти автоматически обрабатывается путем подсчета ссылок. На отдельные элементы ссылаются с помощью значения индекса, заключенного в квадратные скобки. Первый элемент последовательности имеет индекс один [1]. На элементы внутри встроенных последовательностей ссылаются дополнительные значения индекса в скобках, поэтому X[3][2] относится ко второму элементу, содержащемуся в последовательности, который является третьим элементом X. Каждый элемент последовательности представляет собой тип объекта (см. ниже). .
В Euphoria предопределены два дополнительных типа данных:
- Целое число – атом , ограниченный 31-битными целыми числами со знаком в диапазоне от –1 073 741 824 до 1 073 741 823 ( от до ). Целочисленные типы данных более эффективны, чем типы данных атом , но не могут содержать один и тот же диапазон значений. Символы хранятся как целые числа, например, кодировка ASCII -'A' точно такая же, как кодировка 65.
- Объект — универсальный тип данных, который может содержать любое из вышеперечисленного (т. е. атом , последовательность или целое число ) и который может быть изменен на другой тип во время выполнения.
Не существует типа данных символьной строки . Строки представлены последовательностью целочисленных значений . Однако, поскольку в программировании так часто используются литеральные строки, Euphoria интерпретирует символы, заключенные в двойные кавычки, как последовательность целых чисел. Таким образом
"ABC"
выглядит так, как если бы кодер написал:
{'A', 'B', 'C'}
что то же самое, что:
{65, 66, 67}
Привет, мир!
[ редактировать ]puts(1, "Hello, World!\n")
Примеры
[ редактировать ]Комментарии к программе начинаются с двойного дефиса. --
и пройдите до конца строки.
Следующий код ищет старый элемент в группе элементов. Если он найден, он удаляет его путем объединения всех элементов перед ним со всеми элементами после него. Обратите внимание, что первый элемент последовательности имеет индекс один [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 .. $]
показаны некоторые средства обработки последовательностей . Последовательность может содержать набор любых типов, и ее можно разрезать ( чтобы взять подмножество данных в последовательности ) и объединить в выражения без необходимости использования специальных функций.
Передача параметров
[ редактировать ]Аргументы подпрограмм всегда передаются по значению; нет возможности передачи по ссылке. Однако параметры можно изменять локально (т. е. внутри вызываемого объекта), что реализуется очень эффективно, поскольку последовательности имеют автоматическую семантику копирования при записи . Другими словами, когда вы передаете последовательность подпрограмме, первоначально передается только ссылка на нее, но в тот момент, когда подпрограмма изменяет этот параметр последовательности, последовательность копируется, и подпрограмма обновляет только копию оригинала.
Сопоставимые языки
[ редактировать ]Ссылки
[ редактировать ]- ^ Перейти обратно: а б с «Домашняя страница RapidEuphoria» . Архивировано из оригинала 11 июля 2012 г. Проверено 30 декабря 2010 г.
- ^ Перейти обратно: а б «Форум RapidEuphoria, 10 сентября 2002 г., Роберт Крейг» . Архивировано из оригинала 16 июля 2011 г. Проверено 30 декабря 2010 г.
- ^ Перейти обратно: а б «Форум RapidEuphoria, 18 октября 2006 г., 16:44, Роберт Крейг» . Архивировано из оригинала 16 июля 2011 г. Проверено 30 декабря 2010 г.
- ^ Перейти обратно: а б «Форум RapidEuphoria, 18 октября 2006 г., 1:19, Роберт Крейг» . Архивировано из оригинала 16 июля 2011 г. Проверено 30 декабря 2010 г.
- ^ Перейти обратно: а б «Домашняя страница группы openEuphoria» . Проверено 30 декабря 2010 г.
- ^ «Страница загрузки openEuphoria» . Проверено 30 декабря 2010 г.
- ^ Перейти обратно: а б с «Руководство openEuhporia, Переплет и укрытие» . Проверено 7 января 2011 г.
- ^ «Проект Euphoria Win32Lib в Sourceforge» . Проверено 30 декабря 2010 г.
- ^ «Проект Euphoria wxEuphoria в Sourceforge» . Проверено 30 декабря 2010 г.
- ^ «Проект Euphoria GTK+ в Sourceforge» . Проверено 30 декабря 2010 г.
- ^ «Проект Euphoria IUP Джереми Каугара» . Проверено 30 декабря 2010 г.
- ^ «Руководство openEuphoria, База данных» . Проверено 30 декабря 2010 г.
- ^ «openEuphoria wiki, Интерфейсы баз данных» . Проверено 2 января 2011 г.
- ^ Перейти обратно: а б с д «Сайт RapidEuphoria, примечания к выпуску» . Архивировано из оригинала 4 января 2013 г. Проверено 30 декабря 2010 г.
- ^ «Форум RapidEuphoria, 2 марта 1998 г., 13:04, Роберт Крейг» . Архивировано из оригинала 16 июля 2011 г. Проверено 30 декабря 2010 г.
- ^ «РапидЭйфория новости» . Архивировано из оригинала 16 декабря 2010 г. Проверено 30 декабря 2010 г.
- ^ «Примечания к выпуску openEuphoria» . Архивировано из оригинала 27 июля 2011 г. Проверено 30 декабря 2010 г.
- ^ «Руководство openEuhporia, проблемы, связанные с платформой» . Проверено 30 декабря 2010 г.
- ^ «Дорожная карта openEuphoria» . Проверено 30 декабря 2010 г.
Внешние ссылки
[ редактировать ]
Бесплатная загрузка Euphoria для различных платформ, пакетов, Windows IDE, библиотек Windows API, кросс-платформенной оболочки GTK3 для Linux и Windows, графических библиотек (DOS, OpenGL и т. д.).
- Официальный сайт OpenEuphoria
- Официальный сайт RapidEuphoria
- openEuphoria вики
- openEuphoria Форум
- OpenEuphoria · Репозитории разработки GitHub.
- Использование Эйфории
- Процедурные языки программирования
- Кроссплатформенное программное обеспечение
- Языки программирования, созданные в 1993 году.
- Бесплатное образовательное программное обеспечение
- Программное обеспечение, использующее лицензию BSD
- Семейство языков программирования BASIC
- Ранее проприетарное программное обеспечение