Примечания к выпускам Euphoria

 
Версия 2.3, Официальный выпуск, 11 февраля 2002 г.:

Этот выпуск обновляет интерпретатор Euphoria, транслятор с Euphoria на C и продукт исходного кода интерпретатора для всех платформ.

  • Версия исходного кода интерпретатора для DJGPP теперь использует динамические метки GNU C, точно как версия Linux. Этот прием позволяет достичь полной скорости исполнения без привлечения кода на уровне ассемблера.
    Благодарности Берни Райану.

  • В пакете Complete Edition, bind.bat и bindw.bat теперь используют exw для выполнения связывания/окутывания. Это позволяет избежать проблем с длинными именами файлов на некоторых системах. При связывании/окутывании появляется консольное окно.
    Благодарности "void", Брюсу Акстенсу и другим.

  • исправлена ошибка : из-за ошибки в библиотеке C WATCOM 10.6 интерпретаторы ex и exw, а также код, переведенный на C и откомпилированный с Watcom, могли выдавать неправильный результат из функции Euphoria where(), когда файл был открыт в режиме дополнения, а файловый указатель находился в еще не выведенной на диск порции файла. Ошибка была обойдена применением функции Euphoria flush() к файлу перед вызовом подпрограммы Watcom в этом специфическом случае.
    Благодарности Бобу Элиа.

  • исправлена ошибка : в биндере для версии 2.3 бета мог возникать случай игнорирования вызова функции в последней строке связанной программы.
    Благодарности Вольфгангу Фритцу.

  • исправлена ошибка : отдельные файлы Euphoria в пакете для WIN32+DOS32 имели символы перевода строки в стиле Linux, что затрудняло просмотр этих файлов с использованием NotePad и некоторых других редакторов.
    Благодарности Питу Ломаксу.

  • исправлена ошибка : с включенной проверкой "with type_check" редактор ed.ex мог давать отказ проверки типа при нажатии клавиши Esc.
    Благодарности Кеннету Орру.

 
Версия 2.3, бета-выпуск, 15 января 2002 г.:

Этот выпуск обновляет интерпретатор Euphoria, транслятор с Euphoria на C и продукт исходного кода интерпретатора для всех платформ.

  • Вы можете теперь давать имена встроенных подпрограмм Euphoria своей собственной переменной или идентификатору пространства имен. Первоначально это было возможно только для вами-определенных подпрограмм. Кроме большей свободы для программистов это даст возможность RDS добавлять в будущем новые встроенные подпрограммы без повреждения существующего кода.

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

  • Вы можете теперь иметь \ (или Linux /) в конце всех имен каталогов в переменной EUINC и пробелы в имени каталога.

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

  • В документацию внесены многочисленные улучшения и исправления.
    Благодарности Игорю Качану.

  • Старое, пред-ANSI, определение функций в исходном коде интерпретатора заменено на стандартное ANSI, которое более совместимо с C++.

  • исправлена ошибка : Для DJGPP C, когда компилируемый код вырабатывался транслятором, или компилировался исходный код интерпретатора, имелась ошибка распределения памяти, что могло приводить к небольшим потерям времени или, в редких случаях, вызывать авост.

  • исправлена ошибка : Под Windows, при использовании интерпретатора или оттранслированной программы, иногда требовалось двойное нажатие на клавишу Enter для выхода из консольного окна.
    Благодарности Тони Шкода.

  • исправлена ошибка: Функция Euphoria dir(), в воплощениях для Lcc или Borland, не обрабатывала каталоги правильно, когда они имели широкий набор атрибутов, вроде READ_ONLY.
    Благодарности Euman, который выявил проблему и затем показал, как решить ее в исходном коде интерпретатора для dir().

  • исправлена ошибка: Вы можете теперь объявлять идентификатор пространства имен с тем же самым именем, что и встроенная функция, без получения каскада ошибок.
    Благодарности Мартину Стэкону (хотя он рекомендовал иное решение).

  • исправлена ошибка - биндер: Поддержка для новой переменной окружения EUINC теперь добавлена и в программу связывания.
    Благодарности Россу Бойду.

  • исправлена ошибка - биндер: Присоединение ресурсных файлов к связанному .exe не работало корректно для команды bind -clear.
    Благодарности Вольфгангу Фритцу.

  • исправлена ошибка - биндер: При интерактивном использовании программы связывания могла возникать ошибка "variable not initialized" при попытке подставить нестандартный значок Windows.
    Благодарности Тони Стюарду.

  • исправлена ошибка - биндер: В некоторых случаях ключевое слово "constant" выбрасывалось из окутанного выхода, если в предыдущей входной строке имелось объявление константы, завершающееся символом ']'.
    Благодарности Россу Бойду.

  • исправлена ошибка - биндер: Когда общее выражение, (не просто строка в кавычках), использовалось как аргумент для routine_id(), местные подпрограммы, которые были потенциальными получателями этого выражения, могли приобрести измененные имена (независимо от -clear), что вело бы к выдаче из routine_id() -1 во время прогона. Глобальные подпрограммы не страдали.

  • исправлена ошибка - биндер: Программа связывания/окутывания не останавливалась по ошибке при отсутствии включаемого файла.
    Благодарности Россу Бойду.

  • исправлена ошибка - биндер Linux: Ошибка поиска пути для связанных программ под Linux, предположительно устраненная еще при выпуске 2.3 альфа, не была устранена правильно. Теперь исправлено.
    Благодарности Кену Родесу.

  • исправлена ошибка - биндер Linux: Команды bindu -clear и shroud -clear с файлом, содержащим терминаторы строк в стиле DOS/Window \r\n, давали ошибку "illegal character" при прогоне окутанной программы, и "not bound correctly" при прогоне связанной программы.

  • исправлена ошибка - исходный код: Команда компоновки интерпретатора DOS с WATCOM C имела в списке несуществующий файл .obj.

 
Версия 2.3, альфа-выпуск, 30 ноября 2001 г.:

