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

 
Версия 3.1.1, август 2007:

В этом выпуске собраны небольшие обновления, исправляющие некоторые ошибки.

Исправление ошибок

  • исправлена ошибка: Утечка памяти (память выделяется, но никогда не освобождается), образовавшаяся в версии 3.1 на платформах Linux и FreeBSD. Исправлено Мэттью Левисом.

  • исправлена ошибка: Когда Euphoria отказывалась открывать главный программный файл, в сообщении об ошибке иногда фигурировал неверный тип файла. Исправлено Мэттью Левисом.

  • исправлена ошибка: Откорректированы новые встроенные подпрограммы, find_from() и match_from().
    Третий аргумент (начальный индекс) теперь проверяется более полно. Исправлено Мэттью Левисом и Робом Крейгом.

  • исправлена ошибка: Программа ed для Linux изменена, чтобы разрешить пробелы в пути к файлу, который вы собираетесь редактировать. Исправлено Робом Крейгом.

  • исправлена ошибка: Добавлены двойные кавычки в код ed.ex, так что теперь Esc e будет работать с путями, содержащими пробелы. Сообщено Алексом Каракатсанисом. Исправлено Робом Крейгом.

  • исправлена ошибка: Библиотека database.e изменена так, что теперь разрешена косая черта в имени файла для
    db_compress(). Сообщено Фрэнком Доулингом. Исправлено Робом Крейгом.
Версия 3.1, июнь 2007:

В этом выпуске внедрен ряд новых возможностей, исправлены найденные ошибки и улучшена документация.

Новые возможности

  • Добавлены встроенные подпрограммы find_from() и match_from().
    Они работают подобно find() и match(), но позволяют начинать поиск с любого элемента ряда, а не обязательно с первого. Некоторые алгоритмы за счет этой новации становятся проще и значительно быстрее. Подпрограммы разработаны Мэттью Левисом.

  • При поиске библиотечного файла, заданного с относительным (т.е. не абсолютным) путем, Euphoria теперь будет в первую очередь проверять наличие этого файла относительно пути к текущему файлу исходного кода. Если библиотечный файл здесь не найден, применяются обычные правила, т.е. проверяется положение относительно главного программного файла, затем каталоги EUINC (если имеются), и, наконец, каталог euphoria\include. Нововведение предложено С.К.Лестером и, в различных формах, многими другими пользователями. Разработано С.К.Лестером. Проверено Мэттью Левисом.

  • ex int.ex (в каталоге euphoria\source) теперь работает иначе, так как интерпретатор получил подпрограмму machine_proc(65,...), которая подает IL в скоростной исполнительный блок, написанный на C. Вы также можете запустить int.ex под управлением exw или exu. Эта возможность позволяет вам легко модифицировать блок интерпретации и получать новые интерпретаторы Euphoria для всех платформ, которые исполняют программы на полной скорости (много быстрее, чем execute.e, написанный на Euphoria). Вы можете также связывать int.ex, чтобы иметь единственный исполняемый файл для любой необходимой вам платформы.

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

  • Транслятор: Ограничение на число дополнительных файлов .c, которые могут быть созданы на файл кода Euphoria, увеличено с 36 до 1000 с лишним.

Новая документация

  • Технология особой компрессии "storage cache", используемой для сжатия связанных программ и файлов .il, документирована в комментариях, добавленных в файле compress.e. Эта компрессия снижает объем IL на 30% и более, позволяя в то же время быструю декомпрессию.

  • В каталог euphoria\demo\langwar добавлен новый файл документации tasks.doc. В нем описано множество задач, используемых в игре Language War.

Исправление ошибок

  • исправлена ошибка: Транслятор: Транслированный код для routine_id() ошибочно выдавал -1, если глобальный идентификатор совпадал в данном файле с вызовом в routine_id(), либо с глобальным идентификатором в более раннем файле. Ситуация ошибочно трактовалась как повторное определение идентификатора без префикса пространства имен.
    Благодарности Даниэлю Клуссу.

  • исправлена ошибка: Транслятор: В редких ситуациях при создании более одного файла .c для файла Euphoria мог возникать конфликт имен.
    Благодарности Д.Б.Джеймсу.

  • исправлена ошибка: Транслятор: Транслированная/компилированная функция get_key(), при использовании компиляторов Borland или LCC, требовала лишнего нажатия на клавишу после возврата каретки. Исправлено Жаком Дешеном.

  • исправлена ошибка: Переносимость исходного кода: euphoria.h: CLK_TCK теперь переопределяется как CLOCKS_PER_SEC, если в исходном коде ранее не определена. Исправлено Мэттью Левисом.

  • исправлена ошибка: Установщик: Добавлены двойные кавычки вокруг ряда имен файлов в скрипте инсталлятора INNO (похоже, что многих пользователей этот недостаток и не затрагивал).


Версия 3.0.2, выпуск от 9 февраля 2007:

В этом выпуске исправлены некоторые важные ошибки версии 3.0.1 и улучшена документация исходного кода.

Исправление ошибок

  • исправлена ошибка: Транслятор: Программы, транслированные на C и откомпилированные для Windows, могли аварийно останавливаться, если использовали новые режимы многозадачности (этой ошибки не было в версии 3.0.0, но затем она была случайно внесена в версию 3.0.1 в результате изменения параметров стека).

  • исправлена ошибка: Интерпретатор: В очень редких случаях интерпретатор для Windows мог аварийно останавливаться из-за ошибки в load_private_block(), где производилось обращение к уже освобожденному блоку памяти. Страница виртуальной памяти могла быть удалена Windows из кучи перед чтением блока.
    Благодарности Энди Серпа, Питу Ломэксу, Мэтту Левису, Дереку Парнеллу и другим за помощь в локализации этой ошибки.

  • исправлена ошибка: Исходный код: "\euphoria" изменено на %EUDIR% в 4-х .bat-файлах в каталоге исходного кода.
    Благодарности Джиму Маркосу.

Улучшения в документации

  • Новый документ (translator.doc) добавлен в каталог euphoria\source. Он описывает внутреннее устройство транслятора с ударением на ряд оптимизаций, выполняемых при трансляции кода на C.

  • Пользовательская документация также улучшена в ряде мест.
Изменения в исходном коде C

  • Мэттью Левис добавил make-файл для Linux/FreeBSD и несколько изменил исходный код для обеспечения лучшей поддержки Open Watcom и новейших версий GCC.

Версия 3.0.1, выпуск от 17 октября 2006:

Этот выпуск подчищает некоторые ошибки и недостатки документации, обнаруженные в 3.0.0.

Улучшения документации

  • Введен новый документ по многозадачности.

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

Исправление ошибок
  • Библиотеки .dll/.so, написанные на Euphoria, не работали из-за ошибки, относящейся к режиму многозадачности.
    Благодарности Андреа Кини.

    Примечание: исполнение многозадачных встроенных подрограмм на текущий момент не поддержано внутри написанных на Euphoria библиотек типа .dll/.so. Вы получите сообщение об ошибке времени компиляции от транслятора, если установите опцию -dll, а в исходном коде вашей библиотеки найдутся операторы многозадачности. Но использование библиотек .dll/.so, написанных на Euphoria, из главной программы, работающей в многозадачном режиме, вполне допустимо.

  • Исправлена ошибка текстовой консоли. Она относилась к работе табуляции и/или переноса в области 80-ой колонки.
    Благодарности Питу Ломэксу, Юргену Люфье, Мэтту Левису.

  • bind.bat, bindw.bat и shroud.bat изменены, чтобы использовать %EUDIR% вместо \EUPHORIA.
    Благодарности Рэю Смиту.

  • syncolor.e теперь включает keywords.e (относительно euphoria\bin), а не \euphoria\bin\keywords.e.
    Благодарности Рику Беттису.

