ENGLISH

RUSSIAN(Русский)

 

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

27.12.2020 - версия 1.5.0

  • Изменения:
     
    • Разрешено для оператора DEBUG опускать двоеточие и знак операции <<, если далее следует двойная кавычка: DEBUG "test"#NL ;
  • Исправления:
     
    • Delphi + FPC: исправления в работе {Thread};
    • Android/Java: исправлена генерация PUSH (дублирование локальной переменной в случае использования LIKE или INLINE);
    • FPC: Компиляция под Linux (Code Typhon) протестирована;
 

20.12.2020 - версия 1.4.9

  • Изменения:
     
    • C#, Delphi[KOL,VCL]/FPC[Windows]: Добавлен метод {Form}.Track_submenu_items_select|ion - после его вызова с параметром TRUE меню создается с установленным флагом отслеживания выделения элементов меню мышью / клавишами в процессе выбора пункта, при этом вызывается событие {Form}.selection_change с menu_alias, установленным в текстовую метку соответствующего пункта меню;
    • C#, Delphi/VCL: Добавлены функции: {Clipboard}.Files_from_clipboard, .Files_to_clipboard, .Clipboard_has_files, .Clipboard_has_text;
    • {Paint_table} вызывает {Form}.paint_item перед и после отрисовки каждой ячейки;
  • Исправления:
     
    • Компилятор: не обнаруживалась недопустимость операции << в поле, ограниченное доступом "только по чтению";
    • Компилятор: в некоторых случаях переменная цикла по элементам массива не могла быть модифицирована в цикле (считалась переменной, доступной только по чтению);
    • Delphi: исправлена ошибка в реализации фиксированных массивов на базе фиксированных массивов: следовало их переадресовывать на исходные динамические массивы в любом случае;
    • C#: Dismiss для получения элемента массива приводил к уничтожению объекта, возвращалось NONE-значение;
    • C#: устранена утечка объектов Thread;
    • Delphi VCL, KOL: {Thread} - поправлен (уничтожение на запускающей стороне отработанного контроллера, возвращаемого при вызове Run, проводило к порче памяти, из-за повторного уничтожения объекта); так же несколько других исправлений;
    • C#: {Paintbox} - исправлено "мелькание" линеек прокрутки, когда подсистема не может решить, показывать или не показывать их в некотором пограничном состоянии размера окна. В этом случае подвисание исключается, отображение линеек фиксируется для этого размера окна;
 

8.12.2020 - версия 1.4.8

  • Изменения:
     
    • C#/{Form}.menu_item вызывается теперь в случае закрытия меню не по причине клика на элементе меню (например, при клике мимо меню) - но с пустым menu_alias (позволяет отследить закрытие всплывшего меню, если на время всплытия следует приостановить или запустить какие-то действия);
    • Предупреждение о некорректном использовании формы CASE ? в случае единственной условной ветви более не выводится - вариант такого использования считается нормальным;
  • Исправления:
     
    • C#/{Paintbox} + наследники: линейки прокрутки сделаны исчезающими в случае, когда размер содержимого не превышает размера контрола по соответствующей координате;
    • C#/{Paintbox}: перерисовка контрола в процессе перемещения мыши не шла (например, при выделении текста мышью в наследнике {Paint_lines});
    • IDE/Designer: для коротких текстовых меток контролов {Label}, не генерировался код в конструкторе, добавляющий метки. В результате потерялись все короткие Alias'ы меток {Label} на формах (например, в самом IDE);
    • IDE/Designer: ряд улучшений/исправлений (уникальность имен меток при их создании, соответствие имен меток их первоначальным текстовым меткам (Alias-ам); скрытие ненужных свойств, не соответствующих невизуальнм контролам, формирование кода генерации меток, генерация кода в некоторых других случаях и пр.);
    • Delphi/{Form}.key_down / key_up events - ошибочно, обработка клавиш прекращалось в случае, если возвращалось значение 'DECLINE'; В то время как в случае успешной обработки клавиша в событии формы считалась необработанной и повторно передавалась на обработку уже от имени активного контрола (с соответствующими значением sender / sender_alias); Это можно было даже обработать корректно, если проанализировать отправителя, но такое поведение в принципе  неверное - пришлось исправить (хотя возможны последствия в уже выстроенных приложениях);
    • Delphi/VCL: {Form} - вычисление размеров расширяемых вниз контролов для случаев, когда контроля не последний в колонке (для колонок, выровненных влево/вправо/по центру);
    • C#/{Paintbox}+{Paint_...} - улучшена (исправлена) работа прокрутки - более корректное вычисление позиции, с использованием Math.Round в C#, уточнено выставление LargeChange для линеек;
 

29.11.2020 - версия 1.4.7

  • Изменения:
     
    • IDE/Designer: меню для доступа к событиям и меню вынесены на отдельные кнопки в верхнем ряду главного меню;
    • IDE/Designer: в случае неотредактированного имени метки {Label}, к ее имени автоматически добавляются случайные последовательности цифр (с невероятной вероятностью уникальные);
    • {Paintbox}/C#: добавлено свойство Handle_tab (по умолчанию =TRUE), контролирует, будет ли клавиша табуляции при вводе восприниматься как символ для ввода или как клавиша для управления переходами между контролами на форме;
    • Компилятор: добавлен ключ /warn80, при его включении в параметры сообщения об ошибке при слишком длинной строке кода заменяются предупреждениями;
  • Исправления:
     
    • IDE/Designer: исправлено/улучшено редактирование значения в поле текстового значения в свойствах контрола (устранено перемещение каретки в начало текста после ввода каждого символа, при непустом начальном значении);
    • IDE/Designer: исправлено вычисление размеров формы на основе размеров контролов и колонок;
    • IDE/Class wizard: исправлена генерация секции IMPORT (прежде приходилось значительную часть секции исправлять вручную);
    • IDE AL4/Designer: исправлено добавление #QU в строки в сложных выражениях с конкатенациями (если кавычек четное число, и есть кавычки по краям строки, строка не подлежит авто-корректировке);
    • C#: исправлено клонирование структур, содержащих фиксированные массивы структур;
    • Delphi/VCL: Get_working_dir - не завершал возвращаемую строку символом  '\';
    • C#: табуляция по клавише TAB исправлена для контролов на основе {Paintbox} ({Paint_lines}, {Paint_tabs}, {Paint_table}, {Paint_turtle}, ...);
    • C#: события {Form}.enter / leave исправлены (но только для {Paint_lines} / {Paint_table});
    • C#: {Date}.Add_months - исправлен для случаев 30-дневных и более коротких месяцев (.net не корректирует такие даты автоматически);
    • Delphi: Исправлена генерация присваивания начального значения полю-элементу фиксированного массива при создании структуры;
 

21.11.2020 - версия 1.4.6

  • Изменения:
     
    • Добавлена опция /!platform - прекращает выдачу предупреждений "Platform dependent";
  • Исправления:
     
    • C#: {File_path}.Catalog в случае пути корневой папки без завершающего '\' не работал корректно;
    • C#: для случаев, когда в методе сам объект уничтожает себя до завершения тела метода, автоматическое увеличение ссылок на объект THIS предусматривается для тех методов, с которыми может произойти такое удаление объекта из удерживающих массивов;
    • В случае присваивания значения фиктивной псевдо-переменной NONE, и дальнейшего использования в левой части присваивания псевдо-переменной .. (та же переменная), анализатор совместимости операндов считал левую часть выражением типа BOOL (теперь сообщается о невозможности повторно присвоить значение переменной);
    • Delphi+FPC: генерация кода присваивания значения элементу фиксированного массива с границами, заданными перечислением A[{перечисление}];
    • Исправлена избыточная очистка локальных фиксированных массивов;
    • {Date_time}.Hours_diff исправлена;
 