Этот выпуск обновляет интерпретатор Euphoria для WIN32, DOS32 и Linux. Он также обновляет транслятор с Euphoria на C для всех платформ и впервые представляет новый продукт - исходный код Euphoria.

  • Изменен состав и цены регистрируемых пакетов.

    • Интерпретатор теперь поставляется в одном пакете: для WIN32, DOS32 и Linux, старая цена $59, новая всего $39.

    • Исходный код интерпретатора (за вычетом регистрируемых режимов) доступен за $49. Просмотрите лицензию исходного кода и файл registrr.doc на предмет подробностей.

    • Цена транслятора осталась прежней - $29.

    • Снято ограничение для пользователей редакции Public Domain по числу операторов 300, теперь эти пользователи не будут терять диагностику ошибок времени прогона. Это ограничение будет касаться только режима трассировки trace().

    В файле registrr.doc содержатся все детали, включая требования к пользователям, претендующим на получение бесплатного обновления.

  • Интерпретатор Euphoria теперь может быть успешно построен с помощью 6-ти различных компиляторов C на 3-х платформах.

  • Новые квалификаторы пространства имен устраняют конфликты одинаковых глобальных идентификаторов, объявленных в различных библиотечных (включаемых) файлах. Кроме того, локальные идентификаторы теперь имеют приоритет перед глобальными с тем же самым именем, что ранее было бы ошибкой. См. Правила сцены.

  • Интерпретатор Complete Edition выпущен с новой 2-проходной программой связывания/окутывания, которая удаляет из результирующего файла все неиспользуемые подпрограммы и константы, что дает более компактные исполняемые файлы. Имеется также режим связывания открытого исходного кода, так что вы сможете иметь читабельные сообщения об ошибках от своих пользователей.

  • Введена новая переменная окружения EUINC. В ней может быть определен список дополнительных каталогов, в которых будет производиться поиск библиотечных (включаемых) файлов. Каталог, содержащий главный файл, просматривается всегда первым, затем каталоги по EUINC, затем каталог euphoria\include.

  • Интерпретатор теперь поддерживает новый режим трассировки, trace(3). В этом режиме все выполненные операторы Euphoria протоколируются в файл отчета, так что вы сможете увидеть последний оператор, правильно выполненный перед аварийным остановом или любым фатальным завершением программы по ошибке, так же как и 499 предыдущих операторов. Этот режим полезен в случае происшествий на машинном уровне, когда Euphoria не в состоянии вывести файл ex.err.
    Благодарности Мэттью Левису.

  • Интерпретатор Euphoria теперь может подавать данные Euphoria - атомы и ряды - в файлы .dll, запрограммированные на Euphoria и построенные с помощью транслятора. Используйте новые E_ типы из dll.e

  • Для Linux мы добавили RTLD_GLOBAL по вызову dlopen(). Это позволяет вам более успешно связываться с общими библиотеками.

  • На платформе Linux, если вы используете #! в первой строке, чтобы сделать ваш исходный код непосредственно исполняемым, вам больше не нужно добавлять расширение .exu к имени файла. Программисты Linux часто предпочитают не иметь расширения имени у исполняемых файлов.

  • Процедуры обратного вызова Windows, написанные на Euphoria, могут теперь принимать 9 аргументов (было 8). Благодарности Мэтту Левису.

  • В дополнение к C_DOUBLE (8-байтное с плавающей точкой) теперь поддержано C_FLOAT (4-байтное с плавающей точкой) для аргументов и выходных величин функций C.
    Благодарности Дэвиду Гею.

  • Библиотеки .dll Windows, открытые с помощью open_dll(), теперь закрываются автоматически по окончании программы. Это устраняет некоторую очень незначительную утечку памяти.
    Благодарности Euman.

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

  • get_bytes() стала на 30% быстрее.

  • allocate_string() ускорена. Благодарности Aku.

  • Демо-программа mydata.ex теперь использует систему EDS.

  • исправлена ошибка - транслятор: Когда глобальной или локальной переменной, содержащей ряд или число с плавающей точкой, присваивался результат функции, и в некоторой точке во время вызова функции глобальная или локальная переменная переписывалась, имела место некоторая порча данных, которая позже могла вести к аварийному завершению программы.
    Благодарности Сергио Гелли.

  • исправлена ошибка - интерпретатор Linux: программы объемом в нескольких тысяч строк имели шанс (около 20%) аварийного останова на одном из операторов, когда бы он ни был выполнен.

  • исправлена ошибка - интерпретатор: s[i][j]...[k] = s вызывало зависание интерпретатора, т.е. не было возможным присваивание значения всего ряда элементу этого же ряда при числе уровней вложения 2 или более.
    Благодарности Генри Гоффину.

  • исправлена ошибка - биндер Linux: (Кен Родес) Связанные исполняемые файлы, расположенные где-нибудь в пути поиска, не исполнялись правильно, если они не находились в текущем каталоге или если вы не указывали полный путь к этому исполняемому файлу.

  • исправлена ошибка - биндер: "with profile_time" в окутанной или связанной программе могло вызывать аврийный останов.

  • исправлена ошибка - интерпретатор DOS: в библиотеке image.e, процедура put_screen_char() откорректирована, чтобы иметь: if overflow > 0 then ... вместо старого: if overflow then ...

  • исправлена ошибка - интерпретатор: Оптимизация скорости для сечения рядов могла в редких случаях вызывать значительный перерасход памяти. Оптимизация настроена для обработки и этих случаев.
    Благодарности Брайану Клаузингу.

  • исправлена ошибка - safe.e: free() и free_low() на самом деле не освобождали блок памяти, а под Linux free() могла вызывать нарушение сегментации. Эти же процедуры в machine.e работали правильно.

  • исправлена ошибка - транслятор для DJGPP: устранена пара незначительных отличий от ex.exe в отображении текста.

  • исправлена ошибка - define_c_var(): работает и под WIN32 также. Откорректирована документация.

Версия 2.2 Официальный Выпуск для WIN32+DOS32, 14 января 2000 г.:

  • Улучшены сообщения об ошибках, выводимые интерпретатором и связанной программой при некоторых типичных неточностях, которые могут быть допущены пользователями при связывании программы.

  • В нескольких местах улучшена документация.

  • Демо-программа window.exw показывает, как загрузить значок Euphoria, содержащийся в интерпретаторе exw.exe.

  • В программе Language War применена улучшенная версия библиотеки
    Джири Бэбора putsxy.e.

 