Изменения в исходном коде C
  • Все директивы #ifdef ENCURSES удалены. Мы не планируем вновь использовать ncurses, и это изменение значительно способствует лучшей наглядности исходного кода.

  • Макрокоманда машинного языка thread5() добавлена в be_execute.c. Это позволило правильно компилировать интерпретатор с Open Watcom, избегая ошибки оптимизатора C.
    Благодарности Мэтту Левису.

 
Версия 3.0.0, выпуск от 17 октября 2006:

Начиная с этого выпуска, Euphoria становится полностью бесплатным и полностью открытым продуктом! RDS продолжит разработку системы Euphoria с участием множества талантливых программистов. Бесплатный пакет теперь содержит Интерпретатор (с исполнительным блоком на основе C- или Euphoria-программы), Биндер/шроудер, полную версию Транслятора, и полный исходный код для всего этого. Тысячи людей теперь смогут проверить полный исходный код на наличие ошибок, потерь производительности и увидеть потенциальные новые возможности.

Вместо альфа, бета и официального выпусков мы вводим теперь просто номера, 3.0.0, 3.0.1 ... Мы ожидаем, что выпуски теперь станут более частыми, хотя и менее насыщенными новым материалом в сравнении с предыдущими.

Усовершенствованные возможности

  • Кооперативная многозадачность. Вместо единственного направления исполнения мы можем теперь поставить множество задач, каждая из которых будет решаться независимо от других. Каждая задача имеет её собственный выполняемый в данный момент оператор, стек вызова подпрограммы и частные переменные для всех подпрограмм в этом стеке. Задачи используют глобальные и местные переменные, но игнорируют частные. В любой точке задачи может быть вызвана процедура task_yield(), чтобы передать управление диспетчеру Euphoria, который выбирает следующую задачу, подлежащую исполнению. Когда управление возвращается к исходной задаче, её решение продолжается с оператора, следующего за task_yield().

    Новые подпрограммы времени прогона, обеспечивающие многозадачность: task_create(), task_schedule(),
    task_yield(), task_suspend(), task_self(), task_list(), task_status(), task_clock_start(), task_clock_stop()

  • Использование библиотеки ncurses на Linux и FreeBSD прекращено, так как подпрограммы ncurses иногда вызывали проблемы на некоторых вариантах операционных систем Linux/FreeBSD. Исполнительный блок Euphoria теперь использует ANSI-последовательности для позиционирования вывода и управления цветом на простых консолях текстового режима. Также прекращено использование libgpm (поддержка консольной мыши) на Linux (консольная мышь никогда не поддерживалась Euphoria для FreeBSD).

  • Включаемые файлы с одинаковыми именами, но из различных каталогов, больше не будут игнорироваться после первого включения. Чтобы быть проигнорированным, включаемый файл должен быть точно таким же, как и ранее уже включённый (новое пространство имен всё же может быть определено, даже хотя включаемый файл на самом деле повторно не включён). На Linux/FreeBSD теперь используется сравнение имен, чувствительное к регистру. Это новшество может (но не часто) приводить к отказам старого кода:

    Может начинаться включение файлов, которые вы вовсе не намеревались включать, но в программе были операторы включения, которые просто ранее программой игнорировались. Решение: Удалите ненужные операторы включения.

    Если включение некорректное (в пути поиска включаемого файла файл отсутствует), данная ошибка может оставаться скрытой на старых системах, если правильное включение файла с таким же именем (но из другого каталога) уже было выполнено ранее по ходу программы. Решение: Укажите правильный путь к включаемому файлу.

  • Снято ограничение на число предупреждений, которые могут отображаться. Теперь вы сможете прокручивать предупреждения, по 20 на страницу. Как и ранее, если создаётся файл ex.err, то все предупреждения размещаются в конце этого файла.
    Благодарности Джудит Эванс.

  • Транслятор: Вы можете задать размер стека времени прогона для вашей программы, используя опцию -stack nnnn. Исходный размер стека был увеличен для большинства поддерживаемых компиляторов C, особенно когда ваша программа содержит вызов task_create().

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

  • execute.e: Введены дополнительные проверки на ошибки времени прогона в некоторые подпрограммы интерпретатора с исходным кодом Euphoria, чтобы обеспечить отлов ошибок непосредственно в этом интерпретаторе, а не в исполнительном блоке или трансляторе.

  • pretty_print(), опция 3, теперь включает \t \r и \n как законные символы из "диапазона ASCII". Это увеличивает вероятность правильного отображения строк.
    Благодарности Юргену Люфье.

  • Символ ASCII 127 теперь не будет отображаться графически на Linux при трассировке или в исходном pretty_print(). Он отображается как откат, когда используются коды ANSI.

  • Опции Биндера теперь проверяются более чётко, так как -xxxoutxxx было опасным. Биндер использует сейчас
    match(x,y) = 1, а не match(x,y) != 0. Биндер также блокирует перезапись исходного файла, когда задано -out.
    Благодарности Майку Сабалу, Грегу Хабереку.

  • Мы начали пользоваться прозрачными значками Euphoria.
    Благодарности Винсенту Хоувеллу.

  • Интерпретатор Euphoria (eu.ex): Сообщение "not initialized" усовершенствовано: "xyz has not been initialized"

  • Множество небольших улучшений сделано в документации. Например, использование единственного атома многими форматами printf() было впервые документировано.
    Благодарности Питу Ломэксу.

Исправление ошибок

  • исправлена ошибка: Транслятор: файл Euphoria с именем "main.e" или "init.e" мог приводить к конфликту имен файлов. Вероятность конфликта значительно снижена, а если он всё же случается, выдаётся понятное сообщение об ошибке.
    Благодарности Винсенту Хоувеллу.

  • исправлена ошибка: Транслятор: использование "interrupt" в качестве имени переменной Euphoria вызывало конфликт при компиляции с Watcom.
    Благодарности Льюису Брайанту.

  • исправлена ошибка: Транслятор: наклонная черта в конце комментария Euphoria могла восприниматься компилятором C как символ продолжения строки. Это могло в результате вести к ошибкам в генерируемом коде.
    Благодарности Марку Хоннору.

  • исправлена ошибка: Транслятор: вызов из .dll подпрограммы, написанной на Euphoria, т.е. через c_func(), мог вести к ошибке, если выдаваемая переменная была типа ряд или объект.
    Благодарности Томасу Янсену.

  • исправлена ошибка: если вы подадите файл номер -1 в printf(), вы получите теперь сообщение об ошибке. Во всех предыдущих выпусках -1 могла бы просто привести к отказу printf() от вывода вообще.
    Благодарности Дэниелу Клуссу.

  • исправлена ошибка: scanner.e: строки кода, длиннее 10000 символов, вызывали проблемы. Также мы не проверяли
    allocate() на выдачу 0 в pack_source() (т.е. выход за пределы доступной памяти).
    Благодарности Антонио Алесси.

  • исправлена ошибка: execute.e: (инетрпретатор, написанный на Euphoria) В некоторых случаях индексы отрезка не проверялись на соответствие границам перед использованием. eu.ex мог рухнуть вместо сообщения об ошибке в программе пользователя.

  • исправлена ошибка: присваивания в форме:
    x[a][b..c] += expr
    вели к ложной ошибке индексирования в execute.e, интерпретаторе, написанном на Euphoria.
    Благодарности Винсенту Хоувеллу.

  • исправлена ошибка: execute.e в некоторых случаях не обрабатывал правильно дробные индексы.
    Благодарности Крису Боузи и Винсенту Хоувеллу.

 
