Версии AWL интерпретатора:
0.5.3 — 0.5.7
Версия 0.5.7:
Довольно много изменений и добавлений. Из наиболее
существенных:
- Числовые
литеральные операции: min_int / max_int,
inf_pos / inf_neg / nan.
- Ряд
новых, довольно полезных, операций над строками:
инверсия строки (s_rev), преобразование
диапазона кодов в строку (s_range), поиск в строке по функциональному
критерию (s_span[in|ex] и s_rspan_[in|ex]), фильтрация символов (s_filter_[in|ex]) и их подсчет (s_count_[in|ex]) по критерию. Явная установка кодовой страницы для
преобразования ASCII
<-> Unicode
(codepage).
- Регулярные
выражения / образцы добрались до относительной зрелости. В частности, кроме
проверки на соответствие (rx_match),
работает также поиск (rx_findfirst / rx_findlast).
- Непосредственно
поддерживается преобразование хэшей из/в открытые списки (h_save / h_load).
- Операции
для массивов: вставка (a__insert) и удаление (a__delete).
- Новые
функциональные операции: f_ident (идентичность); f_compose (функциональная
композиция); f_and и f_or (аналоги c_and и c_or для функторов, предикатов,
возвращающие предикат).
- Запросы
к окружению и системе:
_arglist(): возвращает список аргументов,
переданных модулю;
_environ():
возвращает словарь, содержащий системное окружение;
_version():
текущая версия интерпретатора в виде списка.
- Несколько
новых функторов, связанных с графикой:
graphics!!with_debug (): оболочка для отладки выполнения графических
примитивов;
graphics!!clip_area (): также оболочка, устанавливает прямоугольную
область отсечения;
graphics!!text_box (): оболочка, задает прямоугольную
область относительно которой выводится текст;
Версия 0.5.6:
(опубликована на CD для
«Мир ПК», №12 / 2007)
- Реализованы
примитивы для преобразования экранных координат по сетке graphics!! (map_grid_point, map_grid_rect). (Первый
преобразует координаты точки в координаты ячейки сетки, второй — координаты
прямоугольника в диапазоны координат по горизонтали/вертикали.)
- Таймеры
(winternal!!timer_control) начали
работать удовлетворительно.
Версия 0.5.5:
- Появилась
возможность явного объявления глобальных переменных:
:[var1 var2 … varN];
- Реализован
альтернативный синтаксис для конструктора списков: Head :: Tail равносильно (Head, Tail).
- Новые
операции над списками: l_filter_[in|ex], l_count[in|ex]; над массивами: a_copy.
- Примитив
rx_length для регулярных выражений.
- Пока
очень экспериментальная реализация
экспорта-импорта модулей.
- Появилась
начальная поддержка растровых изображений (image_[create|destroy|blit], with_image).
- Поддержка
событий колеса мыши (Widget!!on_mouse_wheel)
- Экспериментальная
поддержка событий таймера (Widget!!on_timer) и ожидания (winternal!!sleep).
- Реализован
ряд операций с текстовым курсором (кареткой): winternal!! (caret_shape,
caret_loc).
- Немного
пересмотрен формат системного листинга.
Версия 0.5.4:
- Реализована более строгая обработка ошибок. Многие
некорректные ситуации (например, использование нескалярных
типов данных там, где ожидается скаляр) теперь вызывают сообщение об
ошибке (фактически, предупреждение, т.к. оно никак не влияет на дальнейшее
выполнение кода). В некоторых случаях (напр. итераторы с
предусловием/постусловием) интерпретатор ведет себя более разумно, когда
аргумент опущен. Некорректные аргументы в l_item / l_head / l_tail теперь не вызывают сбоя.
- Ссылка на «текущий класс» (синтаксис !.)
- Имеется экспериментальная поддержка Unicode-строк (16 бит / символ).
Явно задать их в виде литералов пока нельзя: используйте для
преобразования между ASCII и Unicode строками s_retype. В большинстве бинарных строковых операций
(конкатенация, сравнение, поиск…) смешивать операнды разных типов нельзя.
Кодовые страницы также не поддерживаются (фактически, жестко задана Latin-1).
- Еще более экспериментальная
поддержка образцов (регулярных
выражений). Предназначена пока исключительно для
тестирования. Поддерживаются самые основные операции над образцами:
литеральные символы/строки (rx_char, rx_string), альтернация (rx_alt), конкатенация (rx_cat), повторение (rx_rep). Обращение к rx_match пытается сопоставить
строку с образцом.
- Списковые операции поиска по предикату: l_while/l_until, l_while_r/l_until_r.
Версия 0.5.3:
(Первая широко доступная версия.)