ENGLISH

RUSSIAN(Русский)

 

AL-IV:   История версий

 

21.12.2019 - версия 0.98.0

  • Изменения:
     
    • Продолжается работа над визуальной библиотекой для Android.
       
      • Реализовано событие selection_change для {Combo};
      • Реализовано событие value_change для {Edit}, {Memo};
      • Ввод текста в {Paint_lines}, отображение мигающей каретки;
      • Небольшие исправления и изменения в реализации визуальных функций (установка шрифта, получение цветов системной палитры;
      • ... а так же невизуальных (Application_name, ShiftR)
    • Продолжается работа над компилятором для Android и средой для разработки под Android:
       
      • добавлены команды для автоматического запуска загруженного через adb приложения в генерируемом файле upload_apk.cmd;
  • Исправления:
     
    • Небольшие исправления в компиляторе AL4->Java/Android;
 

15.12.2019 - версия 0.97.9

  • Изменения:
     
    • Продолжается работа над визуальной библиотекой для Android. Реализовано рисование в канве ({Bitmap}, {Paintbox}), с учетом матрицы трансформаций.
    • Обеспечено управление раскладкой визуальных элементов на форме в совместимом с прежними наработками стиле само-размещения.
    • Добавлено скроллирование содержимого {Paintbox} (и его наследников, конечно) пальцем (паннинг).
    • На данный момент на Android запускаются некоторые визуальные приложения (в том числе Test_paintbox, Test_paint_lines, Test_project). Из событий реализованы события мыши (пальца) и click, timer и некоторые другие.
 

7.12.2019 - версия 0.97.8

  • Изменения:
     
    • Продолжается работа над компилятором AL-IV -> Java/Android и визуальной библиотекой для Android. На данный момент работают основные визуальные компоненты формы ({Label}, {Button}, {Checkbox}, {Edit}, {Memo}, {Combobox}, {Progress}, {Date_picker}), некоторые невизуальные ({Bitmap}, {Timer}). Из событий реализованы click, timer, menu_item, answer. Есть возможность открывать несколько форм и переключаться между ними (через системное меню приложения), работают модальные диалоги. Размер приложения от примерно 100-110 Кб до 140-190 (зависит от набора используемых модулей). Время сборки приложения до 5 секунд, время выгрузки на телефон через usb 3-5 секунд.
 

29.11.2019 - версия 0.97.7

  • Изменения:
     
    • восстановлен/доработан компилятор из AL-IV в Java с генерацией исполнимого файла для Android (apk): на данный момент компилируется и успешно запускается приложение Test_visual_projects\Test_empty_form (размер apk-файла 192 Кбайта).

 

23.11.2019 - версия 0.97.6

  • Изменения:
     
    • Удалена из языка операция ++ / --;
    • Добавлена возможность именовать сущности более чем двумя именами, в том числе создавать несколько различных групп имен, разделяя группы символами || или \\. Единственное требование - группы должны начинаться с одной и той же буквы. Например, T_h|eight || Total_height;
  • Новости:
     
    • Начаты работы по подготовке компилятора из AL-IV в Android (на базе Java);
 

8.11.2019 - версия 0.97.5

  • Изменения:
     
    • Запрещена операция ++ / -- для полей (структур, объектов);
    • Добавлено демо-приложение Invaders (игрушка по мотивам одноименного хита, консольный режим, только C#);
    • Интерпретатор: работают теперь практически все визуальные демо- и тест-приложения (включая Test_OpenGL);
  • Исправления:
     
    • Компилятор / C#: инициализация полей структур OBJECT;
    • Интерпретатор: инициализация полей DATA[];
    • Интерпретатор: множество исправлений;
 

1.11.2019 - версия 0.97.4b

  • Исправления:
     
    • Delphi/FPC: генерация кода для цикла по DATA[X TO Y];
 

30.10.2019 - версия 0.97.4a

  • Исправления:
     
    • Компилятор: ошибка компиляции сценариев;
 

29.10.2019 - версия 0.97.4

  • Изменения:
     
    • Добавлено демо-приложение Lines (игрушка по мотивам известной убивалки времени - 500 строк кода);
  • Исправления:
     
    • Компилятор: неверная работа с константой при наличии операции -CONST в выражении;
    • Компилятор: неверная генерация присваивания символа строки в массиве строк, если индекс является элементом массива (или полем элемента массива записей);
    • Оптимизатор / C#: несколько инлайн-вставок одного фрагмента в той же функции приводили к дублированию деклараций промежуточных переменных (при наличии оператора CASE со строковым выражением);
 

26.10.2019 - версия 0.97.3

  • Изменения:
     
    • {System_functions}: добавлена функция Get_char;
    • Добавлено демо-приложение 15 (игра "пятнашки", консольный вариант, 70 строк кода);
    • Интерпретатор: добавлен ключ /$TEST для запуска тестов;
  • Исправления:
     
    • Интерпретатор: при вызове нативной функции, возвращающей объект, такой теневой объект не преобразовывался в интерпретируемый.
    • Интерпретатор / C#: множество исправлений.

19.10.2019 - версия 0.97.2

  • Изменения:
     
    • Интерпретатор: стал возможен запуск в том числе визуальных приложений (кроме OpenGL).
 

6.10.2019 - версия 0.97.1

  • Изменения:
     
    • Синтаксис: добавлено требование отделять строки кода с продолжениями от прочих операторов того же блока кода (разделителями могут быть пустые строки, блочные комментарии, символы конца блока (размещенные в отдельной строке) - при компиляции выдается предупреждение при отсутствии достаточных разделений;
    • Добавлено демо-приложение Miner (Сапер): < 200 строк кода на AL-IV.
       
  • Исправления:
     
    • {Long_operation}: излишние срабатывания (не сбрасывался счетчик активности);
    • Delphi/FPC: работа с фиксированными массивами в объектах (OBJECT);
    • Интерпретатор / C#: множество исправлений;
    • IDE AL4: пропуск первого клика, активирующий окно, отрабатывает для перемещения каретки так же, как и при уже активном окне (но выделение резинкой игнорируется в этот момент);
    • IDE AL4: решена проблема с запуском еще одного экземпляра при открытии файла из проводника (не создавался мьютекс, из-за наличия в имени мьютекса недопустимых символов);
    • Delphi/KOL: событие {Form}.mouse_double_click могло не вызываться (не инициализированная  локальная переменная stop_handling: Boolean;)
    • Проверена вся (наверное) кодовая база на соответствие требованиям отделения строк с продолжениями, а так же для учета запрета отдельно стоящего оператора ++ / --;
 

27.09.2019 - версия 0.97.0

  • Исправления:
     
    • Delphi/FPC: работа с диапазонами массивов, основанных на диапазонах массивов (при передаче поддиапазона массива в качестве параметра функции - фиксированного массива);
    • Delphi/FPC: работа с фиксированными массивами в записях (RECORD);
 

20.09.2019 - версия 0.96.9a

  • Исправления:
     
    • Интерпретатор: ++/-- операция (ошибочно исполнялась как префиксная вместо постфиксной);
    • Delphi: доступ к DATA[] в коде;
    • FPC: получение размера массива в RTTI (не хватало скобок при вызове функции Count).

 

Результаты сортировки (Test_projects\Test_sort):
 

  Сортировка 100_000 чисел (целых) Сортировка 10_000 строк

время, мс

замедление

время, мс

замедление

Intel

AMD

Intel - AMD

Intel

AMD

Intel - AMD

C#

60

50

---

25

27

---

Delphi/VCL

70

55

1.16 - 1.10

20

23

0.80 - 0.85

Delphi/KOL

60

73

1.00 - 1.46

25

25

1.00 - 0.93

FreePascal

155

148

2.58 - 2.96

50

56

2.00 - 2.07

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

14085

24060

234.7 - 491.0

90

165

3.60 - 6.11


 

 

19.09.2019 - версия 0.96.9

  • Изменения:
     
    • Запрещен использование оператора ++/-- не в выражениях (например, отдельно стоящий оператор x++);
    • Запрещены нативные методы (только статические функции могут быть NATIVE);
    • Для полей OBJECT разрешен модификатор INIT|IALYZE;
    • C#: опция /$NOLONGOP теперь работает и для C# (не добавлять проверку активности на каждой итерации каждого цикла FOR);
    • Добавлена возможность выполнения кода в режиме интерпретации (ограничения: только для C#, поддержка визуальной библиотеки пока отсутствует);
  • Исправления:
     
    • {Random_soft}.Set_seed ;
    • C#: генерация обращения у DATA[];
 

06.09.2019 - версия 0.96.8

  • Изменения:
     
    • Запрещена передача функции в качестве параметра-массива массива-поля "только для чтения" (кроме как из самого класса, его потомков и друзей);
    • Запрещена передача в качестве параметра фиксированного массива с размером, заданным перечислением (как например A[{colors}]);
    • Запрещено передавать в нативную функцию параметры RECORD, как и возвращать RECORD в качестве результата нативной функции (следует использовать OBJECT, передавать по одному полю, через массивы и т.п.). То же касается и массивов записей;
    • Поднят приоритет операции IN / !IN (выше операций сравнения): выражение X IN Y != Z эквивалентно (X IN Y) != Z;
    • Предупреждение о вызове CALLBACK функций не из самого класса теперь выдается только для непубличных функций;
    • Добавлено демо Worm (~150 строк кода);
  • Исправления:
     
    • Для параметра-фиксированного массива устанавливался флаг "только для чтения";
    • C#, Delphi: генерация кода для OBJECT в некоторых случаях;
 

27.08.2019 - версия 0.96.7

  • Изменения:
     
    • Запрещены избыточные операторы ==>;
    • Запрещено использовать одно и то же поле в операторах создания объекта и в левой, и в правой части присваивания (даже если поля относятся к разным объектам);
    • Разрешено в операторе PUSH присваивать значения полям, предназначенным только для чтения, если они имеют назначенный метод-SETTER; (примеры есть в классе {Font}, например: Size - Set_size);
    • Метод-событие {Form}.menu отменяется (достаточно menu_item);
  • Исправления:
     
    • C#: генерация кода для локального (в функции) массива объектов (OBJECT);
 

12.08.2019 - версия 0.96.6a

  • Изменения:
     
    • Delphi/FMX+Android: вызов события closed для главной формы, когда приложение уходит на задний план.
  • Исправления:
     
    • C#, Delphi/KOL: устранены проблемы с компиляцией визуальных проектов в связи с добавлением пары функций, используемых Delphi+FMX/VCL для адаптации к мобильному экраны и др. (в случае C#/KOL эти функции просто пустые, но они необходимы, чтобы компиляция  могла быть выполнена);
 

09.08.2019 - версия 0.96.6

  • Изменения:
     
    • Delphi/FMX+Android: поддержка приложений с несколькими формами. Переключение между формами горизонтальным свайпом. Поддерживаются модальные диалоги.
    • {Canvas}: добавлен метод End_paint. Необходим на платформе FMX-Android при рисовании на канве {Bitmap}, для завершения рисования (в противном случае рисунок может не оказаться в объекте, когда он потребуется).

      ОБЪЯВЛЕНИЕ: на этом работы над поддержкой связки Delphi RAD Studio - FMX для компиляции AL-IV в другие платформы приостанавливаются на неопределенный срок. Количество лицензий, предоставленных мне Embarcadero, сократилось до одной, в связи с неожиданной кончиной одного из жестких дисков, и невозможностью восстановить установку RAD Studio после удаления на еще одной машине. Расширить количество предоставляемых бесплатно лицензий Embarcadero отказалась.
       
  • Исправления:
     
    • Delphi/FMX+Android: стабильная работа {Paintbox} (в режиме прямого отображения на канве контрола);
 

1.08.2019 - версия 0.96.5

  • Изменения:
     
    • Android/Delphi+FMX: в визуальном приложении форма снабжается автоматическим свайп-контролем, позволяющим пролистывать не вмещающиеся колонки (при этом события мыши задерживаются на 0.1 секунды до момента принятия решения о том, начался ли свайп-жест);
    • Android/Delphi+FMX: в визуальном приложении одномоментно отображается только по одной колонке с выравниванием 'TOP'/'BOTTOM' (остальные доступны по вертикальному свайпу). Так же, колонки, выровненные 'BOTTOM', при размещении колонок выравниваются последними, размещаясь непосредственно вслед за колонками, выровненными 'LEFT'/'CENTER'/'RIGHT' (занимающими столько места, сколько им требуется для своих компонентов). В обычном случае, колонки 'TOP'/'BOTTOM' обрабатывались до центральных, занимая для себя необходимое место, центральные колонки располагались в оставшемся прямоугольнике.
    • Android: в визуальном приложении обеспечивается обработка длинного нажатия для симуляции правого щелчка мыши, с визуальным отображением предстоящего правого щелчка (белый квадрат с рамкой, всплывающий в точке будущего отображения контекстного меню, при его наличии);
    • Количество приложений, которые могут быть откомпилированы для работы на Android, возросло. Например, работает демо-приложение Calc (комплексный калькулятор).
  • Исправления:
     
    • оптимизация: запрещена inline-вставка для функций, имеющих побочный эффект (присваивание значений полям класса);
       

     

 

24.07.2019 - версия 0.96.4

  • Изменения:
     
    • Delpi/FMX ==> ANDROID: В результате значительных усилий удалось обеспечить запуск части визуальных приложений, разработанных на AL-IV, на устройствах с Android;
    • Delphi, класс {Log_html}: Добавлен метод Redirect_console_to_log(BOOL), позволяет перенаправить весь консольный вывод в текущий файл журнала (по умолчанию Log.html, как обычно);
    • Delphi/FMX+Android: При создании {Memo} с Alias=="DEBUG", выполняется автоматическое перенаправление консольного вывода в него;
 

17.07.2019 - версия 0.96.3

  • Исправления:
     
    • Free Pascal: исключение Access Violation exception во время запуска обязательных тестов (хотя оно и позволяли откомпилировать приложение по нажатию OK);
    • Delphi: событие mouse_double_click не компилировалось (из-за изменений, специфичных только для Delphi RAD Studio + FMX);
    • Delphi/FMX: компиляция класса {Dialog_dir};
    • Delphi/FMX: чтение текста в кодировке UTF-8 из потока {Stream} (как минимум, влияло на {Localize_str});
    • Оптимизация для случая, когда цикл FOR по массиву выполняется ровно один раз (путем удаления заголовка цикла);
    • Delphi/FMX: добавлена опция /$VISUAL, при наличии которой выполняется отложенный запуск создания форм (что обеспечивает корректную работу некоторых компонентов, неверно отображаемых в случае создания до выполнения Application.Run);
 

12.07.2019 - версия 0.96.2

  • Изменения:
     
    • Добавлен демо-проект "100";
    • Добавлен класс {Rational} для работы с рациональными числами;
  • Исправления:
     
    • компиляция OBJECT:
       
      • массивы строк и записей;
    • C#, Delphi&FPC: генерация кода для последовательного CASE, содержащего в условиях обращения к записям (RECORDs);
    • Delphi: memory leaks (Ref_obj);
 

05.07.2019 - версия 0.96.1

  • Изменения:
     
    • Добавлена возможность компиляции кода в формат проектов на языке Pascal для Delphi X - Rad Studio - BDS, в режиме мультиплатформенного проекта на основе библиотеки FireMonkeys (FMX). Достаточно в конфигурацию проекта добавить ключ /$RAD (альтернатива ключам /$KOL и /$FPC). Полученный проект может быть открыт в Delphi X и (теоретически) собран для желаемой платформы отличной от Windows32 (Windows/64, iOS, MacOS, Android).

    Исправления:
     
    • Delphi: поле Shared не было объявлено для динамического массива записей (DynARec).
 

19.06.2019 - версия 0.96.0

  • Изменения:
     
    • {Form}: при наличии в колонке автоматически расширяемого по вертикали визуального компонента (свойство Anchor_bottom = TRUE), независимо от его положения в колонке, он расширяется по вертикали на всю оставшуюся от других элементов высоту (прежде это работало только в случае, когда Anchor_bottom-компонент был последним в колонке);
    • Запрещено вызывать системную функцию Insert для вставки в массив объектов только непосредственного конструктора объекта, не присвоив новый объект промежуточной переменной;
    • Компилятор: после выдачи первой же ошибки предупреждения более не выводится в консоль до окончания компиляции;
    Исправления:
     
    • компиляция OBJECT:
       
      • удалено требование использования коротких строк;
      • C#: устранены проблемы генерации кода с объектами OBJECT;
    • Delphi: при внедрении в код (компилятором) временных фиксированных массивов (Temp_fixed), имелись проблемы с порядком уничтожения: деструкция базового динамического массива происходила до разрушения временного фиксированного, на нем основанного. Кроме того, не устанавливался флаг Shared для фиксированных массивов объектов. В совокупности, результат мог быть печальным.
 

11.06.2019 - версия 0.95.9

  • Исправления:
     
    • FPC/Linux:

       

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

10.06.2019 - версия 0.95.8

  • Исправления:
     
    • FPC/Linux: компиляция с модулем {Clipboard} (Test_clipboard);
    • FPC/Linux: компиляция/запуск оконных приложений (Test_visual_projects);
 

09.06.2019 - версия 0.95.7

  • Исправления:
     
    • восстановлена компилируемость в Linux (для невизульных проектов полностью, с визуальными проектами остались проблемы сборки);
    • {Form}: Client_width, Client_height (размер в пикселях неверно конвертировался в поинты);
    • IDE: исправлена скорость появления диалогов поиска и замены, улучшено изменение размеров.
 

06.06.2019 - версия 0.95.6

  • Изменения:
     
    • {Form}: добавлены методы Client_width, Client_height, Set_client_size;
    • IDE: улучшение в диалоге замены (объединены кнопки Заменить . Следующий, добавлены флажки "Только в текущей функции" и "Любая часть слова");
  • Исправления:
     
    • {Form}.menu_item - не вызывался;
    • Компилируемость проектов из компилятора, откомпилированного Delphi32.
 

02.06.2019 - версия 0.95.5

  • Изменения:
     
    • {Form}: добавлен метод menu_item (без параметров) - предпочтителен для переопределения в форме. Метод menu(A|ction) объявлен как 'DEPRECATED', и фактически вызывает menu_item, присваивая sender_alias значение своего параметра. (Данное изменение позволяет в сценарии дожидаться события menu_item оператором WAIT сразу после вызова popup_menu, не прерывая работу алгоритма).
  • Исправления:
     
    • Delphi/KOL: компиляция кода с динамическими массивами;
 

23.05.2019 - версия 0.95.4

  • Изменения:
     
    • Добавлен новый вид метода - SCENARIO, блочный оператор
      WAIT [event]: ...  ;
      или
      WAIT ?
      [event1]: ...
      [event2]: ...
      ... ;
      , операторы GOTO scenario_name, CALL scenario_name.
      Новые конструкции позволяют сосредоточить логику выполнения в одном месте, не распыляя ее по обработчикам событий.
 

11.05.2019 - версия 0.95.3

  • Исправления:
     
    • C#: замена ссылки на объект в массиве объектов - неверно подсчитывалось число ссылок - объект мог быть уничтожен слишком рано (в результате далее использовалась NONE-версия объекта);
 

21.04.2019 - версия 0.95.2

  • Изменения:
     
    • Добавлен тип данных OBJECT {имя_объекта} (работает как класс, но декларируется внутри класса, не имеет методов и не предполагает наследования);
 

12.04.2019 - версия 0.95.1

  • Изменения:
     
    • Разрешено в конструкторе записи полностью не указывать скобки, если нет присваиваний полям:
      {rect} r|ectangle_temp = {rect}
    • IDE Editor: добавлена опция теневого копирования всех сохраняемых из редактора файла на другой диск;
    • IDE Designer: реализован переход по CTRL+клик на элементе формы на следующую ссылку на его текстовую метку (в форме "ALIAS"); так же по двойному клику на элементе формы выполняется переход на первый подходящий обработчик, в котором упоминается текстовая метка этого элемента (click, paint, value_changed и т.п.);
  • Исправления:
     
    • IDE, Дизайнер форм: восстановление состояния свойств Filter, Default_ext для {Dialog_file};
    • {Paint_tabs}: неверный контроль предотвращения скроллинга закладок мышью левее максимально возможной минимальной правой границы (когда количество и размер закладок шире окна);
 

08.04.2019 - версия 0.95.0

  • Изменения:
     
    • {Paint_tabs}: Select_tab перемещает выделенную вкладку в видимую область автоматически;
    • IDE AL4: всплывающее меню на вкладках содержит список всех вкладок для быстрого перехода между вкладками;
  • Исправления:
     
    • Delphi: генерация кода для случая операторов выхода ==> внутри вложенных PUSH;
    • Реализована поддержка локальных переменных-массивов фиксированного размера с размером, заданным типом перечисления;
 

05.04.2019 - версия 0.94.9

  • Изменения:
     
    • {Font}: поля Face, Size, Style[...] доступны для непосредственного присваивания (в том числе в операторах PUSH), соответствующие сеттеры Set_face, Set_size, Set_style объявлены как DEPRECATED;
    • IDE AL4: всплывающее меню на нижнем поле для быстрого перехода по секциям ---------'name' в текущем тексте;
  • Исправления:
     
    • C#: проблема с рисованием "отраженного" по вертикали/горизонтали {Bitmap} (когда целевой прямоугольник имеет отрицательную ширину и/или высоту);
    • Delphi: генерация кода для случая выхода из функции оператором ==> из блока PUSH;
    • IDE, Дизайнер формы: восстановление значения поля Alias из конструктора формы для поля {Edit} с модификацией Read_only=TRUE;
    • /$INCREMENTAL (инкрементальная компиляция): пробемы с классами, содержащими операции enum IN enums[], enums[] << enum;
 

30.03.2019 - версия 0.94.8

  • Изменения:
     
    • Добавлен метод {Form}.Set_colors(Fore, Back);
  • Исправления:
     
    • FPC: генерация кода;
    • /$ICREMENTAL: потеря соответствия типа перечисления при перекомпиляции класса, содержащего ссылку на него;
    • Delphi: {Bitmap}.Load (не менялись поля Width, Height после загрузки);
    • C#: {Bitmap}.Draw отображал с искажениями в случае масштаба 1:1; ускорено рисование в случае масштаба 1:1 и целочисленных координат в канве;
    • Добавлена проверка на присваивание значения переменной цикла, основанного не на массиве (а на диапазоне - в этом случае изменять переменную цикла запрещено);
    • Устранены общие проблемы компиляции, вызванные изменениями в ядре компилятора (целью которых была попытка изоляции процессов компиляции отдельных модулей, c неуспешным результатом);
    • Delphi: генерация кода для создания пустого фиксированного массива байтов;
 

28.03.2019 - версия 0.94.7

  • Изменения:
     
    • C#: ключ /$INCREMENTAL - поддерживается инкрементальная компиляция, хотя и без динамической загрузки кода в уже запущенное приложение (тем не менее, так как перекомпилируются только изменившиеся классы, полная сборка приложения ускоряется в несколько раз);
    • C#: ускорена сборка приложения (добавлен ключ -warn:0, что устраняет все сообщения о предупреждениях компилятора csc);
  • Исправления:
     
    • IDE, Дизайнер формы: код для записи контрола с составным именем в список скрываемых (can_hide[] << name|name2);
    • C#, {Form}, hidden: при обработке события hidden контролы могли менять свой порядок в списке контролов колонки, при этом менялось визуальное оформление (т.к. C# произвольно меняет положение дочерних контролов в списке родителя);
 

26.03.2019 - версия 0.94.6

  • Изменения:
     
    • Добавлены встроенные функции для работы с перечислениями: Next, Prev|ious, First, Last;
    • Изменена реализация класса {Random_soft}. Seed теперь хранится в виде структуры из двух целых, т.к. C# не позволяет преобразовать длинное вещественное в длинное целое без потери нескольких цифр мантиссы.
  • Исправления:
     
    • Оптимизация V2 удаляла оператор инкремента, следующий за оператором присваивания;
    • Delphi: генерация кода для динамических массивов с элементами REAL;
 

24.03.2019 - версия 0.94.5

  • Изменения:
     
    • Добавлена возможность указывать в качестве диапазона в операторе FOR тип перечисления:
      FOR e IN {some_enum} : body ;
      FOR e IN {Some_class}.{some_enum} : body ;
    • Разрешено применение встроенной функции Int к выражениям типа перечисление (ENUM|ERATION);
  • Исправления:
     
    • Delphi/FPC: Массив записей: память для записи-заглушки выделялась, но не обнулялась, что могло приводить к ошибкам операций с плавающей запятой при обращении за пределы массива;
    • Delphi/VCL: Инкрементальная компиляция: тип записей при присваивании становился несовместимым при перекомпиляции использующих чужую запись классов;
    • Delphi/FPC: генерация декларации и кода для полей - не устанавливался размер массива;
    • Delphi: генерация кода зануления поля записи, являющегося массивом - в обработчике исключения (например, TooDeepRecursionException);
    • C#: {Paintbox}, {Form}.paint : до вызова события paint все трансформации канвы сбрасываются;
    • Delphi: генерация кода цикла FOR для частного диапазона индексов в массиве
      FOR s IN A[x TO y]: ...
    • Инкрементальная компиляция (Delphi/VCL): если изменилась рабочая директория (например, поле вызова {Dialog_file}.Select_file), измененная DLL с перекомпилированным классом не обнаруживалась/не загружалась;
    • IDE AL4, Дизайнер формы: генерация кода для {Dialog_file}, когда Save_dialog=TRUE;
    • Использование квалифицированных констант из другого класса ({Class}.SOME_CONSTANT);
 

20.03.2019 - версия 0.94.4

  • Изменения:
     
    • Если созданный объект, присваиваемый локальной переменной добавляется только в локальный массив оператором >>, и локальная переменная не имеет TEMP в своем имени, то это считается ошибкой (ужесточение правил, точнее - приведение в соответствие с правилами);
    • Добавлен класс {Random_soft} (аналогичен {Random}, но гарантирует генерацию тождественных последовательностей для одинаковых начальных значений Seed, независимо от целевого языка / платформы);
  • Исправления:
     
    • Распознавание очень большой вещественной константы в коде (больше минимально возможного целого);
    • C#, Delphi/FPC: генерация слишком большой вещественной константы (добавляется .0, чтобы компилятор конечного кода не пытался воспринимать ее как целое число);
    • Delphi/FPC: генерация декларации и кода для полей - фиксированных массивов (объявленных с перечислением в качестве диапазона индексов: X[{enum1}]) - для типов INT, BOOL, BYTE;
 

17.03.2019 - версия 0.94.3

  • Исправления:
     
    • IDE AL4, Дизайнер форм: исправлено отображение колонок выровненных вправо;
    • Нельзя было добавить созданный объект (операцией >>) в массив только для чтения (в своем классе - объявленный с модификатором 'READ');
    • Оптимизация: удалялся сеттер для оператора .[];
 

15.03.2019 - версия 0.94.2

  • Изменения:
     
    • Tools\Web_maket - перезаписывает только действительно изменившиеся версии файлов;
  • Исправления:
     
    • C#: генерация кода цикла при достаточно сложных выражениях в заданном диапазоне (требующих помещения промежуточных вычислений во временные переменные);
    • Оптимизация: R2 (удаление неиспользуемых нативных функций приводило к неудалению дополнительных (других) функций/методов).
 

14.03.2019 - версия 0.94.1

  • Изменения:
     
    • Демо-приложение калькулятор расширено (добавлены операции с многочленами и решение треугольников);
  • Исправления:
     
    • {Matrix}, {Cmatrix}: Clone (NRows <-> NColumns в параметрах, что приводило к неверной работе с векторами, не затрагивая квадратные матрицы);
    • IDE: Редактор меню неверно формировал подменю со значением Custom(...);
 

13.03.2019 - версия 0.94.0

  • Изменения:
     
    • Добавлены классы {Cvector} и {Cmatrix} (аналогичны {Matrix} и {Vector}, но над множеством чисел {complex} из класса {Complex});
    • Демо-приложение калькулятор расширено (добавлены операции с матрицами и векторами над комплексными числами);
    • При наличии в области действия одноименных функции и переменной/поля класса, приоритет отдается функции только в случае, если после имени следующий символ '(';
  • Исправления:
     
    • Delphi: генерация кода в обработчике исключения, требующем установку результата функции, когда функция возвращает RECORD;
    • Delphi/VCL: после скрытия части колонок и восстановления прежнего состояния, часть колонок могли поменять свой порядок по сравнению с изначальным;
    • Более аккуратное удаление неиспользуемых функций при оптимизации;
    • Оптимизация: при инлайн-вставке функции с параметрами, для параметров могли теряться инфиксные операции (-, ~, ++, --);
    • Delphi/VCL: {Form}.Mouse_cur
 

12.03.2019 - версия 0.93.9

  • Изменения:
     
    • В операторе цикла FOR по элементам массива теперь допускается в квадратных скобках массива указывать диапазон индексов, в том числе с перечислением от больших индексов к меньшим (DOWNTO):
      FOR m IN M[x TO y] : ... ;
      FOR m IN M[y DOWNTO x] : ... ;
    • Разрешено использовать в функциях/методах локальные переменные, имя которых совпадает с именем поля (предупреждение выдается, но не ошибка, в случае статической функции - не выдается и предупреждение);
    • Delphi/FPC: добавлена опция /$REAL=Extended - компилятор генерирует код, в котором используются числа с плавающей точкой типа Extended вместо Double;
    • Добавлено демо-приложение - калькулятор (комплексных чисел, инженерного типа, около 60 операций, журнал действий, локализуемость, около 1000 строк кода);

      (снимок экрана с 4 экземплярами CCalc, собранными в C#, Delphi/VCL, Delphi/KOL и Free Pascal).
  • Исправления:
     
    • Оптимизация удаления недостижимого кода ошибочно удаляла завершающий оператор ==> во вложенных блоках;
    • Оптимизация удаляла все операторы, забывая их посчитать;
    • В операторе LIKE с исключениями возникала ошибка при исключении хвостового блока;
    • Free pascal, {Form}: порядок колонок выровненных 'LEFT'/'RIGHT'/'TOP'/'BOTTOM' был противоположный;
    • Delphi/VCL, {Form}: порядок колонок, выровненных 'TOP', был противоположный;
    • {Complex}.Csin;
    • IDE:
       
      • установка ширины для колонки выровненной 'LEFT'/'RIGHT';
      • Дизайнер формы: восстановление имени и размера шрифта контрола;
      • Дизайнер: не считывался из конструктора {Edit} с опцией "только для чтения" при открытии формы;
 

7.03.2019 - версия 0.93.8

  • Изменения:
     
    • Операторы IMPORT в функциях TEST более не используются, вместо этого добавлен модификатор TEST для операторов IMPORT в начале класса;
    • Для функций, состоящих из одного присваивания значения выражение результату, допускается опускать ключевое слово RESULT в этом единственном операторе:
      FUN av|erage_of_A_B(
      REAL A|_parameter, REAL B|_parameter) ==> REAL
          := (A + B) / 2 .
    • Правила оформления тела оператора идентичны правилам прочих функций (см. выше для случая единственного возвращаемого выражения). В том числе, оператор может содержать обычный блок операторов.
    • Для оператора разрешено использование модификатора NEW.
    • Для функций, состоящих из единственного оператора, требование размещать ':' в отдельной строке, отменено.
    • Добавлена возможность определять в классе метод .[параметры] (с пустым именем, параметры заключаются в квадратные скобки). При наличии метода присваивателя (SETTER) для такого .[]-метода, он может употребляться в левой части оператора присваивания (разрешен только оператор "=", без комбинированных "+=", "*=" и т.п.)
    • Добавлены классы {Vector} и {Matrix}, реализующие работу с векторами и матрицами.
  • Исправления:
     
    • C#: исправлена работа с фиксированными массивами на основе массивов байтов (и тем самым устранена проблема загрузки иконки из файла, см. тестовое приложение Test_visual_projects\Test_TrayIcon).
 

5.03.2019 - версия 0.93.7

  • Изменения:
     
    • Добавлена возможность переопределения операторов +, -, *, / (а так же унарного "-") для классов и записей:
       
      • OPERATOR тип + тип ==> тип: выражение.
        OPERATOR - тип ==> тип: выражение.
      • обязательный модификатор OPERATORS({Класс1}, ...) для использующих функций (и операторов), задающий порядок просмотра классов для использованных операторов;
      • обязательный модификатор OPERATORS для класса, переопределяющего операторы;
      • операторы допускают перегрузку по типам аргументов;
    • Добавлен класс {Complex}, демонстрирующий возможности переопределения операторов.

 

3.03.2019 - версия 0.93.6

  • Изменения:
     
    • Добавлен класс {Thread}, реализован принцип полной изоляции адресных пространств различных нитей друг от друга: после отправки объектов методом Take в подчиненный поток, отправляющий поток их теряет до тех пор, пока объект не будет обработан в подчиненном потоке (и либо отправлен принудительно назад методов yield, либо автоматически отправлен назад по удалению последней жесткой ссылки на него в этой нити);
    • Добавлен класс {Slice}, позволяющий отсечь начальную часть массива для передачи в другие нити в объектной обертке (из исходного динамического массива изымается начальная часть массива, оставляя доступной оставшуюся часть - со сдвигом индексов). Допускается последовательное выделение набора {Slice}-фрагментов из массива (например, для целей сортировки). Обеспечивается возможность отсекать части массивов всех типов, кроме массива записей.
    • Предупреждение по поводу DEPRECATED ("осуждаемой") функции выдается теперь только при ее первом вызове в компилируемом коде (кроме случаев вызова из DEPRECATED-функций);
    • При выдаче предупреждения DEPRECATED для класса, отображается так же класс, в котором встретился импорт проблемного класса;
    • IDE: добавлена возможность привязывать в комментариях диаграмму (.dia, см. инструментальное приложение Tools\Diagram_draw) в формате
      //[diagram:имя_файла_диаграммы]
      Диаграмма отображается в дополнительном окне редактора (при  движении мыши через строку с такой ссылкой).
  • Исправлено:

     

    • Восстановлена компилируемость первичного компилятора кодом на C# (проект MS VS в корне папки дистрибутива);
    • Устранена зависимость от настроек на указанный в командной строке диск в первичном проекте компилятора (C# так же использует переменную среды %al4%);
    • IDE: в дизайнере формы не создавался первый контрол, если не была сначала создана колонка (теперь колонка создается автоматически в этом случае);
    • C#: использование непосредственно типа {Object} для переменных, параметров и т.п. (компилятор требовал сначала импортировать класс {Object});
    • C#: генерация инициализатора для локального временного фиксированного массива объектов (если в коде шло обращение к функции, требующей в качестве параметра фиксированный объектный массив);
   

16.02.2019 - версия 0.93.5

  • Изменения:
     
    • {Report}: добавлено управление режимом переносов (Syllabels_second - по умолчанию выключено, что означает, что переносы будут использоваться немедленно, без первой попытки обойтись без них при впечатывании текста в ячейку);
    • {Report}: реализовано выравнивание 'JUSTIFY';
  • Исправлено:

     

    • {Report} - переносы по слогам для ряда случаев;
    • {Report} - рабочая версия теперь и для всех целевых платформ: C#, Delphi/VCL, Delphi/KOL и Free Pascal;
    • IDE AL4 / Дизайнер формы:

       

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

 

14.02.2019 - версия 0.93.4

  • Изменения:
     
    • Добавлен модификатор HANDLER для функции, которая может напрямую вызывать CALLBACK-функции из своего класса, не вызывая предупреждений.
    • Добавлен визуальный компонент: {Paint_font_styles}.
    • {Report}: обеспечена печать с Wrap='WRAP_WORDS' и 'WRAP_SYLLABELS', добавлены методы Desired_rect(Cell_name) и Set_band_height(H). Множество исправлений и изменений: классы для печати {Report}, {Printer} и пр. вполне пригодны для практического применения (см. демо-проект в папке Test_visual_projects\Test_print, работает для Delphi/VCL и C#).
    • {Canvas}: Добавлено поле {rect} Clip_rect (доступно для записи и чтения). Позволяет ограничить любой вывод (текст, графические примитивы) заданным прямоугольником.
    • IDE AL4 / Дизайнер формы:

       

      • Добавлена (рабочая) версия визуального редактора отчетов;
  • Исправлено:

     

    • Инкрементальная компиляция:

       

      • обновленный класс не воспринимался более как доверенный (FRIEND);
      • при наличии функций с одинаковыми именами в разном регистре букв, могла отыскиваться для сравнения несоответствующая функция;
      • количество предупреждений перед перекомпиляцией класса не сбрасывалось в 0, в результате после суммарно более 100 (или заданного числа предупреждений, dll не формировался);
    • Delphi/VCL: при обращении к свойству {Combo}.Current для NONE-объекта, замещающего {Combo}, вызывалось исключение;
    • Более аккуратный обход кода блока BUT IN после его компиляции (теперь он может завершаться комбинацией '; .', и для замещаемого блока при обходе учитывается вложенность конструкций);
    • Delphi: {Combo}.Select(-1) не допускался;
    • Delphi: генерация кода присваивания значения записи внутри блока, используемого оператором LIKE, в том же методе, создавала промежуточную переменную дважды с одинаковым именем;
    • Delphi/VCL: обеспечивается (так же, как в Delphi/KOL, C#) автоматическая подгонка ширины для {Button} при установке нового значения Text (важно для кнопок, размещенных в колонке, выровненной 'TOP' или 'BOTTOM');

 

6.02.2019 - версия 0.93.3

  • Изменения:
     
    • Добавлена поддержка информации о типах времени исполнения (RTTI): при подключении класса {RTTI}, становятся доступны ряд функций, позволяющих перечислять поля объектов, получать их имена, типы, и для простых типов данных получать или изменять значения полей. Возможна работа с элементами массивов и полями записей (кроме массивов записей). Поддержка RTTI нацелена прежде всего на перенос данных от полей объектов в наборы визуальных компонентов формы и обратно.
    • Добавлен блочный оператор BUT IN 'label': ... ; как продолжение оператора LIKE - замещает внутренний блок копируемого фрагмента. Позволяет реализовывать итераторы без дополнительных расходов памяти и падения производительности вычислений.
    • {Report|_printing}: стиль создания отчета переработан на префиксное задание атрибутов;
    • Запрещено использовать UNCOOKED оператор в блоках, переиспользуемых в операторах LIKE/REVERT;
    • Символ ==> в заголовке функции может начинаться в новой строке;
    • Требование в операторах CASE с условием занимающим несколько строк, размещать символ '?' в отдельной строке, снижено до требования размещать знак '?' в новой строке для этих случаев. (Прежнее размещение в отдельной строке так же не вызывает предупреждение).
    • Визуальный редактор отчетов в IDE начат (но не завершен).
  • Исправлено:

     

    • Delphi/FPC: Генерация кода для функции, возвращающей запись, и использующей операцию добавления в массив (<<);
    • Delphi/VCL: попытки в коде работать с закрытой формой приводили к исключениям времени выполнения;
    • Delphi/VCL: исключение при обращении к свойству Visibe не созданной формы;
    • Delphi/VCL: для IBeam курсора добавлена корректировка координат курсора при получении координат мыши;
    • Delphi/KOL: прямоугольник в {Canvas}.Paint_rect рисуется на 1 пиксель меньше по ширине/высоте, чтобы приблизить результат к тому, что получается в других библиотеках;
    • Delphi/KOL: уменьшено мелькание формы на момент ее создания (практически устранено);
    • C#: попытка обращения к свойству Visible не созданной формы вызывало исключение;
    • C#: инициализация локального динамического массива записей делалась с использованием конструктора по умолчания, что при обращении к элементу за пределами массива приводило к исключению в результате попытки приведения базового для всех записей класса AnyRec к типу конкретной записи;
    • IDE AL4 / Дизайнер формы:

       

      • Delphi: небольшие корректировки в графике (пунктирные линии, размер символьного ';' и т.п.);
   

1.02.2019 - версия 0.93.2

  • Изменения:
     
    • Добавлено свойство Radio_group для {Checkbox} (при установке ненулевого значения превращается в радио-бокс - но внешне не обязан изменяться);
    • Добавлены классы {Report|_printing}, {Printers}, {NATIVE_Printers}. Теперь доступна печать на принтере и формирование печатных отчетов произвольной сложности.
  • Исправлено:

     

    • Delphi/VCL: назначение TRAP на запись в скалярное поле-объект;
    • Delphi / FPC: генерация << (добавления) для коротких строк в составе записи (RECORD);
    • Delphi: оптимизация INLINE-вставки функции теряла блоки инициализации записей (RECORD) для локальных переменных (случай присваивания "конструктора" записи);
    • IDE AL4 / Дизайнер формы:

       

      • Кнопки MOVE UP / MOVE DOWN могли неправильно работать по клику мышью (выделяя произвольный элемент на форме);
      • Исправлено автоматическое выделение текстовых меток (Alias) для создаваемых контролов;

 

27.01.2019 - версия 0.93.1

  • Изменения:
     
    • Добавлены методы для сохранения/восстановления размеров/положения формы на экране: {Form}.Save_bounds, {Form}.Restore_bounds;
    • Компилятор: в случае использования префиксного способа вызова метода, имя которого совпадает с именем статической функции в области видимости, приоритет отдается методу;
    • IDE AL4 / Дизайнер формы:

       

      • Добавлена возможность первичной конверсии изначально пустой формы в управляемую визуальным дизайнером;
      • Пустым колонкам при отображении устанавливается минимальный размер 20х20 (пт);
      • Синхронизация текстовой метки элемента с именем, если они совпадали до редактирования имени;
      • Добавлен визуальный редактор всплывающих меню в форме (к сожалению, используется новый формат конструктора меню, хотя и совместимый со старым по результату - для этого создан класс {Menu|_create}. Поэтому все ранее созданные меню должны быть переконвертированы в новый формат вручную, чтобы их далее можно было редактировать визуально);
      • Добавлена возможность создавать в конструкторе формы, управляемой визуальным дизайнером формы, неизвестные классы контролов. В качестве примера создан контрол {Separator} (на основе {Paintbox} без линеек прокрутки);
  • Исправлено:

     

    • Delphi/VCL: для {Form} не вызывалось событие "moved" при перемещении окна мышью;
    • Delphi/VCL: исправлены проблемы с исключением при обработки события колеса мыши (когда нет активного контрола на форме);
    • C#: модальный диалог "message" мог скрываться за основной формой, приводя к невозможности продолжения пользоваться приложением;
    • IDE: в диалоге Find/Replace при вызове его комбинацией клавиш CTRL-F, CTRL-R, поле ввода текста было в фокусе, но без каретки (что могло приводить к проблемам, если надо было внести исправления в середину текста);
    • IDE AL4 / Дизайнер формы:

       

      • Загрузка команд для {Paint_turtle} из конструктора;
      • Другие исправления по видимости / доступности свойств, правильности их ввода, распознавания, генерации и т.п.
 

21.01.2019 - версия 0.93.0

  • Изменения:
     
    • Delphi/VCL: усовершенствована/исправлена техника инкрементальной компиляции с дозагрузкой перекомпилированных классов:

       

      • все последние сформированные dll вгружаются при каждом вызове Update_functions;
      • Update_functions возвращает в строке список загруженных dll (через пробел);
      • для компилятора добавлен защитный интервал 1 секунда до начала перекомпиляции изменившихся классов;
      • исправлена генерация обращения к NONE базового класса {Object} в классах, компилируемых в DLL;
    • IDE AL4 / Дизайнер формы: перешел из состояния БЕТА в состояние "можно использовать":

       

      • исправлены недочеты загрузки конструктора, генерации нового конструктора, отображения свойств, рисования схемы формы;
      • добавлен переход по обработчикам событий в коде / создание обработчиков событий (меню Форма|События...);
      • добавлено масштабирование в дизайнере.
 

19.01.2019 - версия 0.92.9

  • Изменения:
     
    • Delphi/VCL: Добавлена возможность при отладке использовать инкрементальную компиляцию с динамической дозагрузкой откомпилированных классов (в DLL):

       

      • Добавлен ключ /$INCREMENTAL (сокращенно /$INC), при его наличии, по окончании компиляции проекта, после запуска приложения, компилятор остается в режиме ожидания наличия изменившихся исходных файлов проекта. Изменившиеся классы компилируются в DLL.
      • Добавлен класс {Incremental_compiling}, с единственной функцией Update_functions. Следует вызывать эту функцию в приложении для того, чтобы выполнилась дозагрузка вновь сформированных функций, в результате инкрементальной компиляции. Например, в событии формы activated, или по команде (меню, кнопка, сочетание клавиш и т.п.).
      • Добавлен ключ /$NOTDLL={класс1};{класс2};...{классN} для исключения указанных классов из списка инкрементально компилируемых. На данный момент, достаточно включить в список {Form};{Control};{Screen};{AL4_form}, чтобы обеспечить корректное функционирование.
   

13.01.2019 - версия 0.92.8

  • Изменения:
     
    • Добавлен встроенный "метод" A[].Swap(i, j) для всех массивов;
    • Из языка удалены обобщенные функции (класс {Sorting} теперь использует операторы LIKE для уменьшения размера кода);
    • Конструкция DEBUG IMPORT заменена на IMPORT, DEBUG (т.е. DEBUG теперь используется как модификатор);
    • Добавлен модификатор DEBUG для функций/методов (функция с таким модификатором может вызываться только из DEBUG-блоков, и не выдается предупреждение о том, что приватная функция с модификатором DEBUG не используется, когда все DEBUG-блоки закомментарены/удалены);
  • Исправления:

     

    • {Paint_turtle}: в отрисовке (цикла) x n;
    • C#: не компилировалось обращение к ловушке (TRAP) на запись для скалярного поля простого типа;
 

08.01.2019 - версия 0.92.7

  • Изменения:
     
    • IDE AL4: Добавлен дизайнер формы (BETA);
    • Добавлен цвет {system_color}.'MENU_HIGHLIGHT';
    • C#: событие {Form}.value_change вызывается только при установке действительно отличающегося от предыдущего значения Text для {Label};
    • Добавлена статическая функция {Paint_turtle}.Paint_turtle, позволяет использовать рисование "черепашкой" без создания контрола (на произвольной канве);
  • Исправления:

     

    • {Form}.Set_size(..., 'KEEP_ON_SCREEN') использует для анализа того, что окно остается на экране точку со сдвигом (1, 1) - это должно устранить проблему перемещения на другой экран окна при попытке установить его точно в верхнюю левую позицию некоторого монитора;
    • C#: цвет System_colors('BUTTON_HIGHLIGHT') перенаправлен на SystemColors.ControlLightLight (т.к. ControlLight совпадает с 'BUTTON');
    • оптимизация INLINE: проблемы копирования префиксной операции '!' для параметра функции, чей код включается;
    • Delphi/VCL&FPC: {Canvas}.Rect(...) теперь рисует прямоугольник "включительно" по правую и нижнюю границы (на 1 пиксель шире), чтобы согласовать с отрисовкой в C#, и учесть то, что используются вещественные координаты;
    • Исправление оптимизации многократной вставки функции, имеющей параметр - динамический массив (повторно, утеряно);
    • Событие {Form}.hidden для контрола не отрабатывало;
    • {Paint_lines}: исправлены расширенные имена для свойства Line_width и метода Set_line_height, ошибочно указывавшие на то, что данные в пикселях, хотя они передаются в поинтах;
    • C#: создание фиксированного массива строк на базе существующего  фиксированного массива строк (срезки);
    • C#: функция ShiftRight работала неверно для отрицательных чисел;
    • Delphi: генерация PUSH для включенных INLINE операторов (дублирование переменных);
 

Предыдущая история версий (2017-2018)


См. здесь

 

Предыдущая история версий (2016-2017)


См. здесь

 

 


В начало