Версия 2.2 Бета-выпуск для WIN32+DOS32, 23 декабря 1999 г.:

Почти все новые библиотечные процедуры, разработанные в Euphoria 2.2 для Linux, перенесены и в версию для WIN32 и DOS32. Это процедуры: sleep(), chdir(), flush(), lock_file(), unlock_file(), crash_file(), get_screen_char() and put_screen_char(). Их описание Вы найдете в примечаниях к выпуску Linux ниже или в файле LIBRARY.DOC.

Исправлено несколько межсистемных ошибок, внесены другие разнообразные улучшения, вызванные обратной унификацией версии WIN32+DOS32 с версией для Linux. Существо улучшений см.ниже.

Дополнительно, только для WIN32+DOS32, внесены следующие усовершенствования :

  • В файл exw.exe включен значок Euphoria, который автоматически отображается Windows. Рисунок значка создан Гэри Дамером. Зарегистрированные пользователи могут заменять этот значок другим при связывании своих программ.

  • Интерпретатор exw.exe теперь поставляется в виде упакованной программы размером около 73K. Упаковка выполнена с использованием UPX-компрессии для .exe-файлов.

  • Интерпретатор ex.exe обновлен на основе новейшей версии 32-разрядного расширителя DOS CauseWay. Устранена проблема, когда CauseWay при некоторых конфигурациях DOS ограничивал доступную Вам память 64-мя мегабайтами, исправлено несколько мелких ошибок. Прим.переводчика. Необходимо особо подчеркнуть, что речь здесь идет об обычных старых версиях MS DOS и ее клонов. На обычной 386 машине с DOS 3.30 (широчайше известной всем пользователям машин вроде нашего родного Поиска) и интерпретатором Euphoria Вы получаете ВСЮ память, установленную на машине, включая дисковую, для исполнения Ваших программ с SVGA, мышью, и пр. и Ваша DOS-Euphoria программа теперь должна поместиться на многомегабайтной машине, а не в пресловутых 640 Кб. И это без всяких других менеджеров памяти, ни с одним из которых Euphoria, кстати, не конфликтует. Кто понял, о чем сказал сейчас переводчик, немедленно отгрузит себе на свою ржавую тачку эту бесплатную систему, абсолютно уникальную систему, равных которой в мире просто не существует.

  • исправлена ошибка: Возврат к месту ошибки мог иногда срываться или сопровождаться ошибочной распечаткой, если бывала обнаружена ошибка при проверке типов. Такое могло случиться только тогда, когда к выражению добавлялась 1 и нецелый результат вычисления выражения присваивался переменной, объявленной как целая.

  • исправлена ошибка: Если процедура text_rows() вызывалась как первая из всех необходимых для создания консольного окна WIN32, Euphoria отказывалась устанавливать новое число строк текста для консоли.

 
Версия 2.2 Официальный Выпуск для Linux, 22 ноября 1999 г.:

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

  • Во многих отношениях улучшена документация, особенно для операционной системы Linux.

Версия 2.2 выпуск бета-тестирования для Linux, 22 октября 1999 г.:

Большинство из этих улучшений и исправлений внедрено также и в Версию 2.2 для WIN32 + DOS32.

  • функция platform() перенесена из библиотеки misc.e в интерпретатор exu, чтобы исключить лишний вызов функции. platform() теперь не требует времени на расчет значения. Компилятор просто учитывает соответствующую константу.

  • процедуры lock_file() и unlock_file() введены для обеспечения общего доступа к файлам нескольких процессов. Возможность такого доступа может быть важной в программировании CGI и в других областях.

  • процедура flush() будет выбрасывать содержимое буфера в файл или на устройство.

  • функция chdir() будет изменять текущий каталог на новый и сообщать, было ли это изменение успешным.

  • процедура sleep() будет приостанавливать выполнение Вашей программы на заданное число секунд и разрешать операционной системе запуск другой задачи.

  • процедура put_screen_char() будет выводить символ и его атрибуты (цвета) на экран.

  • функция get_screen_char() будет считывать символ и его атрибуты с экрана.

  • функция save_text_image() теперь работает под Linux (как и под DOS32). Она копирует прямоугольный участок текста с экрана.

  • процедура display_text_image() теперь работает под Linux (как и под DOS32). Она выводит прямоугольный участок текста на экран.

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

  • Небольшие улучшения сделаны в программах ed и search.

  • Решена проблема с переносимостью программы how2reg.ex.

  • Интерпретатор exu теперь более плотно упакован. Он стал меньше, хотя функциональные его возможности возросли.

 
Версия 2.2 выпуск альфа-тестирования для Linux, 24 августа 1999 г.:

Многие из данных улучшений и исправлений внесены и в Версию 2.2 для WIN32 + DOS32.

  • Документация откорректирована в части специфической для Linux информации по билиотечным процедурам Euphoria в общем.

  • Теперь имеется Complete Edition для Linux, включая связывание и окутывание. См. register\register.doc.

  • Введена поддержка мыши для текстового режима, с использованием get_mouse(). При этом вы должны иметь запущенный сервер GPM. Это работает на текстовой консоли или в окне xterm.

  • Linux: define_c_var(name) будет выдавать адрес глобальной переменной C в общей библиотеке.

  • Введена возможность вызова подпрограмм Euphoria из подпрограмм C Linux с использованием в точности того же самого механизма, что и в WIN32 Euphoria. См. euphoria/demo/linux.

  • Добавлен пример создания вашей собственной общей библиотеки подпрограмм и вызова их из Euphoria. См. euphoria/demo/linux.

  • Все платформы: crash_file(file_name) будет вызывать диагностическое сообщение с записью его в файл file_name вместо файла ex.err. Вы можете использовать crash_file("/dev/null"), чтобы получить диагностическое сообщение на экране, а не в файле.
    crash_file("") означает "без диагностики" (на экране или в ex.err).

  • Режим Trace в xterm теперь обнаруживает нажатия на клавиши F1/F2.

  • time() теперь выдает настоящее время "по-часам", а не время процессора.

  • search, guru и cdguru теперь размещают свои результаты в вашем каталоге $HOME вместо текущего каталога.

  • Действие #! теперь ограничено только первой строкой файла.

  • Все платформы: В редакторе ed команды Esc n, Esc d, Esc f и Esc r будут немедленно перевыводить ваш последний выбор. Вы можете нажать клавиши стрелка-вверх/стрелка-вниз, чтобы просмотреть другие выборы или очистить выбор. Если вы начнете ввод без редактирования, выбор будет очищен и вы получите возможность сразу ввести новый.

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

  • исправлена ошибка: get() теперь считает '\r' символом пробела. Это важно при чтении файлов DOS.

  • Все платформы: исправлена ошибка: Не приводило к немедленной выдаче ошибки при проверке типов type_check, когда к переменной, имеющей значение максимальной величины для типа integer(1.07 миллиарда), прибавлялась 1. Благодарности Джеффу Филдингу.

  • Все платформы: исправлена ошибка: Не всегда обнаруживалась неправильно оформленная экспонента числа с плавающей точкой. Благодарности Лайонелу Вонгу.

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

 
Версия 2.2 пред-альфа #4 для Linux Июль 15, 1999:

  • Вы можете вызывать подпрограммы C из общих библиотек Linux (.so-файлы). См. некоторые примеры в euphoria/demo/linux/callc.exu.

  • Если ваша программа ничего не выводит в окне xterm, exu не будет выдавать приглашение "Press Enter".

  • Все платформы: Редактор ed теперь позволяет повторить текст предыдущей вашей команды верхней строки путем нажатия на клавиши стрелка-вверх и стрелка-вниз, наподобие doskey в DOS и shell history в Linux. Это работает со всеми строками, которые вы вводили в командах Esc n (новый файл), Esc d (команда Linux), Esc f (найти строку) или Esc r (заменить строку). Вдобавок, вы теперь можете использовать клавиши со стрелками, Home, End, Delete и т.п. для редактирования строки перед нажатием Enter.

 
Версия 2.2 пред-альфа #3 для Linux Июль 8, 1999:

  • В окне xterm, exu будет приглашать вас нажать Enter перед выходом из него. Без этого xterm восстанавливает экран так быстро, что вы не успеваете увидеть никаких сообщений, в том числе, и об ошибках.

  • Изменен внутренний код функции Euphoria rand(). (Алгоритм остался прежним.) Надеемся, это даст возможность rand() работать под всеми выпусками Linux. Пожалуйста, дайте нам знать, если rand() все еще сбоит.

  • Редактор ed: Команда Esc h будет выводить файлы помощи Euphoria. Это было нарушено в пред-альфа #2.

  • В окне xterm функция Euphoria video_config() теперь сообщает правильное число строк и колонок - это помогает работать ed значительно лучше. ed будет работать сразу после старта с заданным начальным размером окна.

  • Редактор ed:Клавиши F1, F2, F3, F4, Home, End, и Delete работают теперь в окне xterm (под Red Hat 5.2, по крайней мере). Другие клавиши F уже работали. PageUp/PageDown и некоторые другие клавиши еще не работают - приглашаем вас добавить собственные альтернативные.

  • exu теперь даже меньше - всего 82K.

 
Версия 2.2 пред-альфа #2 для Linux Июль 6, 1999:

  • Библиотека ncurses статически подключена к exu.

  • exu теперь упакован (97K).

  • исправлена ошибка: ed теперь может редактировать файлы с прописными буквами в имени файла.

  • Устранена кратковременная задержка, сопровождавшая нажатие клавиши Esc в редакторе ed.

  • Исправлен адрес для подписки на список почтовой рассылки Euphoria в файлах web.doc и web.htm (старый адрес больше не работает).

 
Версия 2.2 пред-альфа #1 для Linux Июль 1, 1999:

  • Выпущена первая версия Euphoria для Linux.

 
Версия 2.1 Официальный выпуск для WIN32 + DOS32 Март 29, 1999:

  • Оптимизированы обновления эрана трассировки. Устранены ненужные перевыводы кода исходного файла и переменных на экран трассировки. Когда обновление необходимо, теперь оно осуществляется немного быстрее. Эта разница хорошо заметна в exw.exe, а также в ex.exe для пиксельно-графических режимов. Для ex.exe в текстовых режимах это привело к уменьшению мелькания текста на экране.

  • Программа install теперь не требует, чтобы ваша команда PATH была короче, чем 128 символов. Она будет просто предупреждать вас, если PATH длиннее. Новые версии DOS разрешают более длинную команду PATH. Благодарности Стиву Адамсу.

  • Дополнительная проверка ошибок добавлена в unregister_block() из safe.e. Благодарности Дэвиду Куни.

 
Версия 2.1 выпуск для бета-тестирования Март 5, 1999:

  • Все остававшиеся файлы в каталоге euphoria\doc преобразованы в формат HTML. Каждый .doc-файл в каталоге doc теперь имеет соответствующий .htm-файл в каталоге euphoria\html. Множество улучшений и уточнений внесено в документацию.

  • Теперь вы будете получать предупреждение, если в вашей программе сразу после операторов exit, return или abort() идут другие операторы. Этот код не может быть выполнен. Подсказано Габриэлом Боэми.

  • safe.e больше не включает graphics.e. Это устранило возможный конфликт имен, когда safe.e подставляется вместо machine.e.

  • Использование кода, поставленного Дэвидом Гаем, в safe.e позволит вам добавлять или удалять блоки памяти, занятые внешними подпрограммами, в "список безопасных адресов". См. новые библиотечные подпрограммы: register_block() и unregister_block().

  • message_box() теперь использует метку активного окна вместо NULL. Это побуждает пользователя ответить на ваше сообщение, прежде чем он сможет продолжать диалог с вашей программой. Диалог с другими программами не блокируется. Благодарности Остину C.

  • get() и value() ускорены примерно на 5%, благодаря Габриэлу Боэми.

  • exw.exe сделан менее склонным к мистическому зависанию при вирусной атаке.

  • sanity.ex теперь проверяет правильность установки Euphoria. Вы будете предупреждены, если переменные PATH или EUDIR на вашей системе не установлены так, как нужно, или ваши файлы ex.exe, exw.exe, pdex.exe или pdexw.exe повреждены или неправильно установлены в euphoria\bin.

  • Безопасность связанных и взболтанных программ несколько повышена. Благодарности Расти Дэвису.

  • Чтобы уменьшить объем файла euphor21.zip, программа install теперь вырабатывает HTML и DOC-файлы из общего исходного файла, используя разработанный Джанко Миура генератор документации. По окончании процесса генератор удаляется с диска, но вы можете получить его на Web-узле RDS.

  • Когда случается ошибка type_check, вы будете предупреждены, если тип ошибочно выдал ряд в качестве своего "истина/ложь" результата. Ранее результат в виде ряда просто трактовался как ошибка type_check failure. Подсказано Ральфом Нойенхьюзеном.

  • Код файла demo\win32\winwire.exw значительно улучшен.

  • Программа install предупредит вас о необходимости изменения файла autoexec.bat, если вы решите установить новый выпуск Euphoria на другой диск.

 