Версия 2.5 Официальный выпуск от 8 марта 2005:

Расширенные возможности

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

  • Транслятор: добавлена новая опция -fastfp для WATCOM/DOS (только в зарегистрированной версии). Эта опция может удвоить скорость программы, широко использующей вычисления с плавающей точкой. Результирующий файл .exe требует наличия процессора класса Pentium или 386/486 с сопроцессором плавающей точки.

  • eu.ex: в модуле execute.e теперь используется машинный код для организации обратных вызовов, предложенный Мэттью Левисом. В результате снято ограничение на число обратных вызовов, которые могут быть использованы программой.

  • Транслятор: добавлена новая опция -keep, предотвращающая удаление любых файлов C или объектных файлов, созданных во время трансляции и компиляции.
    Благодарности Мэттью Левису.

  • Транслятор: для того, чтобы обрабатывать громадные программы без опасения наткнуться на ограничения, налагаемые компилятором C, транслятор теперь разбивает файл init_.c на несколько блоков.
    Благодарности Мэттью Левису.

  • Транслятор: улучшена проверка правильности опций командной строки.

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

  • ed.ex: ed будет теперь вызывать подпрограмму free_console() в конце исполнения на Linux или FreeBSD. Раньше это вело к некоторому подёргиванию изображения на DOS/Windows и не было необходимым.

Исправление ошибок

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

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

  • исправлена ошибка: трассировка ошибки могла быть неправильной, если вы (незаконно) пытались подавать ряд как идентификатор подпрограммы в call_proc/func.
    Благодарности Марио Стиили.

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

  • исправлена ошибка: routine_id() в форме routine_id("namespace:name") не работала корректно в интерпретаторе и в общественном исходном коде интерпретатора. Транслятор работал нормально. Ошибки не было в 2.4 и более ранних версиях.
    Благодарности Верне Тайсу.

  • исправлена ошибка: command_line() теперь показывает еще одно имя файла, если пользователь вводит имя файла интерактивно из приглашения ex/exw/exu. Это совместимо с 2.4 и более ранними версиями.
    Благодарности Бобу Элиа.

  • исправлена ошибка: предупреждения не выводились на отображение, если программа завершалась по команде abort() или прерывалась аварийно из-за ошибки времени прогона.
    Благодарности Юргену Люфье.

  • исправлена ошибка: функция platform() теперь вычисляется в backend/backendw/backendu для файлов .il (а не в блоке проверки синтаксиса шроудера). Это позволяет файлу .il быть многоплатформенным. В других ситуациях интерпретатор и транслятор будут продолжать вычисление platform() в блоке проверки синтаксиса в интересах максимальной эффективности.
    Благодарности Кену Родесу.

Документация

  • Множество небольших корректив и улучшений сделано в документации. Некоторые важные исправления принадлежат Юргену Люфье и Вольфгангу Фритцу.

  • В Справочное руководство добавлен параграф, объясняющий последствия, наступающие в том случае, когда вы пытаетесь модифицировать переменную, используя сторонний эффект в функции, но одновременно модифицируете её через присваивания при индексировании. Примечания к выпуску 2.5 альфа обновлены с целью указания на несовместимость с версией 2.4.

 
Версия 2.5 Бета-выпуск от 14 января 2005:

Улучшена производительность

  • Время проверки синтаксиса (время старта) интерпретируемой программы значительно уменьшено, в типовом случае на 25% на новых машинах, и на 40% на более старых машинах, по сравнению с 2.5 альфа. В случае старых машин, исполняющих очень большие программы, время старта может быть от 65% до 90% меньше, особенно когда действуют команды with trace или with profile.

    Основная оптимизация выполнена в исходном коде Euphoria для блока проверки синтаксиса, который является общим с открытым кодом интерпретатора Public Domain, так что для eu.ex время старта также уменьшилось.

  • Главное улучшение было сделано в opASSIGN_SUBS() в PD исходном коде интерпретатора. Данная операция отрабатывает присваивания в индексированном ряде и очень напряжённо используется.
    Благодарности Грегу Хабереку за выявление этого узкого места.

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

  • В большинстве случаев интерпретатор и транслятор теперь вычисляют выражения формирования рядов {a, b, c, ...} однократно во время компиляции, вместо того, чтобы делать это каждый раз во время прогона, если все элементы являются постоянными целыми (фиксированными числами или фиксированными строками). Это нововведение ускоряет программу и уменьшает размер транслированных программ.

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

Усовершенствования

  • Шроудер теперь по умолчанию вводит строку #! (шибанг - дело) в начале файла .il без дополнительной спецификации.
    Благодарности Кеннету Родесу.

  • На Linux шроудер устанавливает для файла .il атрибут разрешения на исполнение.
    Благодарности Кеннету Родесу.

  • На Linux/FreeBSD биндер теперь не устанавливает для исполняемых файлов расширение ".exe". Используется только заданное имя. Это обстоятельство совместимо с транслятором и в большей степени соответствует стандарту, принятому на системах Linux/FreeBSD.
    Благодарности Джерри Стори.

  • database.e: добавлены новые проверки правильности параметров, подаваемых в некоторые подпрограммы, это позволило ввести более содержательное сообщение об ошибке обращения к ещё невыбранной таблице.
    Благодарности Дереку Парнеллу.

  • Несколько небольших улучшений в продукте Исходный Код и его документации позволили упростить его компиляцию с помощью Open Watcom и других компиляторов.
    Благодарности Джин-Марк Дюро.

  • Главный файл исходного кода теперь закрывается сразу по окончании проверки синтаксиса. Это позволяет программе редактировать или другим образом модифицировать свой собственный исходный код.

  • Первое случайное число, выдаваемое датчиком, теперь стало более хаотичным на Windows.
    Благодарности Аку Сайя.

Программа установки для DOS/Windows

  • Инсталлятор будет теперь устанавливать ed.bat для запуска ed.ex с ex.exe на ME/98/95, и с exwc.exe на NT/2000/XP.

  • Инсталлятор теперь не будет менять имеющиеся ассоциации для файлов с типами Euphoria. (Если вы устанавливаете Euphoria в новом каталоге, вам может понадобиться сделать это самостоятельно.)
    Благодарности Юргену Люфье и другим.

  • Связи от Меню Пуска, создаваемые программой установки, были неправильными: exw ошибочно указывала на ecw.exe, а ex - на ec.exe.
    Благодарности Аку Сайя.

  • Теперь можно иметь пробел в имени пути к каталогу установки: т.е. "C:\Program Files".
    Благодарности Рич.

