ENGLISH

RUSSIAN(Русский)

 

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

 

30.12.2018 - версия 0.92.6

  • Изменения:
     
    • Добавлен метод {Form}.Set_column_font - установка шрифта по умолчанию для всех контролов колонки;
    • Delphi+Free Pascal: {System_functions}.PlatformInfo может возвращать Free Pascal(FPC) под Windows, так же добавлен код для детектирования версий Windows8, 10 (но Windows10 детектируется только при наличии манифеста);
    • C#: {Form} - более широкие поля и расстояния между контролами;
  • Исправления:

     

    • Delphi: компиляция визуального проекта, не использующего событие accept для приема брошенных на форму фалов (v 0.92.5a);
    • C#: компиляция сложных байтовых выражений, используемых как байтовый параметр функции (v 0.92.5a);
    • Delphi/VCL: установка размера шрифта в {Font}.Size (через свойство Size, а не через Height);
    • Delphi/VCL: обработка бросания файлов на форму (вызов DragAcceptFiles перенесен в CreateWnd, что обеспечивает восстановление флага готовности к операции в случаях, когда пересоздается дескриптор формы при изменении ее свойств);
    • Free Pascal/LCL: {Form} - отработка клавиш стрелок, HOME/END, PAGEUP/PAGEDOWN, TAB, BACKSPACE;
    • Delphi/KOL: событие {Form}.Any_change не вызывалось при срабатывании события {Form}.value_change (для {Checkbox});
    • Delphi/KOL: {Label} - цвет фона более не изменяется при переключении в состояние "недоступно" - меняется только стиль шрифта;
    • C#: событие {Form}.Any_change не вызывалось автоматически после создания/отображения формы (и не отрабатывало событие column_hidden), добавлен вызов в {Form}.shown;
 

22.12.2018 - версия 0.92.5

  • Изменения:
     
    • Добавлены метод {Form}.command и класс {Single_instance}, наследник от {Screen}. При использовании его вместо {Screen}, визуальное приложение может в переопределенном событии главной формы command обрабатывать события повторных запусков приложения, получая их параметры обычными Count_param и Parameter из {System_functions} - см. пример в Test_visual_projects\Test_paint_lines;
    • Добавлен метод {Form}.accept ==> BOOL. При его переопределении, приложение приобретает возможность обработки события перетаскивания файлов (например, из проводника). Для этого переопределяется метод {Form}.command (список файлов, брошенных на форму, может быть прочитан функциями Count_param и Parameter) - см. пример в Test_visual_projects\Test_paint_lines;
    • C#: добавлены опциональные параметры $Title, $Description, $Configuration, $Company, $ProductName, $Copyright, $Trademark, $Version, $FileVersion; создается и включается в проект AssemblyInfo.cs с учетом этих параметров. В результате, при выборе программы для операции "Открыть с помощью..." и при просмотре свойств программы, указанные опции отображаются.
    • C#: добавлен параметр $Visual, при его указании в проекте для сборки цель указывается WinExe (по умолчанию Exe);
 

16.12.2018 - версия 0.92.4

  • Изменения:
     
    • Для того, чтобы выйти или продолжить лежащие уровнем выше циклы FOR, теперь необходимо перечислить все вложенные операторы FOR операторами BREAK:
      BREAK k, BREAK j, CONTINUE i
    • Добавлено поле для чтения {Form}.Closed (закрытая форма остается как объект, если на нее есть ссылки, но не может еще раз быть отображена на экране - хотя доступ к ее методам и полям все еще имеется);
  • Исправления:

     

    • Delphi: множество исправлений в генерации кода для работы с фиксированными массивами;
    • Исправление оптимизации многократной вставки функции, имеющей параметр - динамический массив;
    • предотвращены исключения при доступе к полям и методам закрытой формы и к ее дочерним контролам;
 

08.12.2018 - версия 0.92.3

  • Изменения:
     
    • {Form}: добавлено перечисление {reason_closing} и поле reason_closing, которое может анализироваться в событии closing;
    • C#: Добавлена опция /$FRAMEWORK= (поддерживаются значения 3.5 и 4.0);
    • Для оператора LIKE добавлена возможность исключать часть вложенных блоков:
      LIKE foo ............ 'label1', EXCEPT 'label2', 'label3'
  • Исправления:

     

    • C#: byte_array[].Extend(value, count);
    • C#: все операции с записями полностью переведены на классы;
 

02.12.2018 - версия 0.92.2

  • Изменения:
     
    • Добавлен модификатор UNROLL / UNROLL(n) для оператора FOR;
    • Добавлены опции компиляции !autoinline и !unroll;
    • Добавлены сообщения о неиспользуемых приватных функциях, методах, полях класса;
  • Исправления:

     

    • Запрещена INLINE-вставка функций, содержащих операторы ==>, CONTINUE, BREAK;
    • C#: генерация кода для режима /debug (баланс фигурных скобок);
    • Delphi/FPC, C#: генерация кода для разворачивания циклов;
    • Delphi: генерация inline-вставки кода при вызове функции, результат которой игнорируется (NONE = foo(...));
    • Delphi: генерация вызова встроенной функции Fill для фиксированного массива в структуре;
    • C#: в {Canvas} учитывается Quality для рисования {Bitmap};
   

24.11.2018 - версия 0.92.1

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