Версия 2.1 выпуск для альфа-тестирования Январь 15, 1999:

  • Мы внесли ряд изменений в комплектность, цену и регистрационные правила программного продукта Euphoria:

    • Двухплатформенный пакет (DOS32+WIN32), ранее стоивший $53, снижен в цене до $39 U.S., новая цена введена немедленно.

    • Одноплатформенный пакет (только DOS32), ранее стоивший $32, снят с производства.

    • Типографское руководство снято с производства. Вместо него введена официальная HTML-версия руководства, включенная в Public Domain .zip-файл.

    • Все полезные библиотечные файлы других разработчиков, такие как Win32Lib.ew и многие другие, будут "помечены" RDS с помощью специального кодового числа, что сделает их свободными, подобно файлам из каталога euphoria\include. Эти помеченные файлы не добавляют свои операторы в подсчет операторов вашей программы, если вы не модифицировали их. Это нововведение позволит также сторонним разработчикам получать более точную диагностическую информацию от своих пользователей.

    • Связывание, окутывание и профилирование теперь будут входить только в пакет Complete Edition. Эти возможности не слишком уж нужны новичкам, но продвинутые пользователи могут найти их необходимыми.

  • Добавлены операторы присваивания короткой формы   +=   -=   *=   /=   &=  . Например, вместо:
               count = count + 1
    
    Вы можете написать:
               count += 1
    
    Вместо:
               matrix[row][column] = matrix[row][column] * 5.0
    
    применить:
               matrix[row][column] *= 5.0
    
    Вместо:
               test_scores[start..finish] = test_scores[start..finish] / 100
    
    сказать:
               test_scores[start..finish] /= 100
    
    См. refman.doc для уточнения деталей.

  • Euphoria теперь использует "укороченную процедуру" вычисления and и or выражений в if/elsif/while условиях. т.е. в условии and:
               if A and B then ...
    
    интерпретатор будет пропускать вычисление выражения B, когда выражение A равно 0 (ложь), так как ясно, что общий результат должен быть ложь. В условии or:
               while A or B do ...
    
    интерпретатор будет пропускать вычисление выражения B, когда выражение A не равно нулю (истина), так как ясно, что общий результат должен быть истина.

    Программы Euphoria, написанные ранее версии 2.1, могут работать неправильно, если выражение B содержит функцию со сторонними-эффектами, такими как установка глобальный переменной, операции ввода/вывода и т.д. На практике такого рода код встречается очень редко, но случись это, теперь будет выдаваться предупреждение, если функция со сторонними эффектами может быть обойдена при укороченной процедуре.

    Пропуск вычисления выражения B позволяет укороченной процедуре быть обычно более быстрой, и дает вам возможность писать так:

               if atom(x) or length(x)=1 then ...
    
    что дало бы ошибку в старых версиях Euphoria, если бы x оказался атомом, так как length() не определена для атомов.

    См. refman.doc для уточнения деталей.

  • Добавлено несколько новых подпрограмм.

    Встроенные в ex.exe/exw.exe:

    profile() - профилирование включается/выключается, так что вы можете сфокусировать profile и profile_time на отслеживании только выбранных вами событий внутри вашей программы.
    system_exec() - дает вам код завершения после вызова .exe или .com файлов, или другой программы Euphoria.
    equal() - сравнивает любые 2 объекта Euphoria на предмет их равенства. эквивалентно: compare(a,b) = 0 но более просто читается.

    В различных библиотечных файлах:

    walk_dir() - рекурсивно проходит каталог и подкаталоги, вызывая заданную процедуру для обработки файлов.
    reverse() - оборачивает порядок элементов в ряде.
    sprint() - выдает строковое представление любого объекта Euphoria.
    arcsin() - обратная тригонометрическая функция.
    arccos() - обратная тригонометрическая функция.
    get_bytes() - выдает следующие n байтов из файла.
    prompt_number() - приглашает к вводу числа.
    prompt_string() - приглашает к вводу строки.
    instance() - WIN32: выдает номер экземпляра программы.
    PI - константаt PI - 3.14159... добавлена в misc.e.

    См. library.doc для уточнения деталей.

  • Основная документация Euphoria теперь может быть просмотрена с помощью Web-браузера. Файлы в обычном текстовом формате refman.doc и library.doc все еще доступны в каталоге doc, но теперь мы имеем refman.htm и library.htm в новом каталоге html. Мы разработали утилиту (написанную на Euphoria), которая позволяет нам легко поддерживать обе версии - HTML и обычный текстовый формат - файлов refman и library.

    Документация уточнена и расширена во многих местах.

  • WIN32: вы можете создавать неограниченное число обратных вызовов подпрограмм Euphoria, если это функции с числом параметров от 0 до 8. См. platform.doc. В версии 2.0 вы могли иметь только один обратный вызов и он должен был иметь строго 4 параметра.

  • Добавлено ключевое слово xor в набор: and/or/not и xor_bits() т.е.
               if a xor b then...
    
    xor работает также на рядах. Эта операция похожа на or.

  • Библиотечная подпрограмма dir(path) теперь официально поддерживает использование символов догадок * и ? в имени пути path. Эта возможность была всегда доступна, но не была документирована до сих пор, т.е.
               info = dir("mydata\\*.d?t")
    
  • оптимизация: Накладные расходы на call+return снижены в среднем на 30%. Повышение скорости коснулось всех обычных вызовов function/procedure/type, определенных программистом проверок типов, вызовов типа call_proc()/call_func(), использующих routine id, и обратных вызовов Windows. Только рекурсивные вызовы остались без изменения. Благодаря этому усовершенствованию, программы с относительно высокой частотой вызовов могут легко получить прибавку скорости около 10%.

  • оптимизация: Внедрено спрямление ветвей. Компилятор теперь будет оптимизировать ветвление во внутреннем коде так, что ветвь A->B, где точка B имеет ветвление в точку C, будет оптимизирована в направлении A->C. Даже что-то наподобие A->B->C->D может быть спрямлено до A->D. Такие возможности часто можно обнаружить в циклах while, содержащих операторы if.

  • оптимизация: Во многих случаях проверка инициализации переменных теперь заменяется на "нет-операции" после того как первая проверка выполнена. В Euphoria уже оптимизированы многие проверки времени компиляции.

  • оптимизация: get() и value() теперь выполняются намного быстрее в большинстве случаев, благодаря предложениям Джири Бэбора и некоторым другим решениям RDS. Новый файл v2.1 ex.exe с новым файлом v2.1 get.e является:

    в 1.45 раза более быстрым по чтению из файла ряда чисел с плавающей точкой и
    в 2.25 раза более быстрым по чтению из файла ряда целых чисел.

  • оптимизация: power(x,2) внутренне преобразована в x*x, которое быстрее во всех случаях, особенно если x является большим числом, целым или с плавающей точкой.

  • оптимизация: Благодаря Джири Бэбору, int_to_bits() стала, как минимум, на 15% быстрее в большинстве случаев.

  • оптимизация: Прокладка длинного ряда пикселов в 16-цветных графических режимах стала примерно на 3% быстрее.

  • оптимизация: draw_line() стала быстрее на несколько процентов.

  • Language War приобрела новое лицо. Теперь она работает в пиксельно-графическом режиме 18 (640 x 480 x 16 цветов) вместо текстового режима. Теперь ей свойственнен мелкозернистый параллелизм, т.е. виртуально все события могут происходить параллельно со всеми остальными событиями. Многочисленные торпеды, фазоры и т.д. могут быть нарисованы на экране одновременно, пока корабли движутся, команды вводятся, объекты взрываются и т.д. Даже измерения времени, необходимые для звуковых эффектов со встроенным громкоговорителем PC, обрабатываются диспетчером задач. При этом нет задерживающих "занятых" циклов, выполняемых во время игры. Галактический сканер теперь показывает масштабированную картину всей галактики, а не просто набор чисел.

  • Формат по умолчанию для печати атомов изменен с "%g" на "%.10g". Этот формат используется print(), ?, при трассировке, и для распечаток в файле ex.err. Это позволило выводить большие целые от -9,999,999,999 до +9,999,999,999 в виде целочисленной записи, а не в научной нотации. Этот прием обеспечивает теперь также вывод около 10 значащих цифр при отображении дробных чисел, вместо 6 прежних. Арт Адамсон и другие разъяснили, что должно отображаться большее число значащих цифр, чем было ранее.

  • Значения всех установок with/without, произведенных в начале или по ходу загрузки библиотечного файла, сохраняются во все время его ввода и исполнения, но в конце библиотечного файла восстанавливаются те установки, с которыми началась его загрузка. То есть, библиотечный файл может изменять эти установки, но они вернутся к своему исходному положению в конце include-файла. Это означает, в частности, что предупреждения могут быть выключены только внутри include-файла (и всех файлов, которые он сам включает). В результате некоторые программы теперь показывают те предупреждения, которые ранее не были видны.

  • Предупреждения теперь выводятся после окончания прогона вашей программы, так что не будут стираться командами clear_screen(), graphics_mode() и т.д. Некоторые программы теперь показывают те предупреждения, которые ранее не успевали появляться, так как бывали сразу же стерты.

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

  • Редактор ed теперь позволяет вам читать и редактировать строки длиной более 80 символов.

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

  • Окно трассировки теперь имеет команду верхнего регистра Q, которая разрешает вашей программе бежать к своему окончанию, игнорируя все оставшиеся на ее пути операторы trace(1). Нижний регистр q разрешает бежать только до следующего trace(1).

  • Файл safe.e (отладочная версия machine.e) улучшен. Он теперь будет автоматически отлавливать еще и другие случаи, когда данные незаконно записываются непосредственно перед, или непосредственно после границ выделенного блока памяти. Эта возможность, в частности, будет полезна под WIN32, когда Windows попытаются переписать по своему разумению один из ваших блоков памяти. Без инструментария, подобного safe.e, этот тип ошибки мог бы играть с вами в кошки-мышки часами или даже целыми днями напролет.

  • Создан каталог euphoria\tutorial, чтобы разместить несколько специальных небольших учебных программ.

  • Предельное число открытых файлов увеличено до 25 вместо бывших 15. Первые из этих файлов имеют номера 0,1,2: стандартный вход, стандартный выход и стандартная ошибка, таким образом вы можете иметь теперь до 22-х своих собственных файлов, открытых одновременно. (Насколько нам известно, никто еще не дошел до старого предела, но, как кажется, пришла пора снять это ограничение Euphoria.)

  • Когда пользователь просто набирает ex или exw и интерпретатор приглашает его к вводу имени файла Euphoria типа .ex или .exw, чтобы запустить его на исполнение, обновленная функция command_line() в программе теперь будет включать имя файла как второй параметр командной строки, точно так, как если бы пользователь сразу ввел: ex filename. Благодарности Мэтью Хаунселлу за эту идею.

  • mset.ex теперь выводит изображения в файл в формате .bmp. Ранее это был нестандартный сжатый формат.

  • lines.ex (lines.bat) теперь сообщает также о непустых/некомментированных строках. Это не то же самое, что и "счет операторов", используемый Euphoria PD как повод для окончания вывода диагностических сообщений, но это обычно находится внутри +/- 10%, если принять, что вы пишете один оператор в строке.

  • Численные значения, превышающие 1e308 (примерно), теперь устанавливаются в +/- inf. Они используются, чтобы выдать ошибку времени компиляции.

 