Исправление ошибок

  • исправлена ошибка: При построении файла .so Linux/FreeBSD из кода Euphoria, который содержал
    call_proc() или call_func(), в файле C появлялось неопределенное имя "__stdcall".
    Благодарности Мэтту Левису.

  • исправлена ошибка: открывающее сообщение, выводимое биндером на Linux/FreeBSD и на Windows, было неправильным.
    Благодарности Кеннету Родесу и Игорю Качану.

  • исправлена ошибка: routine_id() выполняла поиск имен в коде, опережая действительные объявления. Это происходило только при интерпретации и только на высшем уровне, не внутри подпрограммы.

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

  • исправлена ошибка - транслятор: вызов routine_id() мог иногда приводить к поиску за концом списка с извлечением из памяти мусора. В большинстве случаев это не сопровождалось проблемами, но иногда приводило к аварийной остановке.
    Благодарности Кеннету Родесу.

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

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

  • исправлена ошибка: после ошибки времени компиляции в exw вы должны были нажать Enter, а затем появлялось сообщение: "Press Enter...". (Всё работало правильно в случае ошибок времени исполнения).
    Благодарности Тони Шкода.

  • исправлена ошибка: существовало несоответствие между действием abort(1) в случаях трансляции и интерпретации.
    Благодарности Юргену Люфье.

  • исправлена ошибка: save_text_image(), исполняемая exw или exwc, время от времени выдавала некоторый мусор в верхних битах атрибутов символа.
    Благодарности Брайану Брокеру.

  • исправлена ошибка: нажатие клавиши CAPS lock приводило к неверному результату при использовании ed с exwc - выводилось ошибочное сообщение в верхней части экрана. ed теперь не выводит это сообщение.
    Благодарности Алексу Каракатсанису.

  • исправлена ошибка: вызов routine_id("") приводил к аварийной остановке биндера и транслятора.
    Благодарности Антонио Алесси.

  • исправлена ошибка: строки с длиной более 200 символов приводили к отказу дисплея трассировки.
    Благодарности Томасу Беттерли.

  • исправлена ошибка: идентификаторы, объявленные как константа, выводились как неопределенные в окне трассировки.
    Благодарности Мэттью Левису.

  • исправлена ошибка: строки форматирования printf() были неправильными для двух сообщений об ошибках в execute.e.
    Благодарности Дереку Парнеллу.

  • исправлена ошибка: символ курсора (стрелка вверх), отображаемый в сообщениях об ошибке времени компиляции, был сдвинут на одну позицию вправо по сравнению с версией 2.4.
    Благодарности Юргену Люфье.

  • исправлена ошибка: для обеспечения совместимости с официальным интерпретатором, идентификаторы подпрограмм, выдаваемые routine_id(), теперь в исходном коде интерпретатора PD начинаются с 0 вместо 1.

Документация

  • В раздел "Сцена" добавлен параграф, разъясняющий, как можно переопределять уже определённые подпрограммы и переменные своими собственными подпрограммами и переменными.
    Благодарности Майку.

  • В описание функции open() добавлено предупреждение о правилах использования имен файлов CON, CON.* и других, зарезервированных DOS для своих нужд.
    Благодарности Игорю Качану.

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

  • Устаревшее понятие "Complete Edition" - "Полная Редакция" было полностью удалено из документации.
    Бдагодарности Юргену Люфье.

  • Из многих документов удалена устаревшая информация, относящаяся к версии 2.4.

  • Справочное руководство откорректировано в отношении предела глубины вложения библиотечных файлов, который раньше был равен 10 уровням, а теперь - 30.
    Благодарности Darkvincentdude.

  • В исходном коде PD интерпретатора, в eu.ex, имелась ошибка в комментариях, в верхней строке.
    Благодарности Аку Сайя.

  • Тот факт, что crash_message() теперь полезна только для ошибок времени прогона, разъяснён более подробно.
    Благодарности Юргену Люфье.

  • Исправлена гипертекстовая связь с .hlp-файлом WIN32 API.
    Благодарности "Bro George".

  • Внесено множество других уточнений.

 
Версия 2.5 альфа-выпуск, 15 ноября 2004 г.:

