ENGLISH

RUSSIAN(Русский)

 

AL-IV:   История версий (2016-2017)

 

Новые версии


См. здесь

 

31.10.2017 - версия 0.84

  • Исправлено:
    • Передача в качестве параметра фиксированного массива, являющегося полем структуры (C++)
    • Передача в качестве параметра объекта NONE (C++)
    • {System_functions}.Detailed_catalog (версия C++/std::strings)
  • Некоторая оптимизация размера кода и быстродействия для C++ (с ключом /final формируется версия Release)

 

25.10.2017 - версия 0.83

  • Исправлено:
    • {Listview}.Clear(C#, C++), Set_item (C++/wx)
    • {String_functions}.Upper/Lower (C++)
    • {File_path}.Catalog (C++/std)
    • {Text_file}.Load (C++/wx - для национальных имён файлов)
    • {Date_time}.Str (C++ - использует теперь текущую пользовательскую локализацию)
    • {System_functions}.Start_program (C++/wx, Delphi)
    • {Form}.resize - не вызывается для случая Handle =0 (иначе - имеем крах программы).
  • Оптимизация размера кода для Delphi (особенно для варианта KOL)

 

22.10.2017 - версия 0.82

  • В качестве разделителя двух частей имени допускается использовать знак '\' (дополнительно к '|').
  • Трансляция кода:
    • Добавлена трансляция для кодированных символов,
    • Добавлена транслитерация окончательного кода (без такой транслитерации код был рабочий, но неудобен для чтения, т.к. все национальные символы либо удалялись, либо замещались подчеркиваниями и символами 'x'),
    • Добавлен перевод некоторых редких (и не только) ключевых слов и функций, а так же для частей слов DUMMY / TEMP.
    • Добавлена поддержка перевода целых классов. Перевод оформляется как класс, но содержит только перевод наименований функций, методов, полей, констант, записей, перечислений. Для примера см. проект: AL4\Test_projects\_Russian_code
  • Исправлено:
    • {Configuration}.Value_s (Delphi/KOL), .Delete_value (c++/wx);
    • {Configuration} - весь функционал (Java);

 

19.10.2017 - версия 0.81

  • Реализована трансляция кода, записанного с использованием национальных ключевых слов. Локализованный класс должен начинаться указанием языка в виде ['LL'] или [Language='LL'] (непосредственно перед словом CLASS / КЛАСС). Допускается смешивание в проекте классов на самых разных языках. Трансляция с русского уже доступна.
  • Реализованы классы {Tray|_icon}, {Icon} для Java (хотя с некоторыми ограничениями: прозрачность иконки, нет поддержки формата .ICO, необходимость показывать главное окно, чтобы поднять всплывающее меню).
  • Для C++ - реализации, структуры (RECORD) теперь всегда реализуются простыми структурами (struct).
  • Компилятор требует импортирования всех классов, методы которых вызываются в классе (до сих пор не требовалось, если метод вызывается через объект унаследованного типа, например).
  • Добавлены:
    • функция {File_path}.Detailed_catalog(STR Path, STR Catalog[], {file_info} Details[]);
    • метод {Control}.Clear;
  • Исправлено:
    • {Form}.Visible для Java;
    • Генерация поля структуры - фиксированного массива, размер которого определен типом перечисления (Delphi);
    • Создание экземпляра структуры, содержащего массивы (C#, C++);
    • Установка полей {Listview} (C#, Subitems);
    • Генерация передачи параметра-массива, являющегося полем структурной переменной, в функцию (на место параметра - фиксированного массива): Delphi.

 

14.10.2017 - версия 0.80

  • Добавлена возможность декларировать возвращаемый результат в методе/функции в виде
    ==> {type} RESULT|identifier, для добавления краткого комментария по возвращаемому значению.
  • Реализован вызов метода BASE для методов с параметрами. Запрещено в методах, вызывающих BASE метод не в первом операторе, использовать операторы возврата ==>.
  • Добавлены методы:
    • для рисования битмапа {Bitmap}.Draw(Canvas, Pt), Stretch_draw(Canvas, Rect); Реализовано автоматическое отображение присвоенной картинки в {Picture}.
    • {Listview}.Prevent_update, Column_width(Index_col)==> REAL, Set_column_width(Index_col, Value).
    • метод-событие {Form}.moved|_form_on_screen
  • Исправлено:
    • установка даты для {Date_picker} в версии C++(wx);
    • позиционирование всплывающего меню над {Tray|_icon} в версии для C++;
    • ошибка при обработке событий (resize) уже закрытой формы в версии для C#;
    • вызов деструкторов формы, если форма скрыта или форм несколько (C++, wx; Delphi, VCL);
    • корректный доступ к динамическому массиву вещественных за пределами массива - для Delphi;
    • корректное присваивание sender при вызове событий формы (C++(wx), C#, Delphi(KOL));
    • {Screen}.List_monitors for Delphi, KOL, VCL;
    • изменения для корректной работы модальности в некоторых окружениях (C++, wx):
      • при открытии нового дочернего модального диалога относительно формы, ранее запущенный относительно этой же формы модальный диалог автоматически закрывается (с пустой строкой в качестве ответа);
      • метод {Form}.Close игнорируется, пока у формы есть активный дочерний модальный диалог.
  • Документация перемещена на новую площадку:
    http://kolmck.ru/AL4 (домен clavier.link более не требуется, как несоответствующий имени языка).

 

10.10.2017 - версия 0.79

  • Добавлен класс {Color_console}.
  • Изменения в определении PUSH с методом:
    • PUSH и POP методы декларируются один за другим,
    • PUSH-метод имеет модификатор PUSH,
    • POP-метод имеет модификатор POP(имя PUSH-метода).
  • Использование PUSH с методом реализовано для всех поддерживаемых языков.
  • Оператор IMPORT может быть поделен на несколько. Разрешены блочные комментарии перед операторами импорта и между ними.
  • REVERT:
    • исправлено переворачивание в случае сеттера/геттера с несколькими параметрами;
    • требование не использовать в реверсируемом коде из другого метода локальные переменные заменено требованием использования тождественных локальных переменных (по именам и типам);
    • исправлено удаление методов при оптимизации, если они использовались только для переворачивания.
  • VISUAL:
    • добавлена функция New_memo(Form, Alias, Flags) с возможностью создавать мемо только для чтения и управлять его линейками прокрутки при создании.
    • добавлена функция New_read_only_edit(Form, Alias) для создания однострочного поля отображения текста (без возможности редактирования пользователем).

 

07.10.2017 - версия 0.78

  • Существенное изменение в синтаксисе языка: методы требуется начинать ключевым словом METHOD, ключевое слово STATIC более не требуется - достаточно использовать ключевое слово FUNCTION / FUN. Так же, при декларации замещенного метода достаточно слова OVERRIDE, после чего сразу следует имя функции.
  • Требование добавлять блочный комментарий в начало функции с заголовком из нескольких строк отменено.
  • Добавлено требование размещать двоеточие в отдельной строке в случаях, когда заголовок функции занимает несколько строк.
  • Добавлена функции {Screen}.List_monitors, изменены функции {Form}.Set_position, {Form}.Set_size (добавлены параметры для управления размещением на экране).
  • Добавлены функции в классе {Form}: Set_default|_button, Set_cancel|_button, Stay_on_top, Get_window_handle (для Java возвращает 0).
  • Функции для локализации переведены на C#, так что теперь сам компилятор может быть локализован.
  • Локализованы сообщения компилятора для русского языка. Для переключения языков сообщений компилятора следует использовать cmd-файлы use_language_XX.cmd (папка AL4).

 

01.10.2017 - версия 0.77

  • Правило переноса строки расширено со "...или следующая строка начинается с двойной кавычки..." до "...или следующая строка не начинается с буквы или символов '--', '{', '<', '[', '(', '.', ';', '==>' ...". Такой вариант позволяет упростить переносы строк - достаточно строки продолжения начинать с перенесённого символа арифметической или логической операции или операции отношения сравнения (кроме <, <=) или операции присваивания, т.к. он он не является буквой.
  • Добавлено требование к оформлению кода: если условие в CASE занимает более одной строки, то знак ? должен быть размещён в отдельной строке кода.
  • Блочный комментарий ------------ 'текст' должен иметь модификатор REUSED в случае, если он используется в других операторах (LIKE, REVERT).
  • Добавлен модификатор метода SETTER FOR fld/fun. Позволяет определить возможность автоматического переворачивания присваивания для поля или его сеттера (REVERT).
  • Реализован оператор REVERT (противоположен LIKE, позволяет перевернуть блок присваиваний в противоположную сторону).
  • Визуальные компоненты:
    • реализованы получение, установка шрифта, цвета для визуальных элементов (с некоторыми проблемами для Java - нет прямой поддержки Underline / Strike).
    • Добавлен класс {Dialog} (наследник от {Form}, для наследования и создания своих модальных диалогов). Модальность реализована в стиле Java - диалог делается видимым (метод Show_modal), и на этом порция кода обрывается. Ответ приходит в событии формы answer (строковое поле Answer содержит то, что передано из диалога при вызове метода ready(Answer)).

 

23.09.2017 - новая версия 0.76

  • Добавлен класс {Alien_windows} для работы с чужими окнами и приложениями (в Windows / XWindows).
  • Добавлен класс {Shortcut_info} для работы с файловыми ярлыками (Windows).
  • Добавлен класс {Icon} для загрузки / отображения иконок. В визуальном классе {Tray_icon} иконка теперь использует {Icon} и может быть изменена во время выполнения..
  • Добавлена возможность декларировать зависимости от низкоуровневых исходных файлов кода не в конфигурационных файлах проекта (директива /copy file), а непосредственно в исходных файлах, требующих добавления этих исходных кодов, от которых они зависят (директива
    NATIVE "///copy file" .
    (в том числе для случая различных расширений этих файлов может указываться расширение-маска ".*").
  • Формы:
    • Обеспечен автоматический выбор размера кнопок и меток по размеру текста (C#/C++/DelphiVCL/DelphiKOL).
    • Исправление: обеспечено размещении элементов по горизонтали для колонок, выровненных 'TOP'/'BOTTOM'.
    • Вызов автонастройки размеров колонок по событию Any_change формы улучшает внешний вид (устраняет излишние линейки прокрутки).

 

144.09.2017 - версия 0.75a

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

 

12.09.2017 - версия 0.75

  • Выполнена оптимизация операции передачи фиксированного массива в качестве параметра.
  • Исправлены проблемы с локализацией и печатью в OEM-кодировке в консоли (C++, Delphi).
  • Добавлен инструмент Dok_sources для генерации справочника по классам библиотек кода. Добавлен такой справочник на сайт. Для скачивания теперь доступен архив, содержащий документацию и справочник по классам.

 

03.09.2017 - версия 0.74

  • Для операторов SELECT / DELETE / UPDATE : в части JOIN ... ON теперь допускается любое корректное SQL-выражение (подобно WHERE). Единственное требование - в условии ON должно использоваться хотя бы одно поле присоединяемой таблицы.
  • Реализована вставка данных в BLOB-поле (только в C# - версии). BLOB-поле декларируется в записи, соответствующей таблице, как фиксированный байтовый массив, например
    BYTE Blob_field[1], в запросе задаётся как вызов метода Blob_param, например:
    ...
    stream = Read_file_stream(Photo_path)
    db << UPDATE Table,
          SET Blob_field = {db.Blob(stream)},
          WHERE ID = {Id_row}
    db.Exec

    ...
  • Добавлен модификатор функции UNSUPPORTED('text') для генерации ошибки при компиляции кода, содержащего хотя бы одно обращение к данной функции. (Наличие в классах функций, которые обращаются к не поддерживаемому методу, но сами не вызываются, не приводит к ошибке).
  • Разрешены обобщённые функции, возвращающие результат обобщённого типа {?} (но имеющие хотя бы один параметр типа {?}). Добавлены функции
    Max|imum_of_two_values({?}, {?}) ==> {?} и другие (Класс {Sorting}).
  • Документация по SQL-запросам добавлена в спецификацию (раздел Дополнительно).

 

28.08.2017 - версия 0.73

  • Реализована работа модификатора функции WAIT(метод1, метод2, ...), требующего последующего вызова одного из указанных методов ниже по коду вслед за таким методом. (Позволяет уменьшить ошибки неверного использования классов, требующих вызова некоторых своих методов в определённом порядке). Например, установка нового значения поля SQL класса {BD} имеет модификатор WAIT(Open, Open_1, Exec), что требует вызова одного из указанных методов в той же функции. А вызов Open требует последующего вызова Next.
  • Реализована секция WHERE для запросов SELECT, DELETE, UPDATE в виде SQL-подобного выражения, с проверками соответствия имен полей, алиасов таблиц и т.д. на этапе компиляции кода.
  • C++ версия {DB} теперь так же работает (используя OTLv4).

 

25.08.2017 - версия 0.72

  • Добавлен оператор LIKE функция .........'метка комментария' (позволяет сделать фрагмент кода между двумя операторными комментариями вида ------- 'метка' общим для нескольких методов, без необходимости выносить его в отдельную функцию). Операторы LIKE не могут быть вложенными, и допускается использовать фрагменты кода только из методов своего класса.
  • Добавлена возможность выполнять операцию << для объекта слева от знака операции (фактически вызывается метод Write класса, который должен принимать строковый параметр).
  • Добавлен модификатор функции WAIT(метод1, метод2, ...), требующий последующего вызова одного из указанных методов ниже по коду вслед за таким методом. Позволяет уменьшить ошибки неверного использования классов, требующих вызова некоторых своих методов в определённом порядке.
  • Добавлена декларация таблиц на базе структурного типа
    TABLE имя: {структура} ... .
  • Добавлены встроенные операции INSERT/DELETE/UPDATE/SELECT, формирующие код SQL-запросов (с синтаксисом, несколько отличным от стандарта SQL, но в основном сохраняющими структуру SQL-кода). Позволяют контролировать корректность SQL-кода, формируемого в программе, на этапе компиляции.

 

13.08.2017 - версия 0.71

  • Добавлен класс {Clipboard} (только для текста).
  • Добавлен класс {Configuration} для сохранения и восстановления настроек приложения. ДляC++ поддерживается только при использовании пакета wxWidgets.
  • Добавлен класс {Errors} для доступа к текстовым сообщениям об ошибках, формируемым при возникновении проблем (исключений в коде).
  • Добавлен класс {DB} для работы с базами данных (кроме C++, т.к. для wxWidgets нет актуальной платформ-независимой библиотеки для работы с БД).
  • Оператор PUSH может использоваться для вызова пары методов: метод, вызываемый в PUSH, должен иметь модификатор POP(method2), указывающий, какой метод (без параметров) следует вызывать по окончании блока.
  • Модификатор STORE(Parameter=value) для функции позволяет создавать автоматический целочисленный кэшируемый параметр (отдельно для каждой точки вызова функции). Параметр, указанный в скобках, передаётся скрытно, и по ссылке. Дополнительный модификатор FORGET для (другого) метода обеспечивает сброс в начальное состояние всех сохранённых STORE-параметров, при вызове FORGET-метода. Данный механизм предназначен для обеспечения эффективного доступа к именованным значениям (поля в результатах запроса, колонки в listview, и т.п.).

 

28.07.2017 - версия 0.70

  • Добавлены обобщённые статические функции (принимают параметры типа {?}, означающего произвольный тип данных, и параметры-функции).
  • Добавлен класс {Sorting} для обобщенной сортировки массивов алгоритмом qsort (но без рекурсии, переделанной в циклы).
  • Запрещена операция IN/!IN для проверки строки в массиве из единственного элемента (например, s IN ["0123456789"])
  • Добавлен визуальный класс {Tray_icon} - для C#, Delphi, C++.
  • Обеспечена возможность запуска единственной невидимой формы.
  • Устранен ряд проблем, связанных с излишней оптимизацией кода в некоторых случаях (нежелательное удаление и инлайнинг функций).
  • В визуальной библиотеке удалены явные параметры Sender / Alias из определения событий (перенесены в поля sender и sender_alias формы).
  • Ключевое слово DEBUG строчными буквами (debug) так же определяет отладочный блок, но его код никогда не компилируется (может использоваться для временного отключения отладочных блоков).
  • Добавлен оператор DEBUG IMPORT (записывается после IMPORT), для указания модулей, требующихся только для компиляции блоков DEBUG/debug.

 

09.06.2017 - версия 0.63

  • Полная поддержка платформы Win32/Delphi/KOL (версия KOL 3.23), включая OpenGL.
  • Сравнение размеров исполнимого файла для тестового визуального приложения (Library\Visual\Test_project):
    Платформа Размер, Кб После сжатия UPX
    C# 152 152 (upx неприменим)
    C++ (wxWidgets) 6130 6130 (неприменим)
    Delphi (VCL) 652 239
    Delphi (KOL) 166 64
    Java (awt) 209 (jar) неприменим


    То же для тестового OpenGL-приложения:

    Платформа Размер, Кб После сжатия UPX
    C# 1280  
    C++ (wxWidgets) 6050  
    Delphi (VCL) 508 197
    Delphi (KOL) 143 58
    Java (awt) 188 (jar)  


    Аналогичное сравнение для невизуального тестового приложения (Test_projects\Complex test):

    Платформа Размер, Кб После сжатия UPX
    C# 103  
    C++ (wxWidgets) 1850  
    C++ (stdStrings) 313  
    Delphi (VCL) 139 57
    Delphi (KOL) 70 31
    Java (awt) 67 (jar)  

 

18.05.2017 - версия 0.62

  • Запрещено использовать для локальных переменных методов имена, пересекающиеся с именами полей класса.
  • Добавлена поддержка платформы Win32/Delphi/KOL (версия KOL 3.23) - на данный момент только не визуальной его части (работа продолжается).

 

09.05.2017 - версия 0.61

  • Добавлен механизм локализации строковых констант с помощью псевдо-функций _id(строка) или строка._id и класс {Localize_str} для управления локализацией и для загрузки языковых ресурсов из текстовых файлов.
  • Во всех случаях не присвоенное значение функции считается ошибкой.

 

28.04.2017 - версия 0.60

  • Инструментальное приложение Test_report может отображать автоматически созданные html-отчёты по результатам тестирования (опция компиляции /t SHOW).
  • Добавлена форма оператора
    CASE ? [выражение1] ? ...
           [выражение2
    ] ? ...
           ...
           ELSE ... ;

    - с последовательным вычислением булевых выражений - до первого совпадения, с выполнением соответствующей ветви (соответствует if ... else if ... else if в классических языках программирования).

 

25.04.2017 - версия 0.59

  • Добавлена функция Platform_info: возвращает информацию о целевом языке, библиотеке и ОС, в которой выполняется приложение
    (например: "Java;AWT;Windows" или "C++;wxWidgets;Linux")
  • Изменения в синтаксисе RESTRICT (ограничений на параметры):
     
    • Добавлена форма IF x IN ..., AND y IN ..., AND z IN ..., THEN ...
    • форма THEN x IN {a, b, c} заменена на IN x {a}, OR IN {b}, OR IN {c}; В том числе допускается использование ... IN {a}, OR IN [...] в одном утверждении на ограничение константных параметров.
  • Из подсчёта операторов в блоке исключены накопительные присваивания к ранее присвоенным переменным (R = ... R += ... R *= ...). Цель - поощрять разбиение сложных выражений на несколько более простых, вмещающихся в строку.
  • Добавлена опция /op|timizations +/-/flags, реализован ряд локальных и глобальных оптимизаций кода.
  • Добавлено инструментальное приложение Test_report для упрощения анализа результатов тестирования.

 

09.04.2017 - версия 0.58

  • Java: улучшено изменение размеров формы, устранены флики и медленная обработка этого события.
  • {Form}: добавлен метод Close для закрытия формы из программы.
  • {OpenGL}:
     
    • освещение, материал, туман, glu-функции, квадрики, аккумулятор, режимы рисования, хинты, ...
    • добавлен метод Processing, для обработки в цикле отрисовки с максимальной скоростью, без использования таймера (в случае Java нет реакции на клавиатуру, только на мышь).
    • добавлен класс {Font2D} для отображения текста в {OpenGL}-компоненте.
  • Добавлен блочный оператор DEBUG : ... ; Для которого:
     
    • всегда выдаётся предупреждение о наличии;
    • не подсчитывается число операторов в блоке (и сам не учитывается при подсчёте операторов блока, в который вложен);
    • объявленные в таком блоке переменные не могут использоваться вне DEBUG-кода;
    • этот код не компилируется при запуске компилятора с ключом /f|inal.
  • {Canvas}: поддержка стилей инструмента карандаш (Pen) сокращена до 'SOLID_PEN' и 'CLEAR_PEN', режимы (Pen_mode) удалены из поддержки и закомментированы в декларации.

 

04.04.2017 - версия 0.57

  • Разрешена декларация фиксированного массива с неопределённым размером на уровне класса:
    {type} Name|_long_name[*]
    Физически такой массив может формироваться только с помощью нативного кода, но в коде AL4 доступен как массив.
  • OpenGL - работа продолжена (списки вызовов, текстурирование, прозрачность).
  • Обеспечена работа с альфа-каналом при рисовании в Delphi, С++/wx.
  • Добавлен класс для прямой работы с пикселями битмапа: {Bitmap_direct} (наследник от {Bitmap}).
  • Добавлен оператор TODO: "текст" . Вызывает предупреждение с указанным текстом при компиляции.

 

29.03.2017 - версия 0.56

  • Изменения в синтаксисе ограничений на константные параметры:
     
    • добавлена форма
      RESTRICT/THEN x IN [a TO b] для целочисленных / байтовых параметров.
    • Добавлена возможность указать несколько множеств констант в ограничении x IN {множество1, множество2, ...}
  • Добавлен контроль дублирования констант. Допускается дублирование константы с таким же значением, если имя при повторном определении имеет в имени указание AGAIN (в любом регистре), и значение совпадает (что позволяет использовать одну константу в нескольких именованных множествах констант, для целей ограничения значений параметров константами).
  • OpenGL - работа продолжена (есть вращающийся куб, для всех четырёх платформ).

 

25.03.2017 - версия 0.55

  • Разрешено не инициализировать часть полей структуры в конструкторе структуры {имя_типа}(Field1=Value1, ... )
  • Добавлен модификатор PUBLIC для метода, позволяющий объявить функцию публичной независимо от первой буквы имени (по умолчанию, регистр первой буквы имени функции определяет её публичность: начинающиеся со строчной буквы имена не считаются публичными).
  • Изменения в синтаксисе ограничений на константные параметры:
     
    • добавлена форма
      RESTRICT x IN FLAGS [a, b, ...], позволяющая ограничить целочисленный / байтовый параметр комбинацией флагов a | b | ... (объединённых оператором '|').
    • Для целочисленных/байтовых параметров допускается использование именованных целочисленных констант в позициях ограниченных константами параметров (в том числе в случае набора флажков).
    • Реализована форма
      IF x IS CONST, THEN y ... (где допускается x == y). Позволяет проверить ограничение для случая, когда параметр задан константой, и не проверять для прочих случаев.
  • Для набора констант (типов INT, BYTE, STR) может быть задано имя набора, на которое можно ссылаться при определении ограничения (RESTRICT x IN {имя-набора}).
  • Изменения в поддержке NATIVE-функций:
     
    • теперь нативная функция состоит либо только из константной строки (начинающейся с кавычки или '@'), либо может начинаться как обычная функция с кодом AL-IV, и в качестве последнего оператора иметь директиву
      NATIVE строчное-выражение
    • Как результат, упрощается изготовление враппер-функций, которым до вызова целевой функции требуется выполнить дополнительные действия.
    • Несколько изменилась структура кода, генерируемого для нативной функции: теперь для неё автоматически формируется пролог, и финальный возврат переменной RESULT.
  • Разрешено иметь 4 и более параметров для нативных функций (атрибут NATIVE) без необходимости добавлять атрибут BAD для класса.
  • Изменена структура выдаваемой в .test-файл информации:
     
    •  теперь для строк выполненного кода вместо счётчика выполнений сохраняется номер строки теста, из которого вызывался код функции в последний раз
    • (для тестируемых методов абстрактного класса запоминается так же номер строки в тестах вызывающего класса, в младших разрядах).
    • Планируется подготовка генератора отчёта о тестировании, с выдачей этой информации в виде интерактивного html-документа.
  • Для AL4toJava компилятора, добавлены опции:
     
    • $PAUSE - для паузы после каждого этапа компиляции/запуска тестов/запуска программы;
    • $CP - для задания опции -classpath;
    • $TRACE - для задания трассировки (в консоли) по функциям (и по строкам внутри заданной функции, если указано имя конкретной функции).
  • Начата поддержка OpenGL:
     
    • для C# используется библиотека CSGL12, но без необходимости использования внешних DLL,
    • для C++ wxGLCanvas,
    • для Delphi - стандартный OpenGL12,
    • для Java - JOGL (помимо jar требует DLL-библиотеки из поставки jogl).

 

19.03.2017 - версия 0.54

  • Запрещены рекурсивные тесты. Запрещено использовать ASSERT в циклах. Запрещено использовать циклы FOREVER в тест-функциях.
  • Дополнительный строковый параметр оператора ASSERT полностью поддержан во всех компиляторах (в предыдущей версии отображение не было реализовано для компиляторов в Delphi и Java).
  • Визуальная мини-библиотека AL4 (в текущем состоянии) полностью реализована для C++/wxWidgets (для работы в Windows), включая события, графику, работу с формами и меню.
  • Добавлен {Listbox} (для всех целевых платформ).

 

16.03.2017 - версия 0.53

  • Скорость компиляции в C++ существенно ускорена, за счёт объединения всех h-файлов в один h-файл, и всех cpp-файлов в один файл в выходном проекте.
  • Работа {Canvas} для всех четырёх сред приведена к единому поведению (тестовое приложение показывает практически тождественную картинку, за исключением качества деталей).
  • Класс {Menu} удалён за ненадобностью: меню формируется динамически, главное меню не предполагается.
  • C++: большое количество исправлений, устранены утечки в объектах, GDI-ресурсах, памяти. Хотя и не все.
  • Оператор ASSERT расширен необязательным строковым параметром (текстовое выражение, которое выводится с сообщением и сохраняется в журнале тестирования).
  • Визуальные компоненты для С++/wx: прогресс имеется, хотя ещё не все события реализованы.
  • Java: улучшен процесс компиляции. Добавлена пауза для просмотра списка ошибок, обеспечено ожидание завершения программы / компилятора / тестов.

 

08.03.2017 - версия 0.52

  • Инкремент/декремент (операция ++/--) применим только для переменных и полей (поля, в свою очередь, могут принадлежать переменной или полю - рекурсивно). В частности, запрещён инкремент элемента массива или поля объекта, возвращённого функцией.
  • Добавлен комплексный тест (Test_projects), включающий в себя все имеющиеся тесты (включая новые).
  • Версия для Java (AL4JavaCompiler), в том числе jar-вариант, может использоваться для компиляции AL4 в Java, но только в Windows (проблемы с запуском javac и  java из jar-программы в других средах исполнения).
  • Работает полный цикл для всех четырёх языков: первичный компилятор на C#(исходный текст компилятора) -> вторичный компилятор на языке X (X=C#,Delphi,Java,C++); Вторичный(исходный текст компилятора) -> следующая производная. Затем первый производный ($By_X) и второй производный ($By_X2) компиляторы сравниваются посимвольно (как текстовой исходный код, сгенерированный для языка X) и являются фактически тождественными (за минусом несущественных отличий в путях, формате вещественных и т.п.). И могут использоваться для компиляции программ (проверено на комплексном тесте).

 

26.02.2017 - версия 0.51

  • Оптимизации кода: ускорение сравнения с подстрокой, ускорение проверки элемента в массиве значений (операция IN / !IN).
  • Для компилятора в C++ добавлены опции $UI и $String для управления тем, какой тип строки используется и какая библиотека для построения графического интерфейса.
  • Планы по использованию Qt для C++ пока отменены. Реализовываться графический интерфейс для C++ будет в первую очередь через библиотеку wxWidgets, ввиду ее большей простоты и удобства использования (она так же поддерживают несколько платформ - Windows/Linux/Mac OS X, и имеет лучшие условия лицензирования). Подготовка к использованию wxWidgets выполнена: при значении ключа /$String=wxString все имеющиеся классы, кроме визуальных, уже протестированы.
  • Для работы с wxWidgets потребовалась так же опция $WXLIBS (может быть заменена переменной окружения WXLIBS) - позволяет задать список библиотек для линковки с wxWidgets (названия библиотек отличаются номером версии и буквенным индексом: u - использование UNICODE, d: отладки). Кроме того, могут потребоваться дополнительные библиотеки.
  • Большая часть визуальной библиотеки адаптирована под C++/wxWidget. Эта часть работы близка к завершению. (По дороге были потери, например: {Progress} лишился свойства Minimum|_value, а опции и стили для {Listview} и {Edit} могут устанавливаться только при создании).
  • Добавлена опция $REPORT_LEAKS для генерации отчётов об утечках объектов. Утечки объектов устранены для C#, Delphi, C++.
  • Добавлено важный запрет - на передачу в качестве параметра массива слабых ссылок в функции, в которых соответствующий параметр может использоваться для добавления вновь созданных объектов (операция ",>>") или может быть передан в такие функции.

 

31.01.2017 - версия 0.5

  • Добавлена опция компилятора /$Имя="Значение" для определения констант $Имя, которые могут использоваться в тексте программы как строчные константы.
  • Добавлен компилятор из AL4 в C++. Визуальная библиотека пока не готова (планируется использовать Qt).

 

08.01.2017 - версия 0.43

  • В качестве строковых констант могут использоваться конкатенации литералов и именованных строковых констант, в том числе в директивах NATIVE и для реализации NATIVE-функций. Это даёт возможность вынести зависимую от целевой платформы часть кода в класс {NATIVE_NNN} (для класса {NNN}), фактически - в набор строковых констант, зависящий от платформы (целевого языка). При этом основная часть класса - одна для всех платформ, что уменьшает дублирование и проблемы синхронизации изменений.
    Уже переработаны классы {File_stream}, {Random}, {Mathematics}, {Date_time} - для всех трёх поддерживаемых платформ.
  • Методы Str и Format добавлены в {Date_time}.
  • Метод Rome добавлен в {Mathematics}.

 

05.01.2017 - версия 0.42

  • Добавлен класс: {Mathematics}. Функции Power, Is_NAN, Abs - перенесены в класс {Mathematics}.
  • Добавлен класс: {Date_time} для манипуляции над записью {date_time}. Для {Datepicker} - контрола теперь функции Date и Set_date работают через этот общий тип данных.
  • Добавлен класс {Random} для генерации псевдослучайных последовательностей чисел.
  • Добавлен модификатор класса 'TESTED', противоположный модификатору 'UNTESTED' и дополнительно требующий учёта обращений к native-функциям класса на этапе тестирования (позволяет проверить, что все нативные методы, по крайней мере, вызывались).

 

03.01.2017 - версия 0.41

  • Добавлена работа с потоками: {Stream}, {File_stream}.
  • Снято ограничение на вызов любой статической функции в префиксном виде: x.foo(y, z) вместо foo(x, y, z).
  • Работа с байтами исправлена в Java (байты в Java - знаковые, в отличие от AL4, C#, Delphi). Некоторые исправления для всех платформ.
  • Добавлены TEST-функции с параметрами для вызова только из других TEST-функций
  • при тестировании класса, унаследованного от абстрактного, тестированию подлежит абстрактный класс (сам абстрактный класс не тестируем по определению).

 

22.12.2016 - версия 0.4

  • Целевая платформа Java-awt: поддержана большая часть визуальных элементов (кроме listview).
  • Исправления в генерации кода для Java (RECORD, массив записей).
  • Исправление вызова базового метода (BASE) класса-предка.
  • Добавлен модификатор CALLBACK для функций (запрет на прямой вызов, кроме как из самого класса - даже не из наследника, для функций, предназначенных не для вызова из пользовательского кода, а для переопределения).
  • Добавлен модификатор UNCOOKED для функций ("сырая" функция). Используется для выдачи предупреждений об использовании или переопределении не поддерживаемого или незавершённого метода.
  • Усилены требования на использования блочных комментариев ---- 'текст': тело функции должно начинаться с такого комментария, если заголовок функции занимает более одной строки, или в теле функции используются такие комментарии.
  • Генерация кода для C# полностью переделана.
  • В генерации кода для Java для всех методов разрешено выбрасывание всех исключений.
  • Небольшие изменения в части обработки событий формы. Работа с меню переведена из режима модального ожидания в обычный для ГПИ режим - заставил всплыть, завершил работу, при срабатывании пункта меню срабатывает обработчик menu.
  • Краткое описание программирования приложений с графическим интерфейсом выложено в виде части 2 статьи "AL-IV: Как начать программировать".

 

12.12.2016 - версия 0.3

  • Переименования в визуальных классах ({Windows_AL4_forms} -> {AL4_form|...} и т.п.
  • В компилятор добавлена проверка избыточного импорта (выдаётся предупреждение об импорте класса, если из класса не использованы никакие сущности - типы, переменные, константы).
  • Все сообщения запускаемых компиляторов направляются теперь в консоль. Предупреждения выделяются ярким белым, сообщения вызванного компилятора - голубым цветом, среди них другим цветом выделяются некоторые слова (location:, symbol: - для Java, error - для C#/Delphi/Java).
  • Добавлены модификаторы DEPRECATED('...') и ABANDONED('...') для типов, полей и функций.
  • Добавлены модификаторы RESTRICT для функции (для ограничения значения параметра функции заданными множествами констант) и IF/THEN (условное ограничение значений параметров).
  • Добавлена статья "AL-IV: Как начать программировать".
  • Значительно продвинулась работа над визуальной библиотекой компонентов для платформы Java(awt): проект уже компилируется и запускается форма с меткой и кнопкой. К сожалению, существенные отличия платформы Java от прочих платформ приводят к чувствительным изменениям в коде для прочих платформ, во имя обеспечения цели "один код - все платформы". Например, для комбобокса запрещено редактирование текста (и теперь это только выбор из списка, без возможности ввода нового значения в поле редактирования).

 

4.12.2016 - версия 0.2

  • Переименования классов по единому принципу (имя класса состоит из идентификаторов, разделённых подчёркиваниями). Переименован класс {StringFunctions} в {String_functions}. Файл главного модуля компилятора из Program переименован в AL4_compiler.
  • Добавлена проверка компилятором того, что краткое имя класса (без фигурной скобки) совпадает с началом имени файла класса. Т.е., класс {AL4_form|_Delphi} может находиться в файле, например, AL4_form.pas (и импортироваться как {AL4_form} - в этом случае.
  • Добавлен компилятор в Java. На этот момент сам компилятор может кросскомпилировать себя в Java-код, и полученный таким образом компилятор с теми же исходными кодами на входе формирует на выходе тождественный Java-код.
    Примечание: этого недостаточно для компиляции визуальных классов, и отсутствует поддержка некоторых возможностей, не использованных в самом компиляторе (например, нет поддержки RECORD и коротких строк).

 

28.11.2016 - версия 0.1а

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

 

22.11.2016 - версия 0.1 (первая публикация)

  • Первая публикация под именем AL-IV.
  • Уже есть рабочий компилятор в C# и Delphi32.
  • Есть возможность создавать несложное консольное или визуальное приложение (независимое от целевой платформы - C# или Delphi), реализованы основные визуальные элементы.

 

 


В начало