Версия 2.0 Официальный выпуск Март 25, 1998:

  • Изменена процедура установки. Euphoria .zip-файл теперь содержит большой файл bundle.dat, в котором собрано более 100 файлов. Это позволяет людям легко находить важные файлы: readme.doc, install.bat, и т.п., которые необходимо просмотреть перед установкой. В результате .zip-файл также стал на 35K меньше.

  • shroud будет предупреждать вас о необходимости использования bind/bindw, если вы попытаетесь создать окутанный исходный файл с расширением ".exe".

 
Версия 2.0 (бета) Февраль 26, 1998:

  • Интерпретатор WIN32, exw.exe, теперь является настоящей WIN32 GUI программой. В версии 2.0 альфа он был WIN32 консольной программой, которая была всегда ассоциирована с консолью или окном DOS. Теперь же консольное окно в стиле DOS будет создаваться только в случае, если ваша программа нуждается в нем. exw будет автоматически создавать новое консольное окно, как только ваша программа попытается что-то вывести на экран, прочитать с клавиатуры или вызовет любую подпрограмму, которой для работы требуется консоль. Консоль автоматически исчезнет, когда закончится исполнение вашей программы.

  • Новая библиотечная процедура, free_console(), немедленно удаляет открытое вами консольное окно.

  • Euphoria Complete Edition теперь имеет режим -scramble в программах bind и shroud, чтобы усилить безопасность программ, которые вы распространяете.

  • Вы можете теперь подавать атомы Euphoria в функции C, как 64-битный C тип double с плавающей точкой в качестве параметра, и получать результат с плавающей точкой из функций C.

  • exw.exe (бета) исполняется на 10 - 15% быстрее, чем exw.exe (альфа) (основано на проверках sieve.ex, shell.ex и т.д.). Компилятор WATCOM C делал плохую работу, оптимизируя критические секции кода интерпретатора при построении exw.exe, но выдавал превосходный код, когда строил ex.exe. После небольших простых изменений в C коде интерпретатора, WATCOM теперь вырабатывает отменный код для обеих платформ.

  • В среднем программа теперь имеет на 60K больше доступной памяти перед тем как начать использование своп-файла.

  • Снято ограничение на размер отдельной процедуры, функции или типа.

  • Снято ограничение на размер отдельного оператора верхнего уровня.

  • Предел общего числа файлов, которые может включать программа, увеличен до 256 вместо имевшихся 150.

  • Добавлена некоторая оптимизация. Следующие общие формы выражений теперь вычисляются быстрее:
               2 * x 
               x * 2 
               1 + x 
    
    где x может быть любым выражением и иметь тип atom или sequence.

  • Появился новый файл документации, perform.doc, содержащий множество советов, полезных программистам, озабоченным вопросами производительности.

  • Если вызвать функцию C с использованием c_func(), но прежде подключиться к функции C с использованием define_c_proc(), то будет выдано сообщение об ошибке. Похожим образом, если вызов будет с использованием c_proc(), но подключение с помощью define_c_func(), вы также получите сообщение об ошибке. Это ограничение было документировано, но реализовано только в версии 2.0 альфа. Некоторые программы, написанные для выпуска альфа, должны быть откорректированы.

  • Теперь вы будете видеть настоящее имя подпрограммы C или Euphoria, которую попытались вызвать, но получили сообщение об ошибке из call_proc(), call_func(), c_proc(), or c_func().

  • Введен новый режим -clear_routines в программы bind и shroud, который оставляет имена всех подпрограмм неокутанными. Это необходимо, если ваша программа вызывает функцию routine_id(). Вы будете предупреждены, если используете routine_id(), но не назначили этот режим.(Зарегистрированные пользователи могут использовать режим -scramble совместно с -clear_routines, чтобы восстановить высокий уровень окутывания.)

  • Если возникнет конфликт имен в глобальных идентификаторах, программа окутывания shrouder предупредит вас, и пригласит к изменению имен, завершив свою работу аварийно с сообщением об ошибке.

  • Исключена возможность трассировки или профилирования окутанного кода.

  • Добавлена новая демо-программа, hash.ex, размещенная в каталоге euphoria\demo.

  • Файл freq.ex перенесен из каталога euphoria\bin в каталог euphoria\demo и переименован как tree.ex.

  • Добавлен новый файл документации, bind.doc, в котором описаны все возможности программ bind.bat и shroud.bat. Предыдущее описание исключено из файла refman.doc.

  • Файл overview.doc дает быстрый обзор по всем файлам документации.

  • В описание функции get_mouse() в файле library.doc включено обсуждение проблемы графических режимов с шириной экрана в 320 пикселов (вы должны делить значение координаты x на 2).

 