12.11.2020 - версия 1.4.5

  • Изменения:
     
    • IDE AL4: добавлена поддержка {Paint_table};
    • {Paint_table}: добавлена функция New_paint_table;
  • Исправления:
     
    • C#: загрузка изображений (например {Jpeg}.From_stream) не работала, если не использовался класс {Bmp} (требование в коде заменено на использование класса {Bitmap});
    • C#: исправлена генерация кода инициализации полей - фиксированных массивов структур (генерировался массив нулевого размера);
    • Delphi+FPC: исправлена работа с полями-фиксироваными массивами структур в структурах;
    • Delphi/VCL: {Bitmap}.Can_load_format("GIF");
 

6.11.2020 - версия 1.4.4

  • Изменения:
     
    • {Form}.Set_state({state} Normal\minimized\maximized); (Корректная максимизация без перекрывания панели задач в Windows, в том числе в мульти-мониторной системе);
    • Delphi KOL/VCL: {Form}.Set_no_frame, {Form}.Set_no_border улучшены (и исправлены) оставляя только тонкую рамку вокруг окна и предотвращая возможность изменения размера окна мышью;
  • Исправления:
     
    • {Form}.Set_no_frame(FALSE) исправлен для Linux;
    • {Thread} исправлен для Linux (cthread добавляется первым в список uses в dpr-файле проекта);
    • Android: компилируемость (опечатки в AL4_drawing.java);
    • Delphi/KOL: не было обработчика события {Form}.moved;
    • Delphi/KOL + /$KOLGRAPHIC: обеспечивается свойство проекта SearchPath=... в dof-файле при генерации проекта, что избавляет от необходимости при открытии проекта вручную добавлять путь к папке KOLGraphic при открытии сгенерированного проекта в IDE Delphi;
    • Delphi VCL/FPC: компилируемость визуальных проектов при неподключенных {Jpeg}, {Png};
 

4.11.2020 - версия 1.4.3

  • Изменения:
     
    • Добавлены классы {Bmp}, {Jpeg}, {Png} для контроля необходимости подключения кода, отвечающего за загрузку/сохранения изображений соответствующего формата в/из файлов/потоков байтов. Теперь загрузка должна выполняться в форме (например):
      {Bitmap} B|... = {Jpeg}.From_stream(S, 'FULL')
      или (например):
      B = {Png}.From_file(Path, 'HALF')
    • Добавлены классы {Pcx}, {Tiff}, {Tga}, {Psd}, {WebP} для организации чтения или чтения/записи соответствующих графических форматов в тех целевых платформах, где есть поддержка для этих форматах (в основном это Free Pascal/Lazarus с включенной опцией /$BGRABITMAP и Delphi/KOL - PNG без опций или с опцией /$KOLGRAPHIC, часть с опцией /$KOLGRAPHIC) (WebP поддерживается нативно на платформе Android, для FPC требуется библиотека libwebp32.dll или libwebp64.dll), для {Gif} сохранение возможно только для C# или Delphi/VCL с опцией /$RXGIF;
    • Delphi: добавлена опция /$RXGIF (может использоваться в виде /$RXGIF=путь, в этом случае не используется переменная среды RxLib), с этой опцией можно не использовать команды /COPY-BIN для копирования конкретных файлов из RxLib\Units - путь на эту папку включается в опции проекта (ключ компилятора -U);
      С опцией /$RXGIF в Delphi/VCL возможно сохранение gif-файлов;
    • Для классов, обеспечивающих чтение/запись графических форматов, добавлены функции Can_save / Can_load. Например,
      CASE {Gif}.Can_save ?
          
      {Gif}.To_file(bitmap, path) ;
    • Delphi/KOL: при наличии опции /$ICON=... в коде создания формы для нее автоматически загружается иконка приложения;
    • Delphi/FPC: добавлена опция /$DEFINE=aaa;bbb;ccc , позволяющая определить передаваемые компилятору Delphi дополнительные определения символов условной компиляции;
  • Исправления:
     
    • Android: компиляция кода для клонирования структур, содержащих массивы ссылок на объекты;
    • Free Pascal/Lazarus: опция ofOverwritePrompt добавлена для создаваемого TSaveDialog в реализации класса {Dialog_file};
    • FPC/Lazarus: исправлена функций {Bmp}.From_clipboard для опции /$BGRABITMAP;
    • Delphi: исправлена генерация ASSERT (проблема со случаями, когда используются в форматированной строке функции, возвращающие объект);
 