18.11.2018 - версия 0.92.0

  • Изменения:
     
    • Синтаксис/семантика языка: добавлен модификатор CLAMP для фиксированных массивов с размером, равным степени двух (заменяет проверку выхода за границы массива на умножение на битовую маску, не позволяющее выйти за границы массива, хотя, возможно, и приводящее к работе с неверными индексами - но уже внутри массива. Но быстрее);
    • Добавлен класс {OpenAL} (реализован для Delphi и C#);
    • Разрешены блочные комментарии внутри записи (RECORD);
    • Для массивов добавлены встроенные функции:
      • A[].Copy(To, B[*])
      • A[].Fill(To, Value, Count)
      • A[].Repeat(To, Source[], Count)
      • A[].Extend(Value, Count)
      • A[].Append(Source[*], Count)
      • A[].Withdraw(From, Count)
    • Добавлены {Timer}.Begin_precision / End_precision (для установки точного таймера);
    • Добавлен модификатор INLINE для функций;
    • Delphi/FPC: переделана полностью работа с массивами всех типов;
    • Delphi/KOL: минимальный размер приложения уменьшен до 10К байт (см. Test_date_time);
  • Исправления:

     

    • C#: генерация присваивания записи, имеющей поля типа строк и массивы (заменяется вызовом метода copy());
    • FPC: {Bitmap_direct} - исправлены функции lock/unlock (реализованы через TLazIntfImage);
    • Delphi/FPC: Генерация кода для деления с операндами типа BYTE;
    • Delphi/FPC: устранены утечки памяти на временных фиксированных массивах байтов;
    • Оптимизация кода (inline-вставка, удаление неиспользуемых переменных);
    • Delphi/FPC: {File_path}.Exists|_file (проверялось наличие файла Path + '*' вместо Path);
 

28.10.2018 - версия 0.91.9

  • Изменения:
     
    • Автоматическая конверсия типа BYTE в INT (в позиции параметра функции);
    • C#: для представления в памяти структур, содержащих строки и массивы, используются классы. Для исходного кода на AL-IV никаких последствий нет, присваивание структур выполняется как для простых переменных - путем присваивания значений полей по-элементно;
    • Delphi/KOL: добавлена опция /$KEY_PREVIEW;
    • Добавлено событие {Form}.scrolled (реакция на скролл контрола, например, {Paint_lines});
    • Добавлен метод {Form}.Set_column_width;
  • Исправления:

     

    • применимость операции побитового отрицания к типу BYTE;
    • допускаются логические операции между байтовыми и между байтовым и целым значением;
    • допускается блочный комментарий между заголовком блока CASE и первой ветвью;
    • C#: генерация кода для операции '~' (поразрядное отрицание);
    • C#: генерация присваивания значения выражения, не являющегося простым вызовом функции, когда в левой части стоит NONE;
    • DelphiVCL/FPC: использование части массива DATA[];
    • Delphi/KOL: событие key_down для формы;
    • Слияние последовательных присваиваний в один оператор не выполняется при оптимизации. если второй оператор использует вызовы функций;
    • Генерация кода для присваивания переменной базового типа конструктора нового объекта наследованного от этого базового типа (присваивание значений полям, не определенным в базовом классе, вызывало ошибку);
    • Delphi/KOL: создание метки {Label} прямым конструктором (без вызова New_label);
 

12.10.2018 - версия 0.91.8

  • Изменения:
     
    • Delphi/FPC: Небольшая оптимизация кода при обращении к методам для объекта THIS;
    • Добавлено инструментальное приложение Pascal2AL4Class (для автоматической генерации модуля-переходника, при постепенном переводе проекта с Delphi на AL4);
  • Исправления:

     

    • C#: генерация кода для присваивания значения элементу фиксированного массива, являющегося полем локальной переменной типа записи (RECORD);
    • Delphi/VCL,KOL: запуск откомпилированного приложения на старых версиях Windows (NT4);
    • Delphi/KOL, VCL, Free Pascal: событие selection_change не вызывалось;
    • Delphi/VCL: событие key_up не компилировалось;
    • FPC: присваивание значения короткой строке (в составе записи), в случае символов UTF8;
    • C#: подавлена возможная ошибка при рисовании линии (переполнение?);
 

9.10.2018 - версия 0.91.7

  • Изменения:
     
    • Добавлено: {Screen}.Bounds (прямоугольник всего экрана);
    • Добавлено: {Form}.Mouse_cur (текущие координаты курсора мыши, не только во время обработки события мыши, координаты относительно самого экрана, а не формы);
    • Добавлено: {Bitmap}.Capture_screen({point}) (захват экрана);
    • Добавлено демо-приложение Lupa;
    • Добавлено: {Form}.Set_no_frame, {Form}.Set_no_borders;
    • Добавлено: {Form}.Start_move; - перетаскивание формы мышью по клику на любой части формы;
    • Добавлено: {Form}.Set_alpha(REAL) - полупрозрачность формы;
    • Добавлено демо-приложение Clock;
    • Добавлено: {System_functions}.Get_drives, Get_drive_type, Eject_drive;
  • Исправления:

     

    • C#: Исправлено включение в проект на этапе генерации окончательного приложения копируемых файлов, для которых в результате оптимизации принято решение их не использовать (на автономную компиляцию с cs.exe не влияло, но под MSVC компилятор не мог найти включенный в проект файл);
    • C#: внутренний флаг Application_running устанавливается так же при отображении формы, позволяя отрабатывать событиям и настраивать колонки непосредственно в момент запуска приложения;
    • C#: генерация кода для присваивания значения элементу фиксированного массива, являющегося полем записи (RECORD);
    • Delphi/KOL, C#: вызов {Form}.Close не работал без установленного обработчика closed;
    • Delphi/VCL: рисование битмапа на канве работало неверно, если канва самого битмапа до этого была трансформирована;
    • Delphi/VCL: {Form}.Set_position не работал без установки события moved на форме;
    • Delphi/KOL: размер шрифта на канве;
    • Delphi/VCL, FPC/Windows: {Form}.Stay_on_top исправлен;
    • Delphi/VCL,KOL: копирование национального текста в буфер обмена независимо от активной раскладки клавиатуры;
    • Delphi/VCL: сообщение об отсутствующем диске, возникавшее при вызове Directoty_exists для отсутствующего устройства, устранено;
    • C#: {Form} добавлена обработка событий клавиатуры для формы (при отсутствии контролов, которые захватывают фокус ввода);
    • FPC: генерация присваивания NONE переменной типа записи (RECORD);

     

 

28.09.2018 - версия 0.91.6

  • Изменения:
     
    • Free Pascal + LINUX:

       

      • IDE AL4 компилируется и работает под Linux (проверено в Linux Mint 18.3 под Oracle Virtual Box)


         

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

     

    • FPC: {Dialog_dir} не мог компилироваться (FPC требует конкретный тип указателя в режиме -MObjFPC);
    • Русская версия языка: переведены NONE (НИЧЕГО) и FRIENDS (ДРУЗЬЯ);
    • FPC: генерация оператора CASE для выражения типа STR со значениями, начинающимися с первого национального символа, не работало корректно для кодировки UTF-8;
    • C#: генерация присваивания полю записи типа STR (короткой строке, требовался оператор fixed для не-локальных переменных);
    • Исправлена оптимизация inline-вставки кода, содержащего сравнение объектного значения с NONE;
    • Исправлена оптимизация inline-вставки кода метода, вызывающего метод-функцию в параметрах;
    • FPC/Linux: STR.Find(pattern) исправлена (для национальных символов в utf-8);
    • FPC/Linux: не захватывался ввод с клавиатуры для {Paint_lines} (решено передачей перехватом клавиатурного ввода на форме с KeyPreview);
    • FPC/Windows: {Form}.ask для национальных символов в тексте вопроса (utf-8);
    • Delphi / FPC: Установка размера шрифта для визуальных элементов (устанавливался в пикселях вместо пунктов, т.е. меньше по размеру);
    • Delphi / VCL + FPC: устранена утечка графических ресурсов;
    • FPC/Linux: {Canvas}.Text - всегда был черный.
 

21.09.2018 - версия 0.91.5

  • Изменения:
     
    • Free Pascal + LINUX:
       
      • LINUX: компилируются и запускаются с FPC визуальные проекты;
      • LINUX: Работает графика {Canvas}, включая трансформации.
      • LINUX: {Paint_lines} - обеспечивается симулируемая каретка (в Linux нет функционала каретки).
      • LINUX: {Tray_icon} - работает.
      • LINUX: {OpenGL} - работает.
    • {Tray_icon}: в событии click есть возможность анализировать Key.Shift, Key.Control, Key.Alt, дополнительно к Mouse.Button.
  • Исправления:

     

    • Delphi/FPC: проверка того, что exe-файл в результате работы компилятора был создан, выполняется в цикле с задержкой по времени (до 1 секунды суммарно) - иначе слишком ранняя проблема детектирования могла быть неуспешной;
   

14.09.2018 - версия 0.91.4

  • Изменения:
     
    • Free Pascal + LINUX:
       
      • Компилятор может быть откомпилирован для работы в LINUX;
      • И позволяет в LINUX компилировать код ALIV, используя компилятор fpc;
      • На данный момент успешно компилируются и работают в LINUX практически все консольные текстовые проекты. За исключением: Test_db; А так же простейшее оконное приложение Test_empty_form;
      • От режима компиляции -MDelphi удалось отказаться, и перейти к режиму -MObjFPC.
    • Документация: исправлены и дополнены схемы синтаксиса в виде диаграмм и РБНФ формул.
  • Исправления:

     

    • C#: генерация кода CASE с последовательным вычислением условий (CASE ? без выражения в заголовке) - в случае использования коротких строк в выражениях узлов формировался неверный код;
    • C#, Delphi, FPC: вызовы всех перехватчиков (TRAP) отключаются в отсутствие опции /debug;
    • Delphi / Free Pascal: превдо-функция TEST не возвращала TRUE на стадии тестирования;
 

04.09.2018 - версия 0.91.3

  • Изменения:
     
    • {Bitmap}.Save_bmp, Save_jpg, Save_gif, Save_png, Can_save_fmt; C#: все форматы, Delphi/KOL: bmp+jpg+png, Delphi/VCL: bmp+jpg, FPC: bmp+jpg+png;
    • Добавлено приложение Tools\Diagram_draw;
  • Исправления:

     

    • C#: генерация кода присваивания одной короткой строки другой (строчные поля записи);
  • Сайт:

     

    • обновлены схемы-диаграммы языка;

 

30.08.2018 - версия 0.91.2

  • Изменения:

     

    • C#/Delphi/FPC: добавлен перехват операции Clear для массива (используется тот же перехватчик TRAP, что и для операций <<, Insert, Delete, но с параметрами FALSE, -1);
    • {Paint_turtle}: добавлены команды F, N для управления закрашиванием рисуемой фигуры;
    • {Canvas}: перечисление {quality}, поле Quality, метод Set_quality;
    • Синтаксис языка:
       
      • добавлена директива HISTORY;
      • добавлен оператор UNCOOKED, который может использоваться вместо ненаписанного блока или простого оператора в любом месте функции (функция так же должна помечаться маркером UNCOOKED);
      • запрещено присваивать значение отдельному полю структуры, хранящейся в массиве структур;
    • C#: изменена реализация структур (RECORD) - теперь всегда используются простые структуры struct (для массивов и коротких строк в составе структур используются фиксированные массивы и фиксированные массивы символов);
  • Исправления:

     

    • Перехваты (TRAP) для полей объекта THIS не работали;
    • Перехваты для записей генерировались с ошибкой;
    • C#: событие selection_change не работало в приложении при включенной оптимизации;
    • {Form}.Set_position(x,y,'KEEP_ON_SCREEN') исправлен;
    • Запрещена оптимизация для случая, когда выражение содержит обращение к THIS (мог не формироваться код);
    • Delphi: генерация кода для операции value IN int_array[];
    • Delphi: генерация (вложенных) обращений к полям записей (RECORD) в левой части оператора присваивания;
    • C#: {Canvas}.Arc теперь работает как и в Delphi: углы задают две точки на окружности, линия рисуется от первой точки ко второй в направлении по часовой стрелке;
    • C#: {Canvas}.Arc - падал при нулевом размере эллипса;
    • Delphi: доступ к элементу массива записей (RECORD) за пределами диапазона индексов массива;

 

10.08.2018 - версия 0.91.1

  • Прогресс компилятора в код для Free Pascal:

     

    • Самокомпиляция работает: Delphi_build\AL4DelphiCompiler.exe -> FPC_build\AL4FPCCompiler.exe -> $By_FPC_build\AL4FPCCompiler.exe, результирующие .pas файлы в папках FPC_build и $By_FPC_build - идентичны.

  • Изменения:

     

    • C#/Delphi/FPC: Для компиляции в режиме /debug, в памяти формируется информация о стеке вызовов функций, и значении индивидуального счетчика вызовов функции на момент ее вызова; Это информация доступна в программе системными функциями Trace_fun|ction(level), Trace_counter(level), Trace_levels или может быть "распечатана" в строку: Trace_stack(max_levels);
    • C#/Delphi/FPC: Добавлен модификатор TRAP для полей классов, позволяющий указать методы-перехватчики операций чтения/записи а так же добавления/вставки/удаления элементов в поля-массивы, с целью отладки.
  • Исправления:

     

    • Delphi не может выполнять переходы через конец блока try-finally, поэтому в случае пересекающегося FOR ... PUSH ...  CONTINUE/BREAK оператор PUSH реализуется без использования конструкции try-finally; в функциях с пересекающимися с PUSH операторами CONTINUE/BREAK для возврата из функции используется переход на финальную метку fin, вместо оператора EXIT;

 

07.08.2018 - версия 0.91.0

  • Прогресс компилятора в код для Free Pascal:

     

    • Консольные приложения (Windows), русский текст в консоли - ОК;
    • Работа с буфером обмена в консоли - OK;
    • Работа с СУБД MS Access - OK (были проблемы с компонентами ODBC, но все обошлось);
    • Быстродействие на сортировке чисел - вдвое хуже Delphi7, на строках - хуже примерно вчетверо. Это лучше C++ (но радует, что сам компилятор работает достаточно быстро - почти как Delphi, и намного быстрее компиляторов для C++);
    • Pascal/FPC: добавлена опция /$NOINTERFACES (запрещает подключение модуля Interfaces, что резко сокращает размер приложения (с 1700Кб до 140-200Кб), но не подходит для компиляции GUI- приложений и в некоторых других случаях);
    • Запуск минимального GUI приложения (пустая форма) - ОК. Размер, правда, 1.84 Мбайта, с отключенной отладочной информацией (и strip.exe уже не меняет его размер);
    • OpenGL - OK (размер 1,91 Мб);
    • {Date_picker} - OK (в проекте Test_visual_projects\Test_project);
    • {Tray_icon} - OK;
  • Размер кода / быстродействие (Delphi/KOL):

     

    • Delphi/FPC: параметры типа STR / RECORD передаются в реализации по ссылке (как const);
    • Delphi/FPC: удалены базовые типы ArrayByte, ArrayBoolean, Array..., снята виртуальность с методов DynAByte, DynABool, ...: Add, Insert, Delete, Clear (что позволяет компилятору не добавлять их код, если нет прямых обращений к ним - smart link);
    • Delphi/KOL: при включении опции $SMALLEST_CODE отключается поддержка табулирования между визуальными элементами формы;
    • Delphi/KOL: используется прямое чтение / запись в консоль вызовами FileRead / FileWrite;
    • Delphi/KOL: После ряда изменений размер кода начального GUI приложения (Test_empty_form) уменьшился до 36 Кбайт, размер стартового приложения с чтением/записью в консоль (Hello_world) - до 13 Кбайт, размер пустого приложения без обращения к консоли (Test_date_time) остался 11.5 Кбайт.

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

     

    • не добавлялись в список вызванных функций все переопределенные методы из классов-наследников (при включенной оптимизации могли удаляться методы, требующиеся для работы);
    • запрещено удаление методов, на которые есть ссылки из еще не удаленного кода (могли быть проблемы с учетом реального использования функций);
    • разрешен доступ к приватным полям класса, объявившего обратившийся класс другом (FRIENDS);
    • исправлена проблема с возможным некорректным удалением якобы неиспользуемого класса, являющегося прообразом локализации (трансляции на национальный вариант AL-IV);
    • Код FPC сохраняется в кодировке utf-8, что позволяет правильно кодировать строчные константы, используемые программой, в utf-8;

 

30.07.2018 - версия 0.90.9

  • Изменения:

     

    • Платформы / языки:

       

      • Поддержка компиляции в языки программирования C++, Java, Python приостановлена. Предыдущая версия 0.90.8 будет оставаться доступной для скачивания;
      • Добавлена поддержка компиляции Pascal-кода компилятором Free Pascal (консольные приложения + поддержка русского языка).
    • Синтаксис:

       

      • Синтаксис русскоязычной версии AL-IV: оператору PUSH сопоставлен русский вариант ПУСТЬ;
      • Разрешено вызывать CALLBACK-функции из CALLBACK-функций без выдачи предупреждения об этом;
      • Более не требуется, чтобы CALLBACK-функция была не публичной (прежде выдавалось предупреждение);
    • Оптимизация (по размеру кода):

       

      • В компилятор добавлен анализ неиспользованных обработчиков событий / не унаследованных методов, с удалением нативного кода, отвечающего за вызов этих обработчиков / подготовку данных для их работы ("скобки" //?{класс} ... //. или //?{класс}.функция ... //. в коде на целевом языке, копируемых в целевую директорию из низкоуровневых модулей);
      • Записи {rect}, {point} + соответствующие функции перемещены из {Canvas} в новый класс {Geometry}; запись {from_to} перемещена из {Memo} в {Control};
      • файл класса {Long_operation} перемещен в отдельную папку Long_operation, в другой папке Long_operantion dummy помещен альтернативный фейковый класс {Long_operation|_dummy}, который не содержит никакого кода;
      • код для работы с Tray icon вынесен из {AL4_form} в новый класс {AL4_tray}; код для работы со шрифтами - из {AL4_drawing} в отдельный класс {AL4_font};
      • Delphi: добавлена опция $NOLONGOP (отключает добавление кода для проверки длинных операций);
      • Delphi/KOL: опция $NOERR добавляет так же MATH_NOERR к символам проекта (и как прежде, NOERR);
      • В сгенерированном коде метод не отмечается как виртуальный, если обнаружено, что он не вызывается: это позволяет компилятору Delphi отключить компиляцию такого метода;
      • Отключается вызов инициализаторов для классов, которые явно не используются в коде (но не отброшены, так как имеются ссылки на их декларации, например, на их записи RECORD);
      • улучшен алгоритм определения неиспользуемых классов/методов;
      • После ряда изменений в коде и в компиляторе приложение из одной пустой формы на Delphi/KOL (минимальное GUI приложение) имеет размер 38Кб (было - 160+ Кб); Минимальное приложение без GUI получается на Delphi/KOL около 10,5 Кб (без сжатия упаковщиками, со сжатием результат около 6,5 Кб). В сравнении с 11,5 Кб приложения на C#.NET размер 38 Кб может показаться великоват, но давайте помнить, что:

         

        1. не на всякой машине удастся запустить такое приложение C# (нужна определенная версия DotNet Framework); Приложение KOL запустится практически везде, где есть Windows/Linux+WinE (в том числе NT4/Windows98);
        2. C# не использует статическую линковку по умолчанию и все нужные ему библиотеки уже есть в Windows. Приложение KOL не требует каких-либо внешних библиотек, все свое у него с собой;
        3. Это может показаться странным, но для не совсем пустого приложения (когда на форме имеется несколько визуальных элементов, есть обращения к файлам и т.п.) GUI приложение KOL оказывается примерно вдвое меньше аналогичного приложения C#. За исключением, пожалуй, минимального приложения для обращения к БД, где C#NET опять небольшое имеет стартовое преимущество.
      • Введен модификатор IMPORT, ANYWAY: {класс} . При включенной оптимизации не удаляются классы, импортированные таким образом. Так же, не удаляются нативные методы (в отличие от нативных функций);
      • Расширен модификатор NATIVE для функции: теперь он может включать список зависимостей от классов и функций/методов в виде NATIVE({класс}, {класс}.метод, ...). Такой список позволяет при включенной оптимизации не допустить отбрасывания неиспользуемых (в коде AL4) классов и их функций/методов;
    • Компиляция:

       

      • C#: файлы *.cs в целевой папке удаляются перед сборкой (нет необходимости чистить вне компилятора в случае смены опций оптимизации).
      • Delphi: аналогично, файлы *.pas в целевой папке удаляются перед сборкой.
  • Исправления:

     

    • Delphi: генерация инициализации полей встроенного класса {Object} редуцировалась по причине излишней оптимизации;
    • Delphi: в классе {Paintbox} прокрутка каретки не шла вместе с прокруткой окна;

 

20.07.2018 - версия 0.90.8

  • Сайт:

     

    • Основной адрес сайта теперь kolmck.000webhostapp.com (и для AL-IV, соответственно, kolmck.000webhostapp.com/AL4/index.html). Да, это бесплатный хостинг, он показывает спонсорский баннер в углу страницы, но это всего лишь безобидная надпись [Powered by 000webhost]. Так же есть надежда на то, что хостер не станет удалять сайт в случае моего длительного отсутствия.
  • Исправления:

     

    • для оператора, который начинается с двух точек, обеспечивается предыдущий левый операнд из предыдущей декларации переменной, в том числе;
    • C#: {Memo}.Set_range_sel;
    • C++: {Clipboard}.Set_text - исправлен;
    • Компилятор: размер массива игнорировался внутри оператора PUSH с присваиванием значения элементу массива (т.к. массив на время работы блока PUSH считается "фиксированным").
  • Изменения:

     

    • Для всех переопределенных методов, в код обязательно встраивается контроль глубины рекурсии. Это не предотвращает возможность бесконечной рекурсии, но позволяет программе не упасть при возникновении такой ситуации;
    • Визуальная библиотека: метод {Screen}.Run теперь принимает параметр - форму, которая устанавливается в качестве главной (форм может быть несколько, главная не обязательно создается первой);
    • C#/C++(MSBuild)/Delphi: добавлена опция компилятора /$ICON=путь, устанавливает иконку приложения, которая встраивается в виде ресурса и отображается в проводнике на бинарном файле, а так же на кнопке приложения на панели задач при ее запуске;
    • C++: при генерации кода нативных функций (NATIVE) компилятор сообщает о возможной проблеме с наличием операторов return в нативном коде (вероятен дисбаланс счетчика рекурсивного вызова, что может приводить к ложным срабатываниям исключения TooDeepRecursion);
    • Синтаксис:
      • отменено использование строк '"..."';
      • вместо них введены строки ''...'' (ограниченные двойными апострофами. Как и в предыдущем эксперименте, такие строки должны размещаться в отдельных строках кода. Для таких строк не анализируется дисбаланс двойных кавычек. Внутри могут размещаться любые символы, кроме сочетания [''], завершающего строку.

 

29.06.2018 - версия 0.90.7

  • Изменения:

     

    • Синтаксис (сахар): если оператор начинается с двух точек, то они замещаются левым выражением из (обычно) предыдущего оператора присваивания. Данное правило может использоваться для сокращения и "украшения" кода, например, при настройке формы (такие операторы продолженного присваивания не подсчитываются в блоке, составляя единый оператор с базисным):
      Memo = New_memo(THIS, "MEMO", 0)
      ...Set_anchor_bottom(TRUE)
    • В Delphi/KOL большинство символов условной компиляции вынесены в EXTERNAL_DEFINES.inc (предотвращения ошибки компилятора Too many conditional symbols);
    • Delphi/VCL: для колонок, выровненных 'TOP' и  'BOTTOM', вертикальные линейки прокрутки запрещены (горизонтальные запрещены для всех видов колонок).

 

07.06.2018 - версия 0.90.6

  • Изменения:
    • Некоторый прогресс в компиляции в Python GUI-приложений, решены проблемы:
      • Трансформации на плоскости (включая поворот текста);
      • Скроллинг канвы в {Paintbox}.

 

26.05.2018 - версия 0.90.5

  • Изменения:
    • Некоторый прогресс в компиляции в Python GUI-приложений, решены проблемы:
      • корректное размещение контролов в колонках и колонок на форме;
      • отработка событий мыши, изменения размеров, закрытия формы, таймера;
      • ввод пароля для {Edit};
      • формирование и вызов всплывающего меню в точке клика, отработка его событий;
      • вызов диалога открытия файла, диалога с ответом да/нет;
      • трансформация канвы при рисовании (для эллипса и арки - реализовано приближением полигонами).

 

20.05.2018 - версия 0.90.4

  • Изменения:
    • Значительный прогресс в компиляции в Python GUI-приложений (есть еще незавершенные модули, события, классы, но работа продолжается);

 

7.05.2018 - версия 0.90.3

  • Изменения:
    • Значительный прогресс в компиляции в Python: компилируются и работают простейшие GUI-приложения;
    • Python: {Clipboard} работает через tkinter (библиотека для GUI на Python), так что нет необходимости доустанавливать пакеты (pyperclip);
    • {Paint_turtle}: т.к. в Windows 8 могут возвращаться неверные цвета системными функциями, в качестве нормального цвета рисования теперь используется цвет 'BUTTON_TEXT'; и добавлен метод Set_normal_color для установки желаемого цвета.
    • Все визуальные тесты перемещены из AL4\Library\Visual в AL4\Test_visual_projects; файл OTLv4.h теперь требуется разместить в папке %OTL% (нужна переменная окружения %OTL);
  • Исправления:
    • {Stream}.Get_line ==> теперь может загружать строки из текстовых файлов Unix (завершающихся единственным символом #LF);
    • C#: {Button} автоматически выставленная высота была слишком мала в системах с установленным большим размером шрифта, теперь вычисляется на основе шрифта по умолчанию;
    • C++: {Random}.Probable ==> всегда возвращал 0.0;
    • C++: анализ ошибок компиляции был слишком подозрительным - по любому слову "error" в выдаче компилятора останавливал запуск тестов/приложения.

 

22.04.2018 - версия 0.90.2

  • Изменения:
    • Запрещено использовать операции ++/-- в выражениях с условно вычисляемыми частями (т.е. с операциями && / ||);
    • Значительный прогресс в компиляции в Python: консольные приложения компилируются и работают (в Windows и в Linux);
  • Исправления:
    • Запрет на операцию IN/!IN для проверки включения вещественного числа в массив вещественных.

 

12.04.2018 - версия 0.90.1

  • Изменения:
    • {Stream}: быстрая загрузка строк (кодировка ANSI);
    • C++: Опция компилятора /$SSTRINGS отменена;
  • Исправления:
    • Delphi/KOL: Write_file_stream не записывал файл;
    • C#: загрузка текста в кодировке ANSI;
    • Delphi/VCL: имело место большое потребление процессора;
    • Оптимизация путем вставки тела функции (inline) не проводится, если оптимизируемая функция сама вызывает функции из классов, не импортированных в текущем классе (иначе возникают проблемы с компиляцией целевым компилятором);
  • IDE AL4:
    • исправления, улучшения (см. в конце файла IDE_AL4.al4);
    • Добавлена подсветка синтаксиса Pascal (частично);
    • Увеличена скорость отрисовки;

 

 

08.04.2018 - версия 0.90.0

  • Добавлено:
    • Возможность компиляции в Python-программу. Пока реализовано создание только консольных приложений (компилируется и работает тестовый проект Hello_world).
  • Изменения:
    • Ошибка балансировки кавычек после END превращается в предупреждение.
  • Исправления:
    • Использование '" ... "' не в первой строке последовательности;
    • Delphi/KOL: Запуск откомпилированного приложения в ранних ОС (Windows NT4);
  • IDE AL4:
    • исправления, улучшения (см. в конце файла IDE_AL4.al4);
    • добавлена подцветка синтаксиса для других языков (реализовано для Python и FoxPro).

 

21.03.2018 - версия 0.89.3

  • Изменения:
    • Изменена семантика модификатора TESTED: модификатор TESTED(nn) означает заявление о том, что класс протестирован на nn%. TESTED без параметров и в отсутствие модификатора UNTESTED предполагает 100%. Ошибкой считается слишком сильная заявка, с разрывом более 5% от реального процента покрытия тестами;
    • Синтаксис языка: Введен особый вариант строковых констант в кавычках вида
      '"..."' - такие строки могут размещаться только в отдельной строке кода, что ограничивает их применение многострочными константами (например, в нативных функциях); особенность таких строчных литералов в том, что без зеркалирования внутри такой строки могут записываться кавычки ("), и только сочетание ("') запрещено для записи в такой строке; при этом сохраняется простота анализа на баланс кавычек для всех остальных строк кода;
    • Синтаксис языка: Изменен формат многострочных комментариев. Комментарии начинаются символами */ и завершаются /*. Код на языке AL-IV всегда должен находиться между /* и */ (как если бы он сам был комментарием в тексте другого языка - даже если кроме класса AL-IV в файле ничего больше нет);
    • Оператор DEBUG оставлен только в верхнем регистре, вариант debug более не поддерживается.
  • IDE AL4:
    • исправления, улучшения (см. в конце файла IDE_AL4.al4).

 

16.03.2018 - версия 0.89.2

  • Изменения:
    • Компилируемость компилятора на C++ (код AL4.h, AL4.cpp вынесен из исходного кода компилятора в отдельные файлы, что предотвращает встраивание в компилятор кода, адаптированного под конкретные строковые настройки, и позволяет отложить адаптацию до компиляцию финальной программы);
    • C++ приложения для Linux могут компилироваться непосредственно в Linux, компилятором, скомпилированным для работы в Linux;
  • Исправления:
    • C++: array[].Insert(At, Value);
    • C++: {System_functions}.Parameter(i) ;
    • C++, Delphi, Java: {System_functions}.MIN_INT (опечатка: FFFF_FFFF вместо 8FFF_FFFF);

 

11.03.2018 - версия 0.89.1a

  • Исправления:
    • Компиляция визуальных проектов C++;
    • C++: {Canvas}.Offset (прежнее исправление было ошибочным);
    • C++(GCC): присваивание записей; присваивание элемента массива записей;
    • C++ (MSBuild): отключена трансформация целевой канвы при рисовании битмапа (как везде теперь должно работать);

 

10.03.2018 - версия 0.89.1

  • Изменения:
    • обеспечена возможность компиляции  визуальных проектов C++ компилятором GCC (для LINUX);
    • {Bitmap} рисуется на канве {Canvas} без трансформаций, заданных в ней, при использовании операций Draw / Stretch_draw: целевая позиция при этом всегда отмеряется от верхнего левого угла целевой канвы - причиной является то, что не все платформы (Linux X) поддерживают повороты при наложении {Bitmap} без дополнительных усилий/возможного падения производительности;
  • Исправления:
    • Компиляция визуальных проектов C++;
    • Сборка проектов C++ через MSBuild;
    • C++: {Canvas}.Offset (лишнее преобразование в пиксели перед смещением);
    • C#: {Canvas}.Arc(...., FALSE);

 

05.03.2018 - версия 0.89.0

  • Изменения:
    • обеспечена возможность компиляции  консольных проектов C++ компилятором GCC (для LINUX); На данном этапе компиляция тестового варианта и тестирование производятся в среде Windows, затем компилируется код c++ - проекта для компиляции в среде LINUX, и командный файл для его компиляции g++. Окончательно проект компилируется в среде Linux, где и запускается откомпилированная программа.
  • Исправления:
    • Создание консоли с возможностью ввода в оконном проекте C++ (MS Windows);

 

26.02.2018 - версия 0.88.0

  • Изменения:
    • обеспечена возможность компиляции  проектов C++ компилятором GCC (для Windows) (с ключом /$GCC);
  • Исправления:
    • компиляция обобщенных функций (см. проект AL4\Test_projects\_Test_sort и класс {Sorting});
  • IDE AL4:
    • исправления, улучшения (см. в конце файла IDE_AL4.al4).

 

18.02.2018 - версия 0.87.4

  • Исправления:
    • скроллинг в классах {Paintbox}, {Paint_lines} - уточнен (C#);
    • C++, Delphi: предотвращено сохранение сообщений компилятора на этапе тестирования в Compiler_messages.html (когда компилятор является частью компилируемой программы);
  • IDE AL4:
    • исправления, улучшения (см. в конце файла IDE_AL4.al4).

 

14.02.2018 - версия 0.87.3

  • IDE AL4:
    • просмотр локализованных ошибок/предупреждений;
    • отображение локализованного исходного кода;
    • исправления, улучшения (см. в конце файла IDE_AL4.al4).

 

12.02.2018 - версия 0.87.2

  • Изменения:
    • тесты в классе не выполняются повторно, если не изменялся класс и классы, от которых зависит этот класс (все целевые языки/платформы);
    • тесты для {Form};
  • Исправления:
    • C++: визуальное приложение с потомками {Paintbox} на форме могло упасть на создании формы (слишком ранний вызов события paint);
    • все предупреждения/ошибки сохраняются в Compiler_messages.html (раньше часть сообщений туда не попадала);
    • компиляция вызова функции из функции TEST при некоторых условиях могла приводить к формированию неверного (некомпилируемого) кода;
    • компиляция кода блока в завершающем класс TEST могла обрываться из-за чрезмерно оптимистичного предсказания количества итераций;
    • {Form}.Set_left (C++, Java);
    • C++: тесты для GUI-приложения компилируются (для) и выполняются в GUI-режиме (а не как консольное приложение) - иначе невозможно тестирование GUI-компонентов;
  • IDE AL4:
    • исправления, улучшения (см. в конце файла IDE_AL4.al4).

 

07.02.2018 - версия 0.87.1

  • Изменения:
    • Добавлено: {Screen}.Default_font_size (по умолчанию 10 pt);
    • автоматические размеры для кнопок, чек-боксов, меток в колонках выровненных 'TOP' и 'BOTTOM' - по размеру текста в них (C#);
    • C#: тесты в классе не выполняются повторно, если не изменялся класс и классы, от которых зависит этот класс (пробная версия не учитывает изменения в самих тестах);
  • Исправления:
    • Delphi/KOL: добавляется опция NIL_EVENTS (без нее проблемы при исполнении);
    • Java: Автоматические размеры для метки {Label};
    • Java: Установка размера шрифта для контролов;
    • Tools\Test_report updated (to work in any directory where AL-IV is installed);
  • IDE AL4:
    • исправления, улучшения (см. в конце файла IDE_AL4.al4).

 

04.02.2018 - версия 0.87.0

  • Изменения:
    • Delphi/KOL, С++: изменена реализация динамических массивов строк;
    • C#: {System_functions}.Platform_info содержит версию Windows и версию .NET;
    • Псевдо-массив DATA[] доступен теперь из статических функций, а не только из методов класса;
    • Ускорено чтение текстового файла в кодировке UTF-8 (C++, Delphi);
  • Исправления:
    • Создание фиксированных булевых массивов (Delphi/KOL);
    • Генерация блока DEBUG с новыми локальными переменными (Java, Delphi);
    • Завершение модального диалога (C++);
    • c++: компиляция визуальных проектов с опцией /$NOSSTRINGS;
    • C++: сравнение строк SString;

 

29.01.2018 - версия 0.86.9a

  • Исправления:
    • Возврат ответа модального диалога;
    • Вычисление {Control}.Bounds (Delphi/VCL);

 

29.01.2018 - версия 0.86.9

  • Изменения:
    • AL-IV может устанавливаться на любой диск (путь к корню установки должен быть прописан в переменной среды окружения "AL4");
  • Исправления:
    • для {Dialog}, вызов Hide может использоваться для завершения модального диалога, другие исправления (Delphi/VCL, Delphi/KOL, C#, Java);
    • генерация Report_leaks (C++, случай /$Strings==std и /$SSTRINGS);
    • динамические массивы булевых (Delphi);

 

26.01.2018 - новая версия 0.86.8

  • Исправлено:
    • захват мыши в {Paint_tabs} (Delphi/VCL);
  • IDE AL4:
    • Исправлено: неточное позиционирование в тексте кликом мыши;
    • Исправлено: удаление текста закрытого файла из памяти;
    • Исправлено: авто-дополнение после '.' (предложение полей, методов и т.д.);
    • Улучшено: учитывается вложенных уровень (()) при подсказке по параметрам функции;
    • Добавлено: подсказка по конструктору класса/записи {Type}(... по CTRL-ПРОБЕЛ;

     

 

24.01.2018 - версия 0.86.7

  • Исправлено:
    • {Control}.Set_foreground / Set_background;
    • {Bitmap}.Load (C#);
  • Добавлено:
    • {Paint_turtle} - кнопка с рисованием пиктограммы "черепашкой";
    • Программа Tools\Turtle_image для подготовки черепашьих рисунков (поддерживает подложку в виде обычного растрового изображения);
  • IDE AL4:
    • добавлены инструментальные кнопки для часто используемых операций (сохранение, поиск, откат, компиляция);
    • исправления, улучшения (см. в конце файла IDE_AL4.al4).

 

23.01.2018 - версия 0.86.6

  • Исправлено:
    • Компиляция проектов c {OpenGL};
  • Изменения:
    • {Paint_tabs} - анимация с автоматической прокруткой вкладки больше не включается при нажатии на вкладку левой кнопкой мыши (только при нажатии правой);
  • IDE AL4:
    • локализация, перевод на русский язык;
    • исправления, улучшения (см. в конце файла IDE_AL4.al4).

 

21.01.2018 - версия 0.86.5

  • Исправлено:
    • Присваивание объекту в динамическом массиве объектов (Delphi);
  • Изменения:
    • {Long_operation} завершен для C++, Delphi/KOl, Delphi/VCL.
  • IDE AL4:
    • исправления (см. в конце файла IDE_AL4.al4).

 

19.01.2018 - версия 0.86.4

  • Исправлены:
    • {Canvas}.Reset_transorm -> ResetTransform;
    • MIN_INT = 0xFFF_FFFFF -> 0x8FFF_FFFF;
    • Генерация кода для работы с фиксированными массивами в ряде случаев;
  • Изменения:
    • запрещены циклы FOR ...TO MAX_INT] и FOR... DOWNTO MIN_INT], в случае не константной границы TO выражение], при значении выражения MAX_INT цикл может не выполнится ни разу (C#, C++), т.к. используется фактически цикл с условием < to_value, а to_value вычисляется как (выражение+1) при при MAX_INT+1 становится равно MIN_INT;
  • Добавлены::
    • {Long_operation}, автоматическое отображение диалога прогресса длительной операции, обвязка (изменения в {Screen}, {Form}, {AL4_form}, и в исполнительном ядре: для C#, C++);
  • IDE AL4:
    • Небольшие исправления, улучшена навигация по символам (CTRL-ENTER);
    • Другие улучшения и исправления (см. в конце файла IDE_AL4.al4).

 

12.01.2018 - версия 0.86.3

  • Исправлены:
    • Trim, TrimL, TrimR (C#: собственная функция C# не удаляет символы с кодом \0);
    • Генерация кода для работы с фиксированными массивами (C#, Delphi, C++);
  • Добавлены:
    • ключ /norun (совместим с /run, последний найденный применяется);
    • обеспечивается обработка остатка опция компилятора после ключа /@ путь-с-опциями;
  • IDE AL4:
    • Добавлена возможность компиляции из IDE, окно для просмотра ошибок и предупреждений, в том числе запуск только компиляции без выполнения;
    • Другие улучшения и исправления (см. в конце файла IDe_al4.al4).

 

07.01.2018 - версия 0.86.2

  • IDE AL4:
    • Добавлена возможность компиляции из IDE, окно для просмотра ошибок и предупреждений.

 

04.01.2018 - версия 0.86.1

  • Изменения:
    • {Form}.Set_column_auto_arrange(BOOL) - позволяет отключить автоматическое размещение визуальных компонентов колонки, после чего их можно размещать своим кодом в произвольных координатах, и управлять их размером (например, в событии формы resize).
    • компилятор дублирует список ошибок и предупреждений в файле Compiler_messages.html.

  • Исправлены:
    • событие {Form}.activated;
    • Platform_info (Delphi/KOL);
    • {Form}.key_press (Key.Alt, Shift, Control, Win не устанавливались - Delphi KOL, VCL);
    • функция TEST возвращала FALSE в тестовом режиме;
  • Документация дополнена в части:
    • AL-IV:Как начать программировать

 

29.12.2017 - версия 0.86.0

  • Изменения:
    • Дополнительные оптимизации в коде для C++:
      • класс SString для оптимизации работы со строками;
      • вывод графики в {Canvas}, {Bitmap}, {Paintbox}, ... - через Windows GDI ;

  • Исправлены:
    • оптимизация CASE с константным выражением могла формировать не компилируемый код.
  • Впервые опубликован редактор Ide AL4, версия 0.86 (бета).

 

17.12.2017 - версия 0.85.9

  • Изменения:
    • Добавлена функция {Font}.List_fonts(Options, Names[]);
    • Оптимизация для C++ включается автоматически при сборке с параметром /final в опциях проекта AL4 (может отключаться отдельной опцией /$NOOPTIMIZE);
    • Дополнительные оптимизации в коде для C++;
  • Исправлены:
    • курсор мыши для {Paintbox} изменяется только для самого бокса, не затрагивая линейки прокрутки (C#, Java);
    • Ошибки оптимизации типа замены вызова метода его телом;
    • Генерация уникальных имен методов в наследниках классов (для имён, не совпадающих с учетом различного регистра букв - Delphi);
    • Проверка на необходимость импорта классов, использованных неявно (в операторах FOR, PUSH);
    • Работа фильтра в диалоге открытия файлов (Java: в windows addFilenameFilter не работает, но есть недокументированная возможность по использованию setFile);
    • сглаживание для шрифтов (Java);

 

11.12.2017 - версия 0.85.8

  • Изменения:
    • Друзья класса могут обращаться к его непубличным методам.
  • Исправлены:
    • событие key_press принимало клавишу DELETE, в событиях key_down и key_up клавиша DELETE не поступала (Java);
    • курсор для ввода текста в {Paint_lines} (и установка курсора в {Paintbox}) - (Delphi/VCL); так же в java-реализации изменено отображение мигающего курсора (прежний способ с регулярным сокрытием окна курсора приводил к постоянной перерисовке основного контрола).

 

7.12.2017 - версия 0.85.7

  • Изменения:
    • Добавлен оператор
      FRIENDS: {класс1}, {класс2
      }, ... . Друзья класса могут обращаться к его непубличным полям (и - позже - методам).
  • Добавлены:
    • Атрибуты "disabled", "checked" для пунктов меню;
    • Добавлен кодированный символ #ESC;
  • Исправлены:
    • {Paint_tabs}: выделение цветом и толщиной не срабатывало для вкладок левее текущей;
    • {Form}.mouse_move - координаты в поле mouse (Delphi/KOL);
    • Фокусировка щелчком мыши на {Paintbox} и его наследниках (Java);
    • {Listbox}.Clear; событие selection_changed для {Listbox} ;
    • метод для массива строк: Remove(STR) (Delphi, Java);
    • Двойное разрушение контролов по окончании использования (C++/wx);
    • {Paint_tab} .Move_tab(From, To);

 

2.12.2017 - версия 0.85.6

  • Изменения:
    • Запрещена операция сравнения на равенство и неравенство для вещественных;
    • Для колонок формы в реализации Java оставлены только вертикальные линейки прокрутки;
  • Добавлены:
    • {Sorting} .Data_sort(Count) - для сортировки произвольных данных (методы data_compare и data_swap должны быть переопределены в том же объекте);
  • Исправлены:
    • {Listbox}.Insert_item в позиции, равной Count;
    • генерация кода для присваивания записи элементу массива таких записей (Delphi);
    • событие click по правой клавише мыши (Delphi/VCL,KOL, C++);
    • {Text_file}: сохранение текста в формате UTF-8 (Delphi, C++);
    • вставка элемента в динамический массив в позицию Count (Delphi, массивы типов BOOL, BYTE);
    • ширина первой метки в колонке (выровненной 'LEFT', 'RIGHT' или 'CLIENT') устанавливается в значение column.Label_width (Java);
    • координаты pop-up меню при щелчке на контроле (Java);
    • {Dialog_file}.Select_file (Java: bug в Java 7 и 8);
    • устранено мелькание в {Paintbox} и его наследниках (Java: пришлось перейти к использованию JPanel из swing вместо Canvas из awt);

 

27.11.2017 - версия 0.85.5

  • Добавлены:
    • {File_path}.File_info(Path) ==> {file_info} (даты, атрибуты, размер);
    • В дополнение к символу @, включающему режим добавления концов строк в многострочную строчную константу, добавлен символ @@, позволяющий отключить этот режим внутри константы;
    • Событие {Form}.shown;
    • Методы {Edit}: Set_selection_range(Start, Length), Select_all, Get_selection_start, Get_selection_length;
    • Метод {Control} .Set_selection отменён и заменён на Replace_selection;
  • Исправлены:
    • событие mouse_double_click (Delphi/VCL), - последовательность обращений была DOWN-UP-DBLCLICK-DOWN-UP вместо ожидаемой DOWN-UP-DOWN-UP-DBLCLICK;
    • генерация кода для создания простой структуры, содержащей (фиксированные) массивы (C#);
    • генерация кода для присваивания значения полю структуры (RECORD), выбираемой из массива структур (C++);
    • при нажатии Ctrl+[, ] и некоторых других символов поле Key.Char не присваивался соответствующий символ;
    • click для кнопки по умолчанию и отмены при нажатии Enter/Escape (java, C++);
    • сохранение объекта Screen на время выполнения приложения, закрытие всех форм при уничтожении объекта Screen в момент закрытия главной формы (Java, C++);
    • для C++ выполняется объединение всех исходных файлов в один большой файл, что позволяет ускорить компиляцию проекта, но в результате возникает проблема с установкой точек останова в строках кода, начиная с 65536. Теперь для слишком больших результирующих проектов на C++ выполняется разбиение исходного кода на фрагменты.

 

22.11.2017 - версия 0.85.4

  • Изменения:
    • Добавлено требование на оформление кода: блочные операторы (CASE, FOR, FOREVER, PUSH, DEBUG, debug) всегда должны начинаться в новой строке (в том числе после ELSE, в ветвях CASE вслед за ':' или '?').
    • При обращении к Функция Str|ing для перевода в строку, ее имя может быть сокращено до S.
  • Исправлены:
    • Направление в vertical_wheel (Java, Delphi/KOL);
    • Установка значения {Paintbox}.Set_content_size меньше, чем текущее значение Visible_area_size (по ширине, высоте - Delphi/VCL);
    • установка модификаторов Ctrl, Alt, Shift в поле {Form}.Key для всех событий мыши и клавиатуры (Java);
    • {Paint_lines} всегда запоминает установленную методом Move_top_left_to позицию (по вертикали и горизонтали), и возвращает ее в случае, если разница между этой позицией и позицией линейки прокрутки не более 1 по абсолютной величине (что устраняет проблемы округления до целого при установке позиции линейки прокрутки);
    • анализ ошибок c#-компилятора: проверяется не только наличие слова error, но и то, что это слово самостоятельное (не является частью более длинного идентификатора);
    • генерация кода для STORED параметров (C++);
    • генерация кода для [].Delete(index++) (случай использования автоинкремента/автодекремента для параметра функции Delete.
  • Небольшой подарок себе на годовщину первой публикации: начат (и уже в значительной степени завершен) редактор кода для AL-IV. Планируется завершить его разработку в основном до конца года.

 

15.11.2017 - версия 0.85.3

  • Добавлены:
    • {Control}.Locaton ==> {rect} - координаты визуального компонента в форме (в отличие от Left, Top, возвращающих координаты относительно родительской колонки);
  • Исправлены:
    • Генерация кода для директив NATIVE не начинающихся с using (C#) - перемещена внутрь класса;
    • Оптимизация в случае инлайнинга функции, содержащей в выражении приведение типа класса: RESULT = x.y.z.{Some_class};
    • {Control}.Top (Delphi/KOL);

 

12.11.2017 - версия 0.85.2

  • Изменения:
    • при генерации кода C++ функции Main явно вызван _CrtSetDbgFlag(0); для предотвращения слишком длительного вывода отчета об утечках памяти по окончании выполнения (которые реально утечками не является, и есть результат работы STL).
  • Добавлены:
    • перечисление {Paintbox}.{cursor}, поле Cursor|_shape, метод Set_cursor(New_c|ursor_shape)
      -- кажется, не работает для Delphi VCL (баг VCL?);
  • Исправлены:
    • Генерация кода для директив NATIVE не начинающихся с using (C#) - перемещена внутрь класса;
    • {Canvas}.Measure (C# неверно возвращает размер строки, завершающейся пробелами);
    • Коды специальных клавиш (C++/wx);
    • Генерация кода для операторов PUSH внутри ветвей CASE (проблемы инициализации локальных переменных в C++);
    • Для {Paintbox} и (его наследника {Paint_lines}), если включается опция "F" ((фокусировка), то все клавиши навигации обрабатываются в самом компоненте, включая стрелки и табуляции (все языки/фреймворки);
    • {Localize_str} для Java - в случае отсутствия вызова Set_directory_lang;
    • {Paint_lines}.provide_caret (Java) - удаление старой каретки до установки новой.

 

9.11.2017 - версия 0.85.1

  • Обеспечена работа с объектами класса {Object}, в том числе NONE-объектами.
  • Добавлены:
    • функция {Canvas}.System_color({system_color}), перечисление {system_color};
    • возможность подключать собственный таймер для компонента (в основном для целей анимации), методы: {Control}.animate(Count, Interval) и animation(Tick) (событие);
    • собственные обработчики событий мыши для {Control}: mouse_move, mouse_down, mouse_up, mouse_wheel;
    • визуальный компонент {Paint_tabs}:
  • Исправлены:
    • {Canvas}.Offset , Measure - использовались пиксели, теперь используются текущие единицы канвы (по умолчанию - поинты);
    • координаты мыши {point} mouse для всех событий мыши (Java, C++);
    • координаты всплытия меню {Tray_icon} (C++);

 

5.11.2017 - версия 0.85.0

  • Добавлена возможность задавать ограничения для параметров в виде отношения сравнения:
    , IF P1 IS CONST, THEN P1 >= 0 ...
  • Исправлено:
    • {Canvas}.Offset, Rotate - приведен к единому знаменателю для всех целевых сред.
    • Обработка события {Form}.resize в ответ на максимизацию/восстановление формы (Java).
  • Завершен визуальный элемент {Paintbox} с возможностью прокрутки содержимого.
  • Добавлен визуальный элемент {Paint_lines} (на основе {Paintbox}) с поддержкой каретки (указатель для ввода текста) и специфическими методами для работы со строками.

 

 

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


См. здесь

 

 


В начало