Версия 2.0 (альфа) Ноябрь 5, 1997:

  • Теперь поддерживается новая платформа. Интерпретатор exw.exe будет исполнять программы Euphoria, используя операционную систему WIN32 (Windows 32-битная). Интерпретатор ex.exe будет исполнять программы, используя операционную систему DOS32 (расширенная DOS). См. файл platform.doc для уточнения деталей.

  • Добавлены следующие библиотечные подпрограммы.

    Для обеих платформ, DOS32 и WIN32:

    platform() - определяет, на какой платформе исполняется программа. (Константа PLATFORM доступна в Euphoria 2.2 и выше).
    routine_id() - выдает небольшой целый идентификатор для процедуры или функции Euphoria.
    call_proc() - вызывает процедуру Euphoria по ее идентификационному номеру.
    call_func() - вызывает функцию Euphoria по ее идентификационному номеру.
    custom_sort() - сортирует ряд с использованием заданной функции сравнения.
    poke4() - размещает число в 4-х байтах памяти. poke4(address, value) как минимум в 10 раз быстрее, чем: poke(address, int_to_bytes(value)). poke4() также работает с рядом величин.
    peek4s() - читает 4 байта в памяти как целое число со знаком (работает также с рядами).
    peek4u() - читает 4 байта в памяти как целое число без знака (работает также с рядами). peek4u(address) в 10 раз быстрее, чем: bytes_to_int(peek({address, 4})).
    allocate_string() - размещает символьную строку с терминатором 0 в памяти.

    Только для WIN32:

    open_dll() - открывает Windows .dll-файл.
    define_c_proc() - определяет функцию C, которая будет вызвана из Euphoria (без выдачи величины).
    define_c_func() - определяет функцию C, которая будет вызвана из Euphoria (с выдачей величины).
    call_c_proc() - вызывает функцию C из Euphoria (без выдачи величины).
    call_c_func() - вызывает функцию C из Euphoria (с выдачей величины).
    call_back() - выдает обратный адрес, так что Windows может вызвать вашу подпрограмму Euphoria, когда пользователь работает в вашем окне.
    message_box() - отображает простейшее окно Да/Нет/Сброс.

  • Новые демо-программы:

    • csort.ex

    • email.exw

    • window.exw

    • winwire.exw

    • dsearch.exw

  • Новые библиотечные файлы:

    safe.e - отладочная версия machine.e
    misc.e - разное
    dll.e - доступ к dll
    msgbox.e - Диалог Windows

  • Следующие дополнительные улучшения сделаны в версии для DOS32:

    • На системах с Pentium и выше вычисления с плавающей точкой теперь выполняются на 20% быстрее (и с плавающей точкой в exw еще на 20% быстрее, чем в ex для 2.0).

    • printf() на экран и print() на экран заметно быстрее в большинстве случаев.

    • Экран трассировки обновляется несколько быстрее.

    • Профиль времени более точен относительно getc().

    • Демо-программа mset.ex исполняется на 30% быстрее.

 