Новые возможности

  • Теперь вы имеете полный исходный код интерпретатора Euphoria , на 100% совместимого с официальным интерпретатором RDS для всех платформ. Просмотрите каталог euphoria\source. Этот интерпретатор написан исключительно на Euphoria и имеет тот же самый блок трансляции, что и официальный интерпретатор RDS. Так как упомянутый исходный код является общественным, он может быть использован и модифицирован для любых целей, включая коммерческие приложения или приложения с закрытым кодом. Он может быть связан в единственный исполняемый файл посредством биндера, или транслирован с помощью транслятора с Euphoria на C, если вы хотите получить значительно более быстрый исполняемый файл.

  • Официальный интерпретатор Euphoria был полностью переработан и имеет теперь совершенно новую структуру. Он состоит из блока трансляции (front-end), написанного на Euphoria (30% общего объема), и блока исполнения (back-end), написанного на C при тщательном ручном кодировании (70% общего объема). Ранее это был 100% код C, и границы между блоком трансляции и блоком исполнения были размытыми.

  • Транслятор Euphoria был переписан полностью на Euphoria. Ранее это были 100% кода C. В Трансляторе используется тот же самый блок трансляции, что и в интерпретаторе, и в биндере. Такое унифицированное построение системы программирования в целом снижает затраты на её сопровождение и усовершенствование и помогает более надёжно выявлять скрытые ошибки в вашем коде (индексы вне границ, неинициализированные переменные и т.д.).

  • Бесплатный общественный интерпретатор (ex.exe, exw.exe, exu), теперь имеет полную поддержку для функции trace() после 300 операторов, и для профилирования. Таким образом, теперь регистрируемый интерпретатор "Полной Редакции - Complete Edition" снят с производства. Тем не менее, регистрация всё ещё требуется для приобретения биндера/шроудера.

  • Разработан новый биндер (100% на Euphoria). Так как он имеет тот же самый блок трансляции, что и интерпретатор, и транслятор, исключаются возможные несовместимости, а расходы на будущее сопровождение и усовершенствование значительно снижаются.

  • Связанная программа теперь может обеспечивать полный дамп в файл ex.err, без включения каких-либо строк исходного кода в .exe-файл.

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

  • Биндер для Windows имеет опцию -con, так что вы теперь можете создавать консольные приложения.

  • Разработан отдельный исполнительный блок интерпретатора (back-end) для совместного использования с биндером и самостоятельного исполнения промежуточного кода (.il-файлы). Он имеет значительно меньший объём чем интерпретатор, так как в нём отсутствует блок трансляции (пазер, иначе front-end). Наличие компактного исполнительного блока заметно снижает размер связанной программы.

  • Введен новый символ $, представляющий длину текущего ряда.
    Вместо записи s[length(s)], вы можете теперь записывать s[$].
    Вместо s[1..length(s)-1], вы можете сказать s[1..$-1].
    Более сложные выражения, подобные s[i][$-5..$-1], также возможны.

    Примечание: Чтобы обеспечить правильное функционирование этой новой возможности, пришлось пойти на некоторую несовместимость с версией 2.4. Изменение внесено в порядок вычисления выражений в операторе присваивания с множественными индексированиями:

    lhs_var[lhs_expr1][lhs_expr2]... = rhs_expr

    Это изменение влечёт за собой проблему, только если вы пытаетесь модифицировать lhs_var через вызов функции, в то время как в том же операторе осуществляете присваивание в отношении lhs_var.
    Вам следует изменить свой код так, чтобы вызов функции происходил перед индексированием и присваиванием, т.е.

    temp = rhs_expr
    lhs_var[lhs_expr1][lhs_expr2] = temp

    То же самое применимо, если одно из выражений слева содержит вызов функции,
    которая пытается модифицировать lhs_var.

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

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

  • Библиотечные подпрограммы: put_screen_char(), get_screen_char(), save_text_image() и display_text_image() теперь воплощены для консоли Windows текстового режима. Эти функции теперь работают на всех платформах.
    Предложено С.К.Лестером.

  • Транслятор: Все файлы, которые вам необходимы для трансляции программ Euphoria на C, теперь включены в главные пакеты для DOS/Windows и Linux/FreeBSD. Вам теперь нужно будет побеспокоиться только о поддерживаемых бесплатных компиляторах C и получить их отдельно у их производителей.

    Транслятор: бесплатный общественный транслятор (ec.exe, ecw.exe, ecu) теперь выдает операторы Euphoria как комментарии в генерируемом коде C. Поддержан также режим trace(3) для отладки. При регистрации транслятора будет заблокирована рекламная заставка RDS, которая выводится программой, откомпилированной с бесплатной версией транслятора.

  • Транслятор: некоторые новые оптимизации будут повышать скорость и снижать размер кода C. Например, блок кода:
            if выражение then
               ...
               много операторов кода Euphoria
               ...
            end if
    
    будет полностью удаляться, если транслятор определит, что выражение всегда будет выдавать ноль (ложное значение). Такие случаи могут вести к дальнейшей оптимизации, когда целые подпрограммы удаляются за ненадобностью, так как в коде не происходит их вызовов. Примером, где подобные вещи могут быть полезными, являются многоплатформенные программы, в которых на разных платформах исполняется свой отличающийся код, т.е. код типа
            if platform() = DOS then ...
    
    while выражение и elsif выражение также могут быть оптимизированы этим путем. Если выражение всегда истинно, проба if/while/elsif и последующий оператор перехода могут быть удалены из кода С.

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

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

  • Транслятор: транслятор для Windows имеет новый режим "-con", предназначенный для генерирования консольных приложений. Режим поддержан со всеми тремя компиляторами C для Windows.

  • Транслятор: после успешного построения .exe (или .dll) файла, emake.bat теперь удаляет все .c и .h файлы, которые были созданы транслятором. Эта мера поддерживает порядок в каталоге с вашим кодом.

  • Установочная программа для DOS/Windows автоматически создает exwc.exe, так же как и exw.exe.

  • ed.ex: ed.bat изменен. Теперь он запускает ed.ex с exwc.exe. Вместо использования control-Home/control-End для перемещения по программе используйте control-t/control-b. На платформе Windows XP это изменение даёт ed и более быструю реакцию на клавиатуру, и полную поддержку для длинных имён файлов.

  • ed.ex: вызов free_console() осуществляется в самом конце программы, так что вы не будете видеть "Press Enter", как это случается на некоторых системах Linux.

  • интерпретатор exw теперь не выводит пустое консольное окно при исполнении trace(3).

  • pretty_print() имеет новый режим для ограничения числа выводимых строк.

  • Оба типа наклонной черты (передняя и обратная) теперь полностью поддержаны в именах пути на платформах DOS и Windows. Обратная является стандартом, но поскольку Windows поддерживает в большинстве случаев и переднюю, Euphoria также поддерживает теперь обе во всех ситуациях, а не только в нескольких редких случаях, как это было ранее. На Linux и FreeBSD поддержана только передняя наклонная черта.

  • режим -m486 удален из пакетного файла gnuexu, используемого для построения интерпретатора Euphoria на Linux. Он вызывал предупреждения и не является необходимым.

  • исправлена ошибка: "with profile" и другие подобные операторы with/without вызывали сообщение об ошибке, если за ними немедленно, без пробела, следовали символы комментария.
    Благодарности Даниэлю Клуссу.

  • исправлена ошибка: ex.err иногда выдавал неверное значение для переменной цикла for, если цикл for использовался во время рекурсивного вызова.
    Благодарности Питу Ломэксу.

  • исправлена ошибка: на Windows, и при использованuи интерпретатора, и транслированного кода, откомпилированного с WATCOM, dir() вызывала аварийную остановку, если получала аргумент, заканчивающийся на "*.". Это происходило из-за ошибки в функции WATCOM, использовавшейся для реализации dir().
    Благодарности Даниэлю Клуссу.

  • исправлена ошибка: в версии 2.4, на ME/98/95, аргумент для dir() не мог быть длинным именем файла (или каталога). Это работало в версии 2.3. (Примечание: на XP это не может быть длинным).
    Благодарности Ранджи и Юргену Люфье.

  • исправлена ошибка: Транслятор. На Windows, когда вы создаете Euphoria .dll-файл, глобальные подпрограммы требуют вызова с использованием правил соглашения __stdcall. Тем не менее, непрямые вызовы этих подпрограмм через call_func() и call_proc() изнутри того же самого .dll-файла использовали соглашение __cdecl.
    Благодарности Энди Серпа.

  • исправлена ошибка: сообщение об ошибке, якобы относившееся к "printf()", в действительности должно было бы относиться и теперь относится к "sprintf()".
    Благодарности Элу Гетцу.

  • исправлена ошибка: safe.e - запись пустого ряда в 1-байтный блок выделенной памяти вызывала ложное сообщение об ошибке, т.е. вариант allocate_string("") не работал.
    Благодарности Берни Райану и Джозефу Джиндре.

  • исправлена ошибка: если вызывалась функция repeat() с числом повторений, очень близким к максимальной величине типа integer Euphoria (1073741823), вы получали аварийную остановку от машины. Теперь это приведёт к выдаче сообщения "Out of memory" от Euphoria.
    Благодарности Бобу Элиа.

  • исправлена ошибка: Транслятор: в некоторых случаях, при построении dll с помощью транслятора, WATCOM C выдавал сообщение об ошибке "statement required after label" вблизи выхода из EuInit(). Lcc также жаловался. Borland C не жаловался и всё работало нормально.
    Благодарности Мэттью Левису.

  • исправлена ошибка: Интерпретатор: в программах, превысивших размер около пары тысяч операторов, операция присвоения с индексацией слева (например, x[i] -= y) могла вызывать аварийную остановку от машины. Шанс такого развития событий составлял около 1 на 1000. Любое изменение программы, которое сдвигало положение аварийного оператора в памяти, приводило к исчезновению ошибки. Эта ошибка скрывалась в коде с января 1999 (версия 2.1 альфа). Транслятор не был затронут.
    Благодарности Питу Ломэксу.

  • исправлена ошибка: gets(). На Windows, Linux и FreeBSD, при чтении стандартного входа, когда входная строка превышала по длине 1040 символов, функция gets() устанавливала 1041-ый символ в 0. На DOS всё было в порядке, как и при чтении других файлов, а не стандартного входа.

  • исправлена ошибка: EDS: когда функция db_open() открывала файл базы данных, но отказывалась установить исключительный или общий замок на файл, она пренебрегала закрытием файла перед выдачей кода отказа.

  • исправлена ошибка: ttt.ex - умеренно-длинное имя игрока повреждало игровую сетку.

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

  • исправлена ошибка: Транслятор - диапазон выдаваемых величин, свойственных функции getc(), был [0,255]. Он должен быть [-1,255].

  • исправлена ошибка: Транслятор - отказывался освободить память, занятую переменной цикла for, когда оператор return выполнялся изнутри цикла for, а переменная цикла имела нецелую величину. Подобная проблема могла возникать и для операторов ELSE, EXIT или END WHILE, следовавших немедленно после цикла for, а переменная цикла не была целочисленной.

  • Документация: добавлен документ Сценарии CGI (Web-приложения), разрабатываемые на Euphoria..

  • Документация: документирована функция db_rename_table(). Она случайно оставалась неохваченной документацией EDS.
    Благодарности Кену Родесу.

  • Документация: Отмечено, что строки формата в процедуре pretty_print() могут иметь дополнительный текст одновременно с собственно форматом.
    Благодарности Юргену Люфье.

  • Документация: Справочное руководство теперь отмечает, что шестнадцатеричные числа, такие как #FFFFFFFF, никогда не рассматриваются как отрицательные.
    Благодарности Юргену Люфье.

  • Документация: sprintf()/printf() - отмечено, что -1 печатается как FFFFFFFF в формате %x.
    Благодарности Юргену Люфье.

 