28.10.2020 - версия 1.4.2

  • Изменения:
     
    • FPC: Добавлена поддержка BGRABitmap на уровне компилятора/библиотек: добавлена опция /@BGRABITMAP, в случае ее наличия используется пакет BGRABitmap по пути из системной переменной среды BGRABitmap_units;
    • Добавлен запрет на игнорирование результата функции, возвращающего структуру (т.е. результат такой функции нельзя присвоить псевдо-переменной NONE);
  • Исправления:
     
    • Delphi/FPC: устранены утечки объектов (и связанных с ними ресурсов и памяти) при использовании в качестве параметров функций выражений, являющимися обращениями к функциям, возвращающим объекты, а так же при "присваивании" результата такой функции псевдо-переменной NONE;
    • {Form}.mouse_wheel: согласованы скорости прокрутки для разных целевых платформ (C#/Delphi-KOL/VCL/FPC-Windows/Linux);
 

25.10.2020 - версия 1.4.1

  • Изменения:
     
    • При декларации локальной переменной, в том числе массива, допускается в той же строке применить к ней функцию, например:
      INT a|rray_of_numbers[].Allocate(20)
      STR cat|alog_files[].Get_catalog(path)

      и т.п.;
  • Исправления:
     
    • Компилируемость визуальных приложений под Linux (с использованием Free Pascal/Lazarus) восстановлена, в том числе исправлены проблемы с использованием DateTimePicker в в случае, если на Linux развернут дистрибутив CodeTyphon;
    • IDE AL4: код адаптирован к новым изменениям в языке (исправлен, компилируется и рабочий);
    • IDE AL4 - компилируется и запускается в Linux;
 

21.10.2020 - версия 1.4.0

  • Изменения:
     
    • При сканировании числа, завершающегося точкой, выполняется проверка символа за точкой на предмет цифры до принятия решения о том, что встретилось вещественное число. Теперь допустимы конструкции вида 1.ShiftL(n) в выражениях, например;
    • Разрешено без добавления модификатора BAD использовать вложенные блочные операторы 4-го уровня (считая FOR / CASE), если они содержат только один простой оператор. Например, допускается в операторе FOR третьего уровня вложенности записать:
      CASE condition ? BREAK i ;
    • Запрещено использовать операции побитной логики (&, |, ^) на одном уровне в выражении с арифметическими операциями (+, -, *, /, %) без явного указания приоритета одних операций над другими скобками;
    • Класс {Gif} доработан (реализована собственная реализация распаковки кадров, не зависящая от возможностей целевой платформы);
    • Android: Класс {Global_var} реализован для Android;
    • Конструкция LIKE ... , EXCEPT - отменена; Синтаксис и семантика конструкции LIKE ..., BUT полностью изменена: после BUT размещается список замен вида (из ==> во_что) [* N]; при этом множитель N должен точно соответствовать количеству таких замен;
  • Исправления:
     
    • Декларация локальной структурной переменной без присваивания значения приводила к автоматическому присваиванию NONE-значения (в случае, когда структура реализуется как динамическая, из-за наличия полей типа строк или объектов или динамических структур): исправлено на создание экземпляра структуры;
    • C#: Инициализация фиксированного массива - члена класса или структуры: использовался размер 0 вместо определенного в коде;
    • Delphi/FPC: устранена ошибка округления, приводившая в некоторых случаях к смещению изображения на 1 пиксель, при переводе единиц измерения из поинтов в пиксели;
 

11.10.2020 - версия 1.3.9

  • Изменения:
     
    • Дополнительные требования для обязательного импорта модулей, чьи функции вызываются в классе;
    • При переопределении (OVERRIDE) методов можно добавлять дополнительные имена к функции через || и |, как обычно при определении нового имени;
    • Добавлен класс {Gif} для загрузки и отображения анимированных gif-файлов (поддерживается в настоящий момент для C#/.NET, Delphi/VCL, Delphi/KOL);
  • Исправления:
     
    • C#: в много-поточном приложении при включенной отладке (опция /debug) происходили ошибки индексирования в массиве Stack_functions;
    • Delphi: при вызове функции из неимпортированного класса формировался код, который не компилировался в Delphi - добавлена выдача ошибки, требующая добавления в список импорта требуемого класса;
    • C#: загрузка иконок и курсоров (включая цветные курсоры);
 

2.10.2020 - версия 1.3.8

  • Изменения:
     
    • C#, Delphi: доработан класс {Array_str} для работы с частями массива строк;
    • Android: реализованы классы {Thread}, {Array} для андроида;
    • Добавлено демо-приложение AL4View - просмотр изображений.
  • Исправления:
     
    • IDE AL4: исчезновение единственной выровненной по клиентской области формы ('CLIENT') колонки на форме в дизайнере формы (если не была задана фиксированная ширина колонки);
    • Delphi: генерация кода для инициализации структур (STRUCTURE) в некоторых случаях;
    • Delphi/VCL: утечка событий (TEvent) - в реализации {Thread};
 

19.09.2020 - версия 1.3.7

  • Изменения:
     
    • C#, Delphi: добавлен класс {Array} для работы с частями массива в потоках (и отказа от связки {Slice} + низкоуровневая поддержка под-массивов на уровне нативного системного кода);
  • Исправления:
     
    • C#: RotateL, RotateR;
    • C++(gcc): EnumAsInt;
 

3.09.2020 - версия 1.3.6

  • Изменения:
     
    • Справка по классам: при формировании справки улучшено форматирование: добавлена вставка иллюстраций из диаграмм, подготовленных в Tools\Diagram_draw и вставленных в комментарии в поддерживаемым IDE формате //[diagram: <имя-диаграммы>].
      Так же: исправление ссылок на базовый класс в сгенерированной справке.
  • Исправления:
     
    • Gcc/Windows: консольный вывод;
    • Компиляция перегруженных функций: теперь игнорируются все ошибки, возникающие при прогоне недействительных ветвей операторов CASE ? {{..., в которых выбор ветви зависит от типов параметров (текущей компилируемой сигнатуры заголовка функции);
    • C#, Delphi: генерация кода перехвата TRAP для поля в операции создания нового объекта (с перехватываемым полем);
       
 

14.08.2020 - версия 1.3.5

  • Изменения:
     
    • Продолжается работа над режимом Pascal-подобного синтаксиса;
    • {Console}.Console_ANSI_colors, Fg, Bg - используются команды установки цвета RGB в консоли (для Windows отыскивается ближайший цвет среди доступных 16 цветов); тем самым исключено влияние яркости цвета шрифта на цвет фона;
    • Поиск статических функций в базовых классах импортированных модулей не выполнялся, требовалось импортировать сам класс, содержащий требуемые статические функции. Теперь достаточно импортировать любой класс-наследник;
    • IDE AL4:
       
      • в выпадающем списке закладок, они теперь отсортированы лексикографически, а не в порядке расположения;
      • улучшены диалоги при изменении/удалении открытых файлов на диске другой программой;
      • ускорена печать внутри комментариев //... (отменен поиск вариантов для этого случая);
      • улучшена загрузка исходных кодов в кодировке utf-8 без BOM;
    • {Paint_turtle}: добавлены команды nnnC, nnnA для поворота на произвольный угол (с точностью до 1 градуса);
    • Справка по классам: при формировании справки улучшено форматирование, описание классов и функций извлекается из комментариев в исходном коде (с учетом языка //-EN, //-RU, при отсутствии нужного языка, берется английский);
  • Исправления:
     
    • Gcc/Windows: консольный вывод;
    • Компиляция перегруженных функций: теперь игнорируются все ошибки, возникающие при прогоне недействительных ветвей операторов CASE ? {{..., в которых выбор ветви зависит от типов параметров (текущей компилируемой сигнатуры заголовка функции);
       
 

04.08.2020 - версия 1.3.4

  • Изменения:
     
    • Продолжается работа над режимом Pascal-подобного синтаксиса;
  • Исправления:
     
    • C#: mouse_wheel возвращал слишком малое значение прокрутки колеса в случае высокоточной мыши (Microsoft);
    • Gcc: исправления в генерации кода (структуры, массивы структур);
       
 

28.07.2020 - версия 1.3.3

  • Изменения:
     
    • Системные функции (Clear, Count, Index, ...) теперь распознаются в том числе в верхнем регистре, и могут вызываться в классической форме ( Count(A[]), CLEAR(A[]), INDEX(S), Delete(A[], N) и т.п.);
    • Добавлена системная функция ALLOCATE(A[], INT New_size);
    • Начато добавление визуальных компонентов {Paint_tree} (аналог TreeView) и {Paint_table} (аналог ListView в режиме таблицы);
    • Продолжается работа над режимом Pascal-подобного синтаксиса и миграцией старых проектов на AL-IV с использованием этого режима:
       
      • Добавлена возможность в произвольном выражении заменять произвольный идентификатор другим идентификатором в форме Ident1{@Ident2};
      • Добавлена возможность именовать модуль дополнительными именами, обеспечивая возможность тем самым для основного класса модуля иметь имя, отличное от имени модуля, например:
        unit unitMainSF{@||FormMain|SF};
      • Обеспечивается поиск типа самого класса в этом же классе, в том числе без учета регистра для случая синтаксиса Pascal;
      • Обеспечивается поиск функций, полей, констант без учета регистра для случая синтаксиса Pascal как в используемом, так и в использующем классе;
      • Ведутся работы по добавлению возможности миграции KOL/MCK-проектов;
         
 

20.07.2020 - версия 1.3.2

  • Изменения:
     
    • Улучшения в распознавании синтаксиса Pascal:
       
      • Директивы условной компиляции (*$ifdef al4*) и  ... (*$else*) ... (*$endif*) могут использоваться внутри практически всех конструкций и даже выражений (но сами директивы должны быть в отдельных строках кода);
      • Исправления в конвертации операторов if ... else if ... else if ... и case ... of ...;
      • Блок uses в части implementation также обрабатывается, как и основной uses;
    • Добавлены внятные инструкции по конверсии существующих проектов Delphi/VCL в AL-IV с использованием новой возможности по прямому распознаванию синтаксиса языка Pascal (см. Как начать программировать на AL-IV, ПРИЛОЖЕНИЕ 2. Постепенный переход на AL-IV в существующем проекте);
 

15.07.2020 - версия 1.3.1

  • Изменения:
     
    • Изменения в распознавании синтаксиса Pascal:
       
      • используются директивы условной компиляции (*$ifdef al4*) и (*$ifdef al4code*) ... (*$else*) ... (*$endif*) для переключения между Паскаль-кодом, Паскаль-кодом для AL-IV и AL-IV кодом, вставляемым без изменения в финальный код;
      • Определения Delphi_units_to_al4.convert и Delphi_types_to_al4.convert вынесены в файлы (и анализируются все такие файлы по входным директориям);
      • Существенно сокращено число предупреждений по коду, сформированному при преобразовании из Pascal в AL-IV автоматически;
      • Выполнено преобразование тестового студенческого проекта, написанного на Delphi/VCL (без звука, перевод на Android не полностью завершен, но приложение запускается на устройстве);
    • {Bitmap}: загрузка изображений не только из файла, но и из {Stream} (bmp, png, jpg, gif - набор поддерживаемых типов все еще зависит от платформы);
  • Исправления:
     
    • Ряд исправлений в автоматической трансформации кода Pascal;
    • Delphi/VCL: {File_path}.Recycle;
 

3.07.2020 - версия 1.3.0

  • Изменения:
     
    • Добавлена возможность определять константные массивы (с элементами базовых типов BOOL, BYTE, INT, REAL, STR);
    • Синтаксис: "чистая" декларация локальной переменной функции без присваивания ей значения более не считается простым оператором, и не учитывается при подсчете операторов в блоке (таким образом, не влияя на ограничение 7 простых операторов + 7 блочных операторов на блок); 
    • Добавлена возможность распознавать код с синтаксисом, подобным языку Pascal (путем добавления в начало файла спецификации [SYNTAX="PASCAL"]. Код в стиле Паскаль механически преобразуется в код AL-IV, после чего компилируется. При этом действует ряд послаблений в правилах, позволяющих использовать ранее написанный в Delphi/Free Pascal код (хотя, возможно, несколько модифицированный) - так, чтобы он по-прежнему мог компилироваться в составе своего проекта (т.е. появляется возможность постепенной плавной миграции легаси-проектов в AL-IV, и соответственно, на любые поддерживаемые сейчас и в будущем платформы);
      Примечание: эти работы не закончены - требуется добавить дизайнер форм, отработать технику трансляции на реальных проектах, оформить документацию и прочее.
  • Исправления:
     
    • Оптимизатор: слияние переменных не допускается для случаев, когда вторая переменная впервые используется в операторе CASE или FOR (иначе был шанс, что она оказалась бы неверно инициализирована, точнее - сохранено последнее значение предыдущей переменной);
    • Dok_sources\make_docs: генерация справки по классам исправлена/улучшена;
 

21.06.2020 - версия 1.2.0

  • Изменения:
     
    • IDE/Project wizard: добавлена возможность использовать опцию /[секция] и размещать опции для всех компиляторов в одном конфигурационном файле;
    • Небольшие уточнения по синтаксису оператора CASE ? {{...}}: ... ... для условной компиляции в зависимости от сигнатуры типов параметров перегруженной функции: требуется указывать для каждого типа не только номер сигнатуры, но и всю сигнатуру через разделитель '/', например {{1/INT/INT, 2/REAL/REAL}};
    • Запрещено использовать в качестве переменной цикла структуру (т.е. не допускается оператор цикла по массиву структур - его следует преобразовать в цикл по диапазону индексов, и структуру получать из массива корректным способом - с использованием Clone или Discard);
  • Исправления:
     
    • C#: компиляция кода для функции клонирования полей структур, являющихся "зацикленными" массивами ('CLAMP');
    • Delphi: компиляция кода для работы с полями структур, являющихся фиксированными массивами (в том числе баг с ошибкой индексации в фиксированных массивах, основанных на других массивах - срезках);
    • Проблемы с компиляцией операторов вида X.Y...Z = W (фиксирующих целевой объект/структуру X.Y для присваивания значений его полям в последующих операторах ...Zi = Wi);
    • Компиляция функций с модификатором DEBUG: не просматривались импортированные классы с модификатором DEBUG в поисках функций;
    • Delphi/FPC: устранен ряд утечек памяти при работе со структурами и вторичными фиксированными массивами;
 

10.06.2020 - версия 1.1.1

  • Изменения:
     
    • Добавлен класс {Socket} (поддержка TCP/UDP сокетов для всех поддержанных платформ и языков - проверено для TCP, для UDP пока может не работать);
    • Gcc: добавлен ключ компиляции $L=имя, позволяющий подключать дополнительные библиотеки (например, wsock32);
    • Android: добавлены опции /$permission.INTERNET, /$permission.CAMERA и еще около 100 аналогичных - для указания необходимости выдать приложению соответствующие разрешения (дополнительные опции могут быть добавлены в кодогенератор по аналогии);
  • Исправления:

     

    • Delphi: генерация кода RTTI исправлена;
    • {File_path}: рассогласование между кодом различных платформ устранено;
    • Русский код: трансляция из русского варианта языка исправлена (восстановлен файл Russian... .lng в корневой папке, разнесены переводы модулей, вынесенных из {System_functions} в {Hardware}, {Fake_parameters}, {Console});
    • FPC/Lazarus: компиляция {File_path}.Recycle для старых версий Lazarus (1.6);
    • Gcc/Linux: компиляция компилятора;
 

4.06.2020 - версия 1.1.0

  • Изменения:
     
    • Отменено ограничение на количество параметров функции (не требуется добавлять модификатор BAD при использовании не-нативных функций с более чем 3 параметрами);
    • Добавлено требование при вызове не-нативной функции с большим количеством параметров как минимум с четвертого параметра использовать форму Имя = значение для передачи параметров (допускается передавать параметры в этой форме с любого параметра раньше четвертого);
    • Добавлена возможность создавать "перегруженные" функции с несколькими наборами типов параметров, например, FUN Find_index_max({INT,REAL,STR} A|rray_to_search_max, INT Start|_from, INT Last|_index_where) ==> INT или FUN Max({INT,REAL,STR} A|_parameter1, {INT,REAL,STR} B|_parameter1) ==> {INT,REAL,STR};
      для обеспечения возможности иметь несколько отличный код добавлена особая форма оператора ветвления, например CASE ? {{1}}: ... {{2,3}}: ... ;
  • Исправления:

     

    • C#: работа с {Bitmap}, загруженным из индексированного формата пикселей (gif) - GraphicsFromImage не работал, решено пересозданием объекта изображения такого же размера с переносом на него загруженной картинки;
 

31.05.2020 - версия 1.0.11

  • Изменения:
     
  • Исправления:

     

    • C#/Интерпретатор: при создании нового объекта не учитывалась возможность присваивания значений промежуточным переменным, в результате такое значение ошибочно присваивалось первому полю объекта/структуры;
    • C#/Интерпретатор: параметры, указанные в опции /param[...] не передавались запускаемой программе - вместо этого она получала параметры, переданные самому интерпретатору;
    • Компилятор: если тип (перечисление или структура) для переменной указывался в виде точной спецификации {Class}.{type}, то не анализировалось компилятором наличие такого типа в этом классе, как и наличие самого класса, в результате в отсутствие импортированного класса {Class} или типа {type} в нем использовался встроенный тип BOOL;
    • {Bitmap}.Bitmap_from_clipboard: Width и Height полученного из буфера обмена объекта изображения не устанавливались, считывалось значение 1 (хотя рисунок можно было нарисовать на канве, сохранить и т.п.);
    • IDE AL4/Class wizard (некоторое количество мусора в генерируемом классе, в секции IMPORT);
    • IDE AL4/Form Designed (генерация события menu_item - избыточные параметры, оставшиеся от "события" menu);
    • Компиляция самокомпилирующего компилятора восстановлена: после ряда последних реструктуризаций кода цепочка [компиляция ALIV.csproj в MSVStudio] ==> [_1_compile_cs_(by_Primary).cmd] ==> [_1a_compile_CSharp_build_(by_Compiled).cmd] снова переставала работать (хотя это и не мешало использовать уже собранный компилятор из zip с дистрибутивом).
 

24.05.2020 - версия 1.0.10

 

21.05.2020 - версия 1.0.9

 

20.05.2020 - версия 1.0.8

  • Изменения:
     
    • Delphi/VCL: Вычищен код {AL4_form} от {$ifdef/ifndef FMX, ANDROID, MOBILE_...};
    • Delphi: Небольшие оптимизации сгенерированного кода (некоторое уменьшение размера приложения);
    • {String_functions|_common} - объединен из нескольких вариантов, предназначенных для различных платформ, специфичный для этих платформ код сохранен в соотвествующих классах {NATIVE_String_functions};
    • Абстрактные классы, не имеющие предков или потомков, более не требуют инициализации NONE-объектов (это обычно наборы функций, для которых не требуется экземпляр класса);
  • Исправления:

     

    • C#, Delphi: {Fake_parameters}: проблемы компиляции проектов, использующих привязку по типам данных и операции перетаскивания файлов их проводника;
    • {Checkbox}: проблема с компиляцией при использовании радио-групп (метод radio_select был перемещен из {Form}, но не проверена его компилируемость;
    • IDE: при изменении файла на диске другой программой IDE сохранял свою версию, игнорируя эти изменения (при этом показывая диалог загрузки - но в итоге его же собственный вариант и загружался);
 

16.05.2020 - версия 1.0.7

  • Изменения:
     
    • Все функции и типы данных, относящиеся к работе с консолью, перенесены в отдельный класс {Console} (из {System_functions});
    • Добавлены функции {Console}.Console_ANSI_colors(BOOL), Support_console_ANSI_colors ==> BOOL, Fg|Foreground_color_console|Escape_sequence({colors}), Bg|Background_color...({colors}), Con|sole_special_color_control({special_con}). Последние три предназначены для использования в правой части оператора <<, например:
      << 'SAVE'.Con 'RED'.Fg 'YELLOW'.Bg "ОШИБКА!" 'PREV'.Con #NL
      (Пока нет поддержки в Android);
    • Все функции и типы данных, относящиеся к работе с "железом" (процессор, память, диски, электропитание) перенесены из {System_functions} в класс {Hardware};
    • Delphi/FPC: переработан генератор кода, в результате выходной исполнимый файл уменьшен на несколько Кбайт;
  • Исправления:

     

    • Delphi/KOL: принудительное подключение модуля {System_functions} устранено, размер приложений - от 9 Кбайт;
    • Free Pascal: Replace - для случая особых значений наподобие 0xA0;
    • Free Pascal: {Button} создается в режиме AutoSize = true, если родительская колонка выровнена 'TOP' / 'BOTTOM' (решает проблему кнопок с длинной надписью);
    • Компиляция проекта с опцией /$ALLTESTS не выполнялась при отсутствии хотя бы одного теста;
 

7.05.2020 - версия 1.0.6

  • Изменения:
     
    • Компилятор: добавлен параметр /[section], позволяет отфильтровать из файла конфигурации, заданного параметром /@ path только указанную секцию (если не указан, используется первая секция без имени и указания секции); Данная опция позволяет сократить число файлов конфигурации для запуска компилятора;
    • В именах элементов перечислений разрешено использовать символ "-":
      'some-item-with-minus-in-name';
    • Разрешено использовать пустые скобки при вызове функции / метода без параметров:
      foo()
    • Компилятор: классу-другу разрешено записывать / добавлять значения в поля объекта, предназначенные "только для чтения";
    • Компилятор: запрещено передавать структуры в "нативные" функции в качестве параметров (и возвращать в качестве результатов);
    • Компилятор: модификатор NEW для функций, возвращающих не объект класса, считается ошибкой;
    • Delphi/VCL, Free Pascal/LCL (Windows): центрирование файловых диалогов, окна сообщения {Form}.message;
  • Исправления:

     

    • Интерпретатор: исправлена запускаемость некоторых проектов (проблема была с некоторыми нативными функциями, при вызове которых передавались структуры);
 

22.04.2020 - версия 1.0.5

  • Изменения:
     
    • {Scene|2D} - фактически завершен (пример Test_paintbox переведен на использование {Scene}) ;
  • Исправления:

     

    • Delphi/Free Pascal: генерация кода, связанного с созданием структур (STRUCTURE) - не инициализировались поля-ссылки на объекты, неверное работало клонирование массивов простых структур;
    • Java/Android: исправлена инициализация структурных полей в объектах и структурах;
 

21.04.2020 - версия 1.0.4

  • Изменения:
     
    • {Bitmap}: добавлена функция Bitmap_from_clipboard ==> {Bitmap};
    • Добавлен контрол {Scene|2D} для рисования "оффлайн" (принцип создания объектов - графических примитивов, которые далее отображаются без вызова события paint); в том числе реализуется принцип оффлайн-анимации (задается участок времени, на котором примитив существует, его начальные и конечные координаты, размеры, угол поворота - анимация выполняется так же без учета вашего кода; - работа со {Scene} пока в стадии бета-тестирования;
  • Исправления:

     

    • Delphi/KOL: добавлены проверки на валидность Canvas / Bitmap в {AL4_drawing};
    • Java/Android: исправлена компиляция проектов (были добавлены новые функции, потребовались изменения в {AL4_form}, {AL4_drawing});
 

15.04.2020 - версия 1.0.3

  • Изменения:
     
    • Добавлен класс {Zlib} для компрессии/декомпрессии файлов (только C#, используется DeflateStream, доступный с FrameWork 4.5);
    • C#: Добавлено распознавание значение $FRAMEWORK=4.5 / 4.5.1 / 4.6.1;
  • Исправления:

     

    • Delphi/KOL: предотвращено многократное срабатывание события {Form}.mouse_wheel;
    • CONST REAL: в случае целочисленного по форме значения, использовалась константа 0.0;
    • Delphi/VCL, Delphi/FPC: проблемы минимизацией форм в панель задач (вместо превращения в иконки на рабочем столе в стиле Windows 3.x);
    • Free Pascal: {Bitmap}.Load_png (хотя без прозрачности);
 

4.04.2020 - версия 1.0.2

  • Добавлено:
     
    • В качестве демонстрационно-практического (и полезного в эти дни) начат открытый проект Draft Notes для помощи студентам, слушающим лекции/курсы/семинары онлайн. Приложение позволяет захватывать указанную часть экрана, сохранять ее в виде изображений по простому клику/тапу и быстро добавлять к ним примечания в виде скетч-рисунков, линий, текстовых надписей. Предназначено как для работы на большом мониторе или в мульти-мониторной среде, так и на единственном мониторе, с использованием клавиатуры, тач-скрина, графического планшета, мыши и т.п. Итоговое приложение вполне функционально, содержит чуть более 1200 строк кода на AL-IV и может компилироваться всеми поддерживаемыми целевыми компиляторами (в том числе FPC для Linux и Java для Android - хотя в последнем случае необходимо еще решить ряд проблем и переориентироваться на прямую работу с внешней камерой или подключаемым источником видео).
          В случае C# работает чуть медленнее. В случае Delphi работает быстрее и поддерживает все Windows платформы. В различных вариантах (в зависимости от целевого языка/конечной платформы) поддерживает разные наборы форматов изображений (не во всех вариантах графической библиотеки есть поддержка gif, png, и в случае не-Windows может не быть поддержки bmp).
          В настоящее время проект выложен как самостоятельный по ссылке: https://sourceforge.net/projects/draft-notes
    • Добавлена возможность под Linux компилировать с помощью fpc, полученного в результате установки CodeTyphon IDE. Для этого:
       
      • в настройках опций компиляции компилятора для linux AL4FPCCompiler на стороне Windows следует указать параметр
        /$LINUX_LAZARUS_HOME=/usr/local/codetyphon/typhon/
      • как обычно на стороне Linux, создать переменную окружения $LAZARUS_HOME с таким же путем в качестве значения
      • и дополнительно дописать в переменной $PATH путь к fpc из поставки CodeTyphon (пути не обязательно именно такие):
        PATH=$PATH:/usr/local/codetyphon/fpc/fpc64/bin/x86_64-linux/
        export PATH
  • Изменения:
     
    • Небольшие добавления:
       
      • {Form}.Set_mouse_cur|sor_position;
  • Исправления:

     

    • Delphi: Незначительные исправления в библиотеках (функция {Form}.Client_size);
    • Delphi/VCL: сворачивание форм только в панель задач;
 

29.03.2020 - версия 1.0.1

  • Изменения:
     
    • Отменено правило игнорирования "пустого" оператора ввода >> в режиме тестирования.
    • Генерация приложений для Linux с использованием g++:
       
      • компилятор AL4->gcc собирается на Windows и Linux с использованием компилятора AL4->gcc собранного компилятором, изготовленным с помощью компилятора AL4->C#;
      • позволяет создавать консольные приложения размером от 34 Кбайт;
 

20.03.2020 - версия 1.0.0

  • Изменения:
     
    • Добавлен запрет на использование на одном уровне выражения обращений к функциям, потенциально имеющим побочные эффекты (а так же к рекурсивным функциям), и полям объектов (т.е. запрещено на одном уровне выражения обращаться к более чем одной такой функции или к такой функции и к полю). В том числе, аналогичное правило распространяется на операцию добавления элемента в массив-поле, если добавляемое значение вычисляется с использованием функций. Данное злое правило гарантирует корректную работу кода, независимо от предпочтений целевого языка в отношении порядка вычисления операндов в выражениях.
  • Исправления:
     
    • Компиляция Delphi/Free Pascal с оптимизацией (могли не обнаруживаться обращения к динамическим массивам);
       
 

18.03.2020 - версия 0.99.9

  • Изменения:
     
    • Частично восстановлено направление компиляции кода в C++ (используется только gcc - под Windows для компиляции консольных, в linux - консольных и GUI(X11) приложений). Минимальный размер приложения Hello_world около 86Кб (MinGW/Windows). На данный момент работают только консольные приложения для Windows;
    • IDE/Designer: добавлена возможность при перетаскивании контролов вставлять их первыми в целевую колонку (перед первым компонентом в колонке);
    • Добавлена утилита Tools\File2Hex для перевода бинарного файла в строки в 16-ричном виде (для вставки в код после END и использования во время выполнения для восстановления бинарного файла из hex-строк, например, для извлечения графических ресурсов, используемых в программе);
  • Исправления:
     
    • IDE/Designer: улучшено отображение в режимах "показывать имена контролов", "показывать текстовые метки";
    • IDE: исправлен/дополнен перевод на русский язык;
 

3.03.2020 - новая версия 0.99.8

  • Изменения:
     
    • {Form}.new_column: добавлена возможность создавать колонку, вложенной в другую ранее созданную колонку (в позиции обычного визуального компонента); Поддержка этой возможности может зависеть от платформы, и при отсутствии этой возможности колонка создается обычным способом, в зависимости от порядка создания м указанного выравнивания. В настоящее время поддержка добавлена для C# и Delphi/VCL, Free Pascal и частично в Android, тогда как Delphi/KOL пока не поддерживаются;
    • IDE/Designer: добавлена возможность управлять параметрами Nested и After_control, позволяющими создать заданную вложенную колонку после определенного компонента на форме;
  • Исправления:
     
    • IDE: исправлена перезагрузка файла  после изменения его на диске другой программой или другим экземпляром IDE;
    • IDE/Designer: восстановлен пропавший элемент для визуального выбора выравнивания колонки;
 

1.03.2020 - версия 0.99.7

  • Изменения:
     
    • IDEAL4: полностью отделен от кода компилятора (меньше размер, быстрее компилируется); в связи с этим произошла существенная реорганизация исходных кодов всего проекта AL-IV (не забудьте полностью удалить прежние исходные коды перед распаковкой дистрибутива);
  • Исправления:
     
    • Free Pascal/Linux: исправлена медленная работа компилятора при работе в сетевой (открытой на доступ на другой машине) директории;
    • {Form}, {Dialog}: при отображении модального диалога в обработчике menu_item, все события в родительской форме получали неверную ссылку на sender [IDE: устранена непрорисовка окна редактора, пока вызван диалог About или выбора шрифта];
    • Интерпретатор: восстановлена компилируемость / работоспособность интерпретатора, в том числе на визуальных проектах (Lines, OpenGL demo);
    • IDE/Desiner: формировались некорректные строки в коде CONSTRUCT при редактировании многострочных значений для комбобоксов;
 

27.02.2020 - версия 0.99.6

  • Изменения:
     
    • IDE/Designer: добавлена возможность множественного выделения компонентов (SHIFT + клик, SHIFT + перетаскивание), а так же возможность перетаскивания компонентов на новое место мышью (ЛКМ);
  • Исправления:
     
    • IDE/C#: еще меньше мельтешений при работе в Дизайнере форм;
    • Free Pascal/Linux: восстановлена (снова) возможность компилировать компилятор для Linux, и возможность использовать его в Linux для существующих демо-проектов;
 

25.02.2020 - версия 0.99.5

  • Изменения:
     
    • IDE/Designer: добавлена возможность автоматического создания расширения класса формы/диалога для упрощения операций первоначальной настройки компонентов формы и извлечения данных из компонентов в структуру, а так же для сохранения данных формы в конфигурации или восстановления их из конфигурации. После первого создания расширения класса (меню Дизайнера Файл/Создать {Ex_ класс)дальнейшее обновление класса выполняется автоматически (например, при изменениях свойств компонентов в дизайнере);
    • {Dialog}.Show_modal -- работает теперь в классическом понимании модальности, возвращая строку результата непосредственно в точке вызова диалога - для всех поддерживаемых платформ (C#, Delphi/FPC, Android). Соответственно, событие {Form}.answer более не требуется. В случае необходимости соблюсти совместимость минимальными усилиями достаточно вызвать (прежний) метод answer (заменив OVERRIDE на METHOD) вслед за вызовом Show_modal;
    • {Dialog_file}/Android: обеспечен минимальный диалог для выбора файла для открытия или записи (в разрешенной для приложения области во внутренней памяти или на SD-карте);
    • Синтаксис: части строчной константы, ограниченные двойными апострофами ''...'', могут теперь размещаться в любом месте длинной строки, взамен любой подстроки в обычных двойных кавычках "..." (с той разницей, что могут содержать двойные кавычки в качестве символов);
  • Исправления:
     
    • {Long_operation} восстановлен для C# и Delphi/Free Pascal;
    • IDE/C#: меньше мельтешений при работе в Дизайнере форм;
    • C#/Компилятор: устранена проблема при сканировании длинных продолжающихся строк, содержащих строки, заключенные в двойные апострофы ''...'';
 

21.02.2020 - версия 0.99.4

  • Изменения:
     
    • Delphi/ Free Pascal: структуры, имеющие только простые поля, реализуются с помощью record (выше быстродействие, меньше расход памяти);
  • Исправления:
     
    • Оптимизатор: исправления оптимизации операций ин-лайнинга;
 

19.02.2020 - версия 0.99.3

  • Изменения:
     
    • Компилятор (ускорение): тестирование выполняется только для изменившихся (после последнего удачного тестирования) классов и классов, импортирующих изменившиеся классы; Если тестирование не требуется ни для одного класса, стадия тестирование пропускается;
    • Компилятор (замедление): добавлена опция /$ALLTESTS, при включении которой компилируются и выполняются все тесты;
    • Сценарии удалены из языка (SCENARIO, GOTO, CALL, WAIT);
    • Отдельный оператор FRIENDS заменен на модификатор FRIENDS в операторах IMPORT;
  • Исправления:
     
    • Delphi: генератор кода мог разбивать слишком длинные строки на части игнорируя наличие комментариев // в конце строки;
    • Delphi: имя класса теперь добавляется к имени структуры для обеспечения уникальности декларации ее в конечном приложении;
    • Delphi: устранены утечки памяти при работе со структурами;
    • Delphi/KOL: генерация кода в некоторых случаях (несогласованные try при включенной опции $NOTRY);
    • Free Pascal: при включенной оптимизации могли генерироваться слишком длинные имена для промежуточных переменных, компилятор FPC не мог работать;
 

15.02.2020 - версия 0.99.2

  • Изменения:
     
    • Завершен переход на использование STRUCTURE взамен прежних RECORD / OBJECT. Декларации RECORD / OBJECT более не поддерживаются;
    • Декларации MAXLEN|GTH так же более не поддерживаются для полей структур/классов;
    • IDE: добавлен переход по CTRL+ENTER на операторах LIKE/REVERT на исходный блок, на который ссылается этот LIKE/REVERT;
    • IDE: добавлено отображение имени текущей функции, заголовок которого находится вне поля зрения - вместо верхней строки текста, если курсор не находится в верхней строке;
  • Исправления:
     
    • IDE: Undo операция могла откатывать "все сразу";
    • IDE: переходы на декларации типов данных, элементов перечислений по CTRL+Enter;
 

12.02.2020 - версия 0.99.1

  • Изменения:
     
    • Продолжается работа по адаптации проектов (демо-проектов, тестовых, инструментария) к новым декларациям STRUCTURE (которые скоро заменят RECORD и OBJECT); На данный момент практически во всех проектах и RECORD, и OBJECT заменены на STRUCTURE.
    • Для выражений, содержащих создание новых объектов, обеспечивается временная переменная, кроме случаев CASE с множеством ветвлений - в этом случае запрещено создавать новые объекты и структуры как часть выражений в условиях  ветвей;
  • Исправления:
     
    • Оптимизации:
       
      • при выключенных оптимизациях могли включаться все оптимизации;
      • отключена inline-оптимизация для операции << (добавление в массив);
      • отключена оптимизация inline для присваиваний, в которых переменная в левой части встречается в выражении в правой части;
      • Delphi: отменено удаление классов, содержащих структуры;
      • Java: переименование переменных при слиянии (оптимизация V5) создавало недостаточно уникальные имена;
 

08.02.2020 - версия 0.99.0

  • Изменения:
     
    • Декларация STRUCTURE добавлена в язык для определения структур с единственным владельцем (подобны OBJECT, но гарантируют существование единственной ссылки на эту структуру, что позволяет пользоваться ей подобно RECORD - в ближайшем будущем заменит собой и RECORD, и OBJECT, после чего они будут удалены);
      В качестве пробника для перехода используется проект Demo_projects\100 и используемые в нем классы/структуры;
  • Исправления:
     
    • IDE (Designer):
       
      • проблемы генерацией Alias с разрывом текста в кавычках;
      • установка флажка "Настраиваемый размер" при выборе элемента на форме;
 

04.02.2020 - версия 0.98.9

  • Исправления:
     
    • C#/Интерпретатор: компиляция интерпретатора восстановлена (опечатка в файле DB.al4, отсутствие добавления нового объекта в массив, некорректная работа с записями RECORD, приводившая к модификации "исходного" экземпляра записи, некоторые другие исправления);
 

03.02.2020 - версия 0.98.8

  • Исправления:
     
    • Android: {Dialog} -- работа модальных диалогов восстановлена; Так же: обеспечивается корректный выход из модального диалога по (аппаратной) кнопке НАЗАД (с отрицательным ответом по умолчанию);
       
  • Изменения:
     
    • {Edit}, {Memo}, {Paint_lines}: добавлены опции при создании, контролирующие разрешение использовать дополнительный функционал ввода в Android (подсказки слов, ввод только чисел, телефонных номеров, разрешение на ввод символа возврата каретки в {Memo});
    • IDE: в дизайнере формы добавились соответствующие настройки для классов {Edit}, {Memo}, {Paint_lines};
 

02.02.2020 - версия 0.98.7

  • Исправления:
     
    • Android: {Form}.popup_menu не работал в случае последней активной (или созданной) колонки выровненной 'TOP'/'BOTTOM';
    • Android/Java: отображение вещественных чисел функциями Str / S_float обрезалось до 5 десятичных знаков в любом случае;
    • Android/Java: реализована установка размеров для функциональных (на основе TextView) визуальных компонентов функциями Set_width, Set_height, Set_size;
    • Android/Java: реализована прокрутка для {Listbox};
    • Android/Java: реализовано событие selection_change для {Listbox} по клику на элементе;
    • Android/Java: в {Memo} обеспечивается ввод символа возврата каретки;
    • Android/Java: {Form}.popup_menu - визуальная галочка обеспечена для "отмеченных" пунктов меню (с подстрокой ",checked" перед ":" в спецификации пункта);
    • Android/Java: улучшена работа "консольных" приложений (см. Demo_projects\15);
       
  • Изменения:
     
    • Android/Java: добавлена опция /$NOTHREADS : с ней все события выполняются в основном потоке. Предназначена для использования в приложениях, либо не содержащих тяжелых вычислений, либо обеспечивающих вычисления в потоке самостоятельно;
    • Android/Java: реализованы функции Get_char, Char_ready;

 

 

30.01.2020 - версия 0.98.6

  • Исправления:
     
    • Java/Android:
       
      • добавлена обработка события onPause() - так же вызывает событие формы "closed", позволяя сохранить состояние;
      • в AL4_form.java не хватало функции Is_keyboard_key_pressed - добавлена заглушка;
      • Console_app.al4 копировался не в кодировке UTF-8, что при не-латинских именах классов приводило к ошибке при попытке компилировать проект. (Тест _Russian_code теперь работает);
      • _Test_clipboard не работал из-за неуспешного доступа к буферу обмена из фонового потока исполнения, исправлено;
      • в реализации внутреннего класса FixAByte не хватало метода copy() - ComplexTest не компилировался;
      • оптимизатор успешно удалял pop-методы (для методов, используемых в операторах PUSH), в результате при включенной оптимизации код мог не компилироваться;
      • оптимизатор успешно удалял локальные переменные их инлайн-вставки кода вызванной функции, не учитывая, что они используются. В результате код не компилировался;
      • неверно формировались ссылки на тип данных и переменную NoneObj вида OBJECT в некоторых операциях, код не компилировался при наличии таких переменных в коде;
      • добавлен вызов обработчика mouse_double_click для двойного тапа (с разницей < 400 мс);
      • добавлена очистка списка форм в событии onStart() - удаляет из системного меню список форм, оставшийся от предыдущего запуска приложения, предотвращает ситуацию с "В приложении произошла ошибка";
      • добавлена реализация вызова ряда системных функций, ранее не реализованных (пока без глубокого тестирования);
      • Там же: исправлен вызов системного метода Insert для массивов записей RECORD;
      • Там же: исправлен вызов EnumAsInt (применение метода Int к enum-значению);
      • реализованы сценарии (демо игра Tic-Tac-Toe компилируется и работает);
      • событие value_change (и соответственно Any_change) не вызывалось при отсутствии обработчика такого события в форме;
      • {Form}.key_press - результат, возвращаемый обработчиком, анализировался неверно (с точностью до наоборот пропуская или не пропуская отфильтрованный ввод);
      • {Form} - высота колонки выровненной влево, вправо или по центру, не может быть меньше нижней границы самого низкого вложенного контрола (в крайнем случае форма скроллируется вниз);
    • Оптимизация: инлайн-вставка для параметров-массивов;
    • Компилятор: при создании объекта класса в части OWNED BY было невозможно использовать объект вида OBJECT в качестве владельца;
    • Компилятор: не было проверки на наличие завершающей точки в случае короткой функции в формате присваивания
      FUN square|_of_X(REAL X|_argument) ==> REAL : = X * X .
    • C#,Java: генерация кода для операторов CASE, входящего в конструкцию LIKE;
    • C#: {File_path}.Catalog_detailed - неверно сканировались подкаталоги (имя каталога не заполнялось);
  • Изменения:
     
    • Java/Android, режим /$CONSOLE: клавиатура всплывает теперь только по клику, по прокрутке скрытая клавиатура не отображается;
    • Там же: удален отладочный вывод из стаб-приложения;
    • Java/Android, {Paintbox} - удалена красная рамка при отображении состояния прокрутки (паннинга);
    • Java/Android: добавлена возможность задавать png-иконку для приложения (опция /$ICON=файл.png);
    • Java/Android: большая переделка кода для поддержки визуальной части - все обработчики событий работают в отдельном потоке, позволяя нормально взаимодействовать с интерфейсом при выполнении интенсивных вычислений в коде;
    • Java/Android: реализована опция /$ORIENTATION= для значений в манифесте android.orientation (portrait/landscape);
    • C#: {Bitmap}.Capture_screen : теперь позволяет захватывать полупрозрачные окна (эта опция в Windows недоступна для Delphi/Free Pascal);

 

 

18.01.2020 - версия 0.98.5

  • Изменения:
     
    • Продолжается работа над визуальной библиотекой для Android и компилятором AL-IV -> Java/Android. В настоящий момент на устройствах с Android полностью работают базовые функции {OpenGL}. Тестовое приложение GL_program_demo.apk - 227 Kб.
    • IDE: всплывающее меню на вкладках (по правому клику) содержит группировки по словам из имен классов, позволяя быстрее переключаться на нужную вкладку, когда загружено много файлов;
  • Так же:
     
    • инструкция по использованию компиляторов AL4\about compilers - read me!.txt была исправлена и дополнена, а так же удален текст по неподдерживаемым более направлениям (C++, Java/awt, DelphiRadStudio, Python).
 

15.01.2020 - версия 0.98.4

  • Изменения:
     
    • Продолжается работа над визуальной библиотекой для Android и компилятором AL-IV -> Java/Android. В настоящий момент на устройствах с Android частично работают функции {OpenGL}.
    • {Form}: внутренние изменения для передачи sender, sender_alias в события: для события paint, когда источником является объект {OpenGL}, sender==NONE, sender_alias=="Alias" объекта-источника (по техническим причинам, а именно ввиду асинхронной природы opengl на платформе Android;
    • Синтаксис языка: больше не выдается предупреждение об имени параметра, начинающемся со строчной буквы, для параметров личных функций класса.
  • Исправления:
     
    • Delphi: операция приведения типа object.{Class} не работала правильно в случае цепочки наследования;
    • FPC: {Bitmap}.Capture_screen в Windows теперь может делать снимок всего экрана в случае конфигурации системы с несколькими мониторами;
  • Так же:
     
    • выполнено массовое тестирование (особенно визуальных) проектов (с фиксацией проблем) для всех поддерживаемых платформ (C#, Delphi/KOL, FPC, частично Java/Android), в связи с глубокими низкоуровневыми изменениями в {Form}, {AL4_form}, {AL4_drawing} и др.
 

7.01.2020 - версия 0.98.3

  • Изменения:
     
    • Продолжается работа над визуальной библиотекой для Android и компилятором AL-IV -> Java/Android. В настоящий момент могут уже вполне полноценно работать визуальные приложения, с сохранением/восстановлением состояния (используется событие closed для сохранения состояния, в after_construct оно может быть восстановлено). Главное меню по '≡' переопределено через PopupMenu (т.к. в некоторых случаях стандартное системное меню не отображается).
    • Небольшие изменения в работе {Long_operation}:
       
      • Ее методу Indicate добавлен параметр флажка (при значении TRUE выполняется процессинг всех оконных сообщений);
      • Форма {Long_operation} создается скрытой и показывается только при задержке между обращениями к Indicate более 2 секунд;
  • Исправления:
     
    • Delphi: не инициализировались временные локальные переменные типа OBJECT;
    • Больше проверок на обращение к несуществующим контролам (уже или еще);
 

4.01.2020 - версия 0.98.2

  • Исправления:
     
    • проблемы приведения типа OBJECT к {Object}, сравнения OBJECT с NONE;
    • проблемы оптимизации:
       
      • оптимизация слиянием локальных переменных - не учитывались присваивания внутри выражений;
      • могло происходить нежелательное удаление CALLBACK-функций и их наследников;
    • C#/{File_path}: небольшие исправления в Create_dir (проверка на пустое имя);
    • C#, Delphi: File_detail (корректировка времени на новый формат - время теперь во всех платформах хранится в миллисекундах от начала эпохи);
    • IDE AL4:
       
      • Мастер создания классов: ошибочная проверка имени базового класса;
      • Дизайнер форм: неверный анализ выравнивания 'CENTER' для оператора новой колонки (в результате оператор new_column пропадал и все контролы центральной колонки переходили к предыдущей колонке);
      • Исправлена работа операции Ctrl+' (заключение блока текста в кавычки / обратная операция по снятию кавычек): учтены изменения в синтаксисе строка может быть заключена в двойные апострофы (чтобы внутри можно было использовать двойную кавычку), улучшено форматирование;
         
 

2.01.2020 - версия 0.98.1

  • Изменения:
     
    • Продолжается работа над визуальной библиотекой для Android и компилятором AL-IV -> Java/Android.
       
      • Обеспечивается компиляция и выполнение консольных приложений. Фактически стаб-приложение Console_app встраивается в качестве главного класса, создает текстовое окно на базе {Paint_lines}, перенаправляет консольный вывод и ввод на собственные функции, и запускает собственно приложение в отдельном потоке. Обеспечивается вывод цветного текста в консоль, автоматический поворот экрана меняет размеры консоли, есть автоматическая прокрутка к последней строке при выводе текста. Консольные приложения могут использоваться для прогонки тестов (параметр /$TEST компилятора);
  • Исправления:
     
    • Компиляция и запуск компилятора и приложений для Lazarus/Free Pascal обеспечена для Windows 32/64 и для Linux 32/64-битных версий.
       

 

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


См. здесь

 

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


См. здесь

 

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


См. здесь

 

 


В начало