Особенности более старых выпусков:

 
Версия 1.5a Июнь 13, 1997:

  • Оптимизированы многие операции и библиотечные подпрограммы.

    • get_key() в 100 раз быстрее, когда в буфере нет кода клавиши.

    • get_all_palette() более чем в 100 раз быстрее и это делает save_screen() значительно быстрее.

    • Следующие подпрограммы теперь встроены непосредственно в интерпретатор ex.exe, что позволило избежать накладных расходов на вызов machine_proc() или machine_func(): pixel(), get_pixel(), mem_set(), mem_copy().

    • poke() длинного ряда в память, кроме видеопамяти, на 50% быстрее.

    • pixel() в 4 раза быстрее в режиме 19.

    • get_pixel() быстрее во всех режимах.

    • display_image() почти на 30% быстрее в большинстве режимов и в 4 раза быстрее в режиме 19, благодаря тому, что
      pixel() быстрее.

    • Все арифметические и битовые операции применительно к рядам целых теперь быстрее на 29%.

    • a & b (конкатенация, сцепление) на 15% быстрее в большинстве случаев, и драматически быстрее в случае, когда вы наращиваете очень длинный ряд, сцепляя с ним множество небольших рядов.

    • getc() на 12% быстрее.

    • match() на 8% быстрее в типовых случаях.

    • append()/prepend() на 15% быстрее во многих случаях.

    • find() целого числа в ряде целых чисел на 64% быстрее.

    • Формирование 2-элементного ряда {a,b} на 11% быстрее.

    • Внутреннее копирование общего ряда, когда он больше не может быть общим, на 15% быстрее.

 
Версия 1.5 Март 21, 1997:

  • Добавлены следующие библиотечные процедуры, подробно описанные в файле library.doc.

    • allow_break()

    • check_break()

    • mem_copy()

    • mem_set()

    • atom_to_float32()

    • atom_to_float64()

    • float32_to_atom()

    • float64_to_atom()

    • get_all_palette()

    • save_bitmap()

    • save_screen()

    • arctan()

    • and_bits()

    • or_bits()

    • xor_bits()

    • not_bits()

    • get_vector()

    • set_vector()

    • lock_memory()

    • tick_rate()

  • добавлен режим with profile_time (профиль времени для DOS32).

 
Версия 1.4b, Октябрь 1996:

  • в программе mset.ex введен более удобный визир для селектора клетки, увеличена скорость.

  • Редактор ed.ex теперь позволяет вводить специальные символы с кодами ASCII, большими 127, нажимая на клавишу Alt и набирая код на цифровой клавиатуре.

 
Версия 1.4a, Июль 1996:

  • Добавлена библиотечная подпрограмма crash_message().

  • Программы, связанные зарегистрированными пользователями, теперь будут вырабатывать диагностику времени прогона независимо от размера кода.

  • Программа shroud.bat получила новый режим -full_keywords.

 
Версия 1.4, Май 1996:

  • Вы можете теперь преобразовать любую программу Euphoria в самостоятельный .exe-файл.

  • Исключен отдельный расширитель DOS DOS4GW.EXE.

  • Поддержаны длинные имена Windows 95.

  • Поддержаны прерывания DOS.

  • Разработаны новые утилиты: key.ex, where.ex, ascii.ex, guru.ex.

  • Новая демо-программа: dosint.ex.

  • Новые библиотечные подпрограммы: set_rand(), use_vesa().

  • Возможность записывать в память и читать целый ряд байтов.

  • Улучшен редактор.

  • Уменьшены накладные расходы на память для рядов.

 
Версия 1.3, Июнь 1995:

  • Добавлена возможность редактирования нескольких файлов в различных окнах.

  • Добавлено 20 новых библиотечных подпрограмм.

  • Значительно увеличена производительность графических режимов.

 
Версия 1.2, Март 1994:

  • Устранена проблема, мешавшая Euphoria запускаться из приглашения DOS под Windows.

 
Версия 1.1, Январь 1994:

  • Добавлены некоторые новые возможности и демонстрационные программы.

 
Версия 1.0, Июль 1993:

  • Euphoria впервые выпущена после 3-х лет исследований и разработки и 6-ти месяцев бета-тестирования. Многие идеи, реализованные в Euphoria, пришли из магистерской диссертации Роберта Крейга, защищенной им в университете Торонто. Эта диссертация появилась под влиянием работы Джона Бэкуса о функциональных языках программирования (FP).