Версия 2.4 Официальный выпуск, 3 июля 2003 г.:

  • define_c_proc() и define_c_func() - расширены возможности, в добавление к определению подпрограмм C во внешних библиотеках .dll и системных библиотеках Linux, вы теперь можете определять аргументы и выдаваемую величину для подпрограммы машинного кода, которую ваша программа размещает в своей собственной памяти. Вы можете вызывать подпрограмму машинного кода с помощью c_proc() или c_func().
    Благодарности Даниэлю Клуссу.

  • Улучшение производительности: get4() и put4() в database.e были слегка ускорены. Эти функции весьма важны в плане общей скорости управления базой данных EDS.
    Благодарности Дереку Парнеллу.

  • Улучшение производительности: get_bytes() теперь значительно быстрее, если число запрошенных байтов существенно превышает число байтов, остающихся в файле.
    Благодарности Пьеру Фиддема.

  • Транслятор: При трансляции громадной подпрограммы Euphoria (много сотен операторов Euphoria), транслятор теперь будет выдавать вызовы к некоторой другой подпрограмме, но не задавать ряд операторов C. Такой подход снижает шансы превышения лимита размера подпрограммы, предусмотренного компиляторами С (особенно Watcom C). Снижается при этом и размер файла .exe. Эта другая подпрограмма чаще может оказаться в буфере, чем ряд операторов, но разница в скорости при этом не слишком значительна.

  • Исходный код интерпретатора: в файле watexw.bat добавлен аргумент runtime windows=4.0 в команде link при компоновке exw.exe.

  • Добавлены некоторые проверки допустимости величин аргументов и выдаваемого типа в вызовах define_c_func() и define_c_proc().

  • Сообщения о ряде ошибок при использовании идентификаторов пространства имен сейчас более информативны.

  • Учебная программа filesort.ex изменена с целью лучшей адаптации её к Linux и FreeBSD.

  • По умолчанию, safe.e теперь выполняет более широкую проверку выделенной памяти на платформе WIN32. Программы Windows часто обращаются к памяти, которая не была выделена функцией Euphoria allocate().

  • исправлена ошибка: когда заданная константа с плавающей точкой в программе Euphoria была больше некоторой величины около 1e308, транслятор мог выдавать "inf" в init_.c. Это заставляло компилятор C останавливаться с сообщением об ошибке в определении идентификатора.
    Благодарности Юргену Люфье.

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

  • исправлена ошибка: в определенных случаях, когда программа Euphoria обменивалась данными Euphoria с .dll, написанной на Euphoria, память, занятая данными, могла не освобождаться (до окончания прогона программы).
    Благодарности Вэйну Оверману (Euman).

  • исправлена ошибка: если вы использовали "asm" в вашей программе как имя частной переменной или аргумента, Транслятор выдавал "_asm" в код C. Такое поведение недопустимо в отношении ряда компиляторов C. Транслятор теперь избегает использования "_asm", "_try", "_Seg16", "_stdcall" и ряда других подобных зарезервированных имен компиляторов C.
    Благодарности Джорджу Пападопулосу и Мэтту Левису.

  • исправлена ошибка: если параметр HOT_KEYS в ed.ex был установлен на FALSE, то Esc h Enter не выдавало приглашение help.
    Благодарности Дж. Брауну.

 
Версия 2.4 Бета-выпуск, 10 апреля 2003 г.:

В этом выпуске обновлены продукты Интерпретатор Euphoria , Транслятор с Euphoria на C , и Исходный код интерпретатора для Windows, DOS, Linux и FreeBSD.

Новые возможности

  • bind и shroud теперь имеют опцию -out для задания выходного файла, так что вас могут и не приглашать отдельно для этого, если вы не хотите.
    Благодарности Джонасу Темплю, Русти Дэвису и другим.

  • bind и shroud теперь имеют опцию -quiet, которая подавляет обычные сообщения и статистику, которые приводили к всплытию окна консоли. Выводятся только сообщения об ошибках.
    Благодарности Джонасу Темплю.

  • Сообщение об ошибке, которое выпускалось при обращении к глобальному идентификатору, определённому в двух или более файлах, теперь даёт вам список всех файлов, в которых этот идентификатор был определён.
    Благодарности Дереку Парнеллу и Ирву Маллинсу.

  • Транслятор: во многих случаях код C, генерируемый для функций remainder(), compare() и целочисленного умножения, теперь меньше по объему и быстрее.

  • exw, ecw -wat: высвобождение памяти из-под большого числа малых объектов (атомы или короткие ряды) теперь производится значительно быстрее, чем это было в 2.4 альфа.
    Благодарности Энди Серпа. (Заметьте, что выделение памяти под большое число малых объектов в exw или ecw -wat стало значительно быстрее в 2.4 альфа и остаётся таким).

  • При создании файла ex.err все предупредительные сообщения теперь выводятся списком в конце файла ex.err.
    Благодарности Элу Гетцу.

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

  • Новый значок: на платформе Windows библиотечные файлы Euphoria теперь помечаются значком, который представляет собой чёрно-белую версию значка Euphoria E). Это позволяет вам легко различать библиотечные файлы Euphoria от программных файлов.
    Благодарности Вольфгангу Фритцу.

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

  • Система управления базами данных Euphoria (EDS): db_rename_table() теперь проверяет, существует ли заявленное новое имя таблицы и только потом переименовывает таблицу.
    Благодарности Майку Нельсону.

  • Первое значение, выдаваемое rand() (при отсутствии set_rand()), теперь ещё более "случайное".
    Благодарности Аку.

Исправление ошибок

  • исправлена ошибка: из-за изменения, сделанного в 2.4 альфа, функция dir() для Borland и Lcc присоединяла символы атрибутов (если были) к полю имени.
    Благодарности доктору Джуану Р. Гергуйела.

  • исправлена ошибка: не вырабатывалось сообщение об ошибке, когда за ',' немедленно следовала ')' в списке определения аргументов подпрограммы.
    Благодарности Брэгу Морису.

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

  • исправлена ошибка: repeat(0, size), где size было очень большим положительным числом с плавающей точкой, в сообщении об ошибке выводилось: "repetition count must not be negative". Теперь выводится: "repetition count is too large".
    Благодарности Мартину Стэкону.

  • исправлена ошибка: machine_proc(x, 5), где x было очень большим числом с плавающей точкой, в сообщении об ошибке выводилось: "integer was expected, not a sequence". Теперь выводится: "The first argument to machine_proc/func must be a small positive integer".
    Благодарности Мартину Стэкону.

Версия 2.4 Альфа-выпуск, 21 февраля 2003 г.:

Новые возможности

  • Большинство исключительных ситуаций машинного уровня (peek/poke по неправильным адресам и т.д.) в главной программе и в .dll теперь фиксируется exw и exu и вызывает остановку программы с сообщением об ошибке обычным путем, с полной трассой и дампом в файл ex.err. Это значительное усовершенствование по сравнению с таинственными сообщениями машинного уровня, которые вы привыкли получать (и всё ещё получаете, используя компилирующие языки и большинство интерпретаторов) о "segmentation violation", "illegal instruction" и т.д.
    Благодарности Мартину Стэкону.

  • В дополнение к соглашению __stdcall теперь поддержано и соглашение C __cdecl для вызовов подпрограмм C в .dll, а также для обратных вызовов подпрограмм Euphoria из кода C.

  • Поддержка Euphoria для длинных имен файлов DOS распространена на Windows XP.

  • Трассировщик теперь отображает большие ряды в новом формате pretty-print на отдельном вызываемом экране. Вы можете прокручивать весь ряд.

  • Процедура pretty_print() добавлена в стандартную библиотеку misc.e. Она позволяет отображать объекты Euphoria в очень удобном структурированном формате с множеством режимов форматирования.

  • Формат pretty-print внедрен для рядов в файле ex.err, для команды ? и для db_dump().

  • Система управления базами данных Euphoria (EDS): Новая подпрограмма db_rename_table(name, new_name) добавлена в библиотеку database.e. Эта подпрограмма представлена Джоудом Фергюссоном и используется с минимальными изменениями.

  • Linux/FreeBSD: system() больше не инициализирует curses, когда консольное окно ещё отсутствует.
    Благодарности Даниэлю Джонсону.

  • Глубина вложения библиотек увеличена до 30 (с 10).
    Благодарности Тони Шкода.

  • Имена путей в операторе include могут быть взяты в двойные кавычки, так что имена с пробелами теперь будут обрабатываться правильно. Это было реализовано уже для версии 2.3, но не было задокументировано.

  • exw.exe и любые исполняемые файлы, выработанные Транслятором с Watcom, теперь имеют код подсистемы 4.0 вместо 3.1. Тем самым, в некоторых случаях улучшается внешний вид графического интерфейса (GUI) Windows. С помощью утилиты make31.exw вы можете создать версию exw.exe, которая обеспечит вам интерфейс Windows GUI 3.1 в маловероятном случае наличия проблем совместимости с Euphoria 2.3.
    Благодарности Вэйну Оверману, Брайану Брокеру и другим, рекомендовавшим это изменение.

  • makecon.exw - создаст для вас версию exw.exe, которая функционирует как консольное приложение - консольное окно не всплывает, а stdin/stdout (стандартные вход/выход) могут быть перенаправлены.

  • trace(1 2 and 3) теперь разрешены с bind -clear (но ещё не разрешены с shrouded bind по соображениям безопасности).
    Благодарности Джонасу Темплю.

  • Транслятор: вы теперь можете изготовить .dll Euphoria, используя Lcc, и обращаться к ней из интерпретируемой программы, испоняемой под exw, и транслированных программ, полученных с Borland и Watcom. Ранее главная программа требовала компиляции также с Lcc.

  • Транслятор не использует больше опции -m486 или -mpentium, доступные с GCC и DJGPP. Эти опции вызывали предупреждающие сообщения, а компилятор C, очевидно, сам устанавливает модель машины правильно.
    Благодарности Кену Родесу.

  • Транслятор будет теперь выполнять автоматические вызовы типов, определённых пользователем, в необычном случае, когда подпрограмма типа имеет сторонние эффекты (манипулирует глобальными переменными, производит ввод/вывод и т.д.).
    Благодарности Энди Серпа.

  • euphoria\demo\bench сравнивает Интерпретатор Euphoria и Транслятор с Euphoria на C с более чем 20-ю другими интерпретирующими языками.

Перенесение Euphoria на другие платформы

  • Мы перенесли Интерпретатор и Транслятор на FreeBSD. Исходный код теперь имеет ряд директив
    C #ifdef для FreeBSD.

  • Энди Крэнстон перенёс Euphoria на HP Unix, и планирует то же самое сделать для Sun Unix.

Оптимизация

- Интерпретатор -

  • Типичные большие сечения теперь выполняются быстрее. Примерно на 30% быстрее для сечений с длиной от 100 до 50000. (Для меньших отрезков преобладают потери на накладные расходы, а для больших начинает сказываться недостаточность буферизации.) Предполагается при этом, что отрезки в основном целочисленные (обычно так и есть), и выполняется актуальное копирование данных в отрезок (обычно так и есть, начиная с v1.4b).

  • Операторы, которые содержат множественные & конкатенации, теперь выполняются значительно быстрее.
            т.е. вместо:
                 result = a & b & c
                 что расчитывалось ранее как:
                   1. копирование a и b в temp
                   2. копирование temp и c в result 
                      (a и b копировались дважды!)
      
                 Мы теперь делаем:
                   1. копирование a и b и c прямо в result
      
    Таким образом, мы меньше копируем и создаем меньшее число вспомогательных рядов. Чем больше операторов & содержится в выражении, тем большим получается выигрыш в скорости, т.е. с 3 операторами & некоторые данные копировались трижды и т.д. Джоуд Фергюссон указал, что операция была медленной.

  • Накладные расходы, сопровождавшие вызов и возврат из подпрограмм обратного вызова Euphoria, снижены примерно на 10%.

  • В exw и ecw -wat, выделение памяти под большое число объектов стало выполняться быстрее. Выигрыш может быть потрясающим, если речь идёт о сотнях тысяч или миллионах объектов.

  • Лучшая UPX-компрессия уменьшила на несколько килобайтов exw.exe по сравнению с версией 2.3 (даже при том, что в версии 2.4 добавлен новый код).
    Благодарности Вольфгангу Фритцу.

- Система упраления базами данных Euphoria -

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

  • Выделение нового пространства в базе данных выполняется намного быстрее, выигрыш до 4-х кратного, особенно, в больших базах данных с длинным списком свободных блоков.

  • Вставка и удаление записей в громадных таблицах теперь намного быстрее. В сочетании с ускорением сечений в Euphoria 2.4, библиотека database.e теперь на 25% быстрее управляется с таблицей в 10.000 записей и более чем в 3 раза быстрее с таблицей, содержащей 100.000 записей. Это заметно в тех случаях, когда вы пытаетесь вставлять/удалять сотни записей в секунду. В типичной ситуации с оператором, вводящим данные через графический интерфейс, вы могли никогда не заметить потерь времени на вставку/удаление одной записи (несколько миллисекунд). Дерек Парнелл указал на медленность автоматических операций.

  • Функция db_select_table() заметно ускорена.

  • Функция get4() ускорена, что ускоряет все остальные процессы.

- Другие улучшения -

  • Функция bytes_to_int() в machine.e теперь вдвое быстрее.

  • Функция gets() на 5% быстрее.

  • Функции sort() и custom_sort() на несколько процентов быстрее.
    Благодарности Рикардо Форно за пересмотр алгоритма сортировки Shell.

  • Некоторые дополнительные усовершенствования были внесены в Транслятор. В результате вырабатываются более компактные и быстрые исполняемые файлы, чем в версии 2.3. Транслятор 2.4 успешно проверен на сотнях тысяч строк кода Euphoria и теперь мы не знаем о каких-либо ещё ошибках генерации кода. С рядом результатов проверки производительности Транслятора вы можете ознакомиться в каталоге euphoria\demo\bench.

Исправление ошибок

- Исходный код -

  • исправлена ошибка: пакетный файл gnubsd ошибочно ссылался на syncolor.c и syncolor.o. (gnuexu был в порядке.)

  • исправлена ошибка: Карл Бошерт указал на необходимость изменения кода C, порождающего poke(), для обеспечения работоспособности на новейшей версии Lcc. Изменениями затронуты Транслятор (с последней версией Lcc) и Исходный код интерпретатора (компилируемого с Lcc).

- Интерпретатор -

  • исправлена ошибка: в ситуации, когда подпрограмма обратного вызова косвенно вызывала сама себя рекурсивно, могла иметь место аварийная остановка программы.
    Благодарности Мэттью Левису и Джорджу Пападопулосу.

  • исправлена ошибка: в циклах for верхнего уровня программы (вне любых подпрограмм), в которых переменная цикла увеличивалась целочисленными шагами, отличающимися от +1, действующей по умолчанию, выполнение end for занимало в 15 раз больше времени, чем необходимо на самом деле, из-за ошибки возникшей в результате правок по другой ошибке, сделанных в ноябре 1999. Только непосредственно end for сам по себе был медленным, а не код, находящийся в теле цикла. Антоин Таммер обнаружил этот факт.

  • исправлена ошибка: на XP, когда вы открываете новое окно DOS, высота которого превышает 25 строк, виртуальная DOS-машина (VDM) в первый момент затрудняется определить правильное число строк. В первый момент (только лишь), когда вы запустили программу Euphoria в этом окне, если исполнение началось у самого низа экрана, выводимая информация могла исчезнуть, VDM или Euphoria могли сообщить об ошибке и т.д. Интерпретатор Euphoria (ex.exe) теперь обнаруживает редкие случаи затруднений VDM и очищает экран, что решает проблему. Похожая ситуация имела место на NT и была исправлена несколько лет назад.

  • исправлена ошибка: интерпретатор сообщал в файле ex.err об ошибках в обратных вызовах, ссылаясь на "call back from Windows", даже если это случалось на Linux или FreeBSD. Теперь на этих системах в сообщении говорится о "call-back from external source".
    Благодарности Питу Эберлейну.

  • исправлена ошибка: когда библиотечный файл не удавалось найти, сообщение об ошибке относилось к "euphoria\include". Теперь в рассчёт принимается %EUDIR%\include.

  • исправлена ошибка: сообщение об ошибке для without profile_time теперь не будет генерироваться на платформах, где режим профилирования времени не поддержан.
    Благодарности Алану Оксли.

- Транслятор -

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

  • исправлена ошибка: команда DJGPP strip.exe в emake.bat могла отказывать на XP,2000 из-за ошибки в DJGPP. Теперь emake.bat имеет: SET LFN=n, чтобы обойти ошибку в strip.exe.

  • исправлена ошибка: транслированный код, компилируемый с Borland C, не порождал INF'ы и NAN'ы, как это делается с Watcom и Lcc. Вместо этого программа рушилась по переполнению диапазона чисел с плавающей точкой (более 1e308), или выдавалось неопределённое число с плавающей точкой. Исходный код интерпретатора был также откорректирован, и вы можете, если желаете, компилировать exw.exe, используя Borland.
    Благодарности Энди Серпа.

  • исправлена ошибка: в первом основном блоке (т.е. перед любыми управляющими операторами) подпрограмм Euphoria peek4u(), peek4s() и операции "прибавить целую 1" иногда допускалась небрежность в проверке отсутствия переполнения диапазона 31-битного целого при присвоении значения частной переменной, объявленной как атом, если эта переменная не была предварительно инициализирована.
    Благодарности Майку Даффи.

  • исправлена ошибка: в процессе присвоения значения элемента ряда переменной, объявленной как целое, и уже имеющей величину целого в данной точке программы, случай, когда элемент с величиной целого хранится в форме C double, отрабатывался не всегда корректно.

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

  • исправлена ошибка: библиотеки Euphoria .dll не всегда корректно освобождали память, выделенную главной программой и наоборот. Память могла расходоваться, что вызывало аварийную остановку машинного уровня.
    Благодарности Г. У. Оверману.

    Примечание: В развитие этого исправления, любые библиотеки Euphoria .dll, построенные с Транслятором версии 2.3 или более ранней, должны быть перетранслированы с 2.4 и перекомпилированы, чтобы не иметь конфликтов с интерпретируемым или транслированным кодом Euphoria 2.4 (или старше). Новые .dll, построенные с версией 2.4 (или старше), не будут работать с интерпретатором версии 2.3 или более ранней, за исключением некоторых тривиальных случаев.

  • исправлена ошибка: процедура sleep(x) при использовании библиотеки времени исполнения Lcc вызывала "сон" только на x миллисекунд. Теперь "сон" длится x секунд, чтобы соответствовать обещаниям документации Euphoria для sleep().
    Благодарности Вольфгангу Фритцу.

  • исправлена ошибка: на некоторых версиях Linux транслированная/компилированная программа Euphoria могла аварийно останавливаться при перенаправлении стандартного выхода, например, для CGI.

  • исправлена ошибка: на некоторых версиях Linux, транслированная/компилированная программа Euphoria могла аварийно останавливаться при вызове machine(M_GET_SCREEN_CHAR, {row, col}).

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

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

- Биндер -

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

  • исправлена ошибка: отчет об использовании bind/shroud сообщал "-scramble" вместо "-clear" и имел другие ошибки на Linux/FreeBSD.
    Благодарности Крису Бенслеру.

  • исправлена ошибка: в режиме bind/shroud -clear могла быть не переименована частная переменная, когда более ранняя местная переменная бывала переименована тем же самым именем.
    Благодарности Питу Ломэксу.

  • исправлена ошибка: при отсутствии в последней строке библиотечного файла символа новой строки \n, bind/shroud -clear могли не оставить некоторый пробел перед следующим словом в главном файле.
    Благодарности Питу Ломэксу.

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

- Библиотечные подпрограммы -

  • исправлена ошибка: функция walk_dir("/",...) отказывала на Linux.
    Благодарности Рикардо Форно.

  • исправлена ошибка: функция db_compress() из состава EDS имела ошибку отработки пути, если имя файла базы данных или полный путь к нему содержали пробел. Пробелы допускаются теперь на всех платформах, исключая DOS.
    Благодарности Virtual B.

  • исправлена ошибка: функция wildcard_file() в euphoria\include\wildcard.e теперь чувствительна к регистру на Linux/FreeBSD (но всё ещё нечувствительна на DOS/Windows).
    Благодарности Джеффу Филдингу.

  • исправлена ошибка: функция dir() не всегда корректно выдавала размер файла для размеров, превышающих 1 Gb. Теперь она работает до 4 Gb. Арифметика, выполнявшаяся на размере файла, вероятно, отказывала.
    Благодарности Рикардо Форно.

  • исправлена ошибка: функция where() не всегда корректно выдавала позицию в файлах с размером, превышающим 1 Gb. Арифметика, выполнявшаяся на позиции, вероятно, отказывала. Теперь она работает до 2 Gb.

  • исправлена ошибка: ex, exw, ec -wat, ecw -wat: функция dir() для DOS и Windows не отрабатывала символы догадок правильно, если косая черта завершала имя пути к файлу или каталогу.
    Благодарности Юргену Люфье.

- Работа с пространствами имен -

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

  • исправлена ошибка: при объявлении типа аргумента с использованием глобального типа, определённого в двух и более файлах, вы получили бы не вполне ясное сообщение об ошибке, утверждающее "a type is expected here". Теперь вы будете получать сообщение, указывающее, что для имени типа требуется идентификатор пространства имен, чтобы исключить возникший конфликт.
    Благодарности Юргену Люфье.

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

- Демонстрационные программы -

  • исправлена ошибка: в window.exw, демо-программе, allocate(64) и allocate(16) вызывали утечку памяти.
    Благодарности Вольфгангу Фритцу и Джоуду Фергюссону.

- Трассировка/Отладка -

  • исправлена ошибка: при исполнении trace(0), сопровождавшейся позже trace(1) без промежуточных операций вывода на экран между ними, величины некоторых переменных на экране трассировки не обновлялись.
    Благодарности Ricardo Forno.

  • исправлена ошибка: режимы with trace / with profile / trace(3), заданные все одновременно, приводили к выдаче хаотического набора строчек кода в файл ctrace.out.
    Благодарности Кэт.

Версия 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() и 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 - константа 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).