AL-IV:    Versions history


February, 14, 2018 - new version: 0.87.3

  • IDE AL4:
    • showing localized errors and warnings;
    • showing/editing localized source code;
    • fixes and improvements (see in Ide_al4.al4 at the end of source file).


February, 12, 2018 - version: 0.87.2

  • Changes:
    • tests in a class are not performed again if the class was not changed and there were no changes in classes on which it depends on (all the target languages/platforms);
    • Tests for the class {Form};
  • Fixes:
    • C++: visual application with {Paintbox} descendants could crash on form create (too early calling paint event);
    • all the warnings/errors now are written to the Compiler_messages.html (some messages were not stored there);
    • compiling a function call from a TEST function could lead to creating an incorrect (non-compilable) code;
    • compiling the ending TEST block could be interrupted earlier because of too optimistic prediction of iterations amount;
    • {Form}.Set_left (C++, Java);
    • C++: tests for GUI-applicationa are compiled for and executed in a GUI mode (rather then in console mode) - otherwise it is not possible to test GUI applications;
  • IDE AL4:
    • fixes and improvements (see in Ide_al4.al4 at the end of source file).


February, 7, 2018 - version: 0.87.1

  • Changes:
    • Added: {Screen}.Default_font_size (default value is 10 pt);
    • automatic sizes for buttons, labels, check boxes in columns aligned 'TOP' and 'BOTTOM' - by text size in those controls (C#);
    • C#: tests in a class are not performed again if the class was not changed and there were no changes in classes on which it depends on (current version does not take into account changes in TEST  functions though);
  • Fixes:
    • Delphi/KOL: the option NIL_EVENTS is added now (without it, problems while executing) ;
    • Java: automatic sizing of {Label};
    • Java: setting custom font size for controls;
    • Tools\Test_report updated (to work in any directory where AL-IV is installed);
  • IDE AL4:
    • fixes and improvements (see in Ide_al4.al4 at the end of source file).


February, 04, 2018 - version: 0.87.0

  • Changes:
    • Delphi/KOL, C++: implementation of dynamic string arrays was changed;
    • C#: {System_functions}.Platform_info contains Windows version and .NET version;
    • Pseudo-array DATA[] is accessible now in static functions too, not only in methods of a class;
    • Reading of text files in UTF-8 encoding became faster (C++, Delphi);
  • Fixes:
    • Creating fixed arrays of Boolean (Delphi/KOL);
    • Generating a DEBUG block having variable declarations (Java, Delphi);
    • Ending modal dialog (C++);
    • c++: compiling visual projects with the option /$NOSSTRINGS;
    • C++: comparing SString strings;


January, 29, 2018 - version: 0.86.9a

  • Fixes:
    • Returning modal dialog answer;
    • Calculating {Control}.Bounds (Delphi/VCL);


January, 29, 2018 - version: 0.86.9

  • Changes:
    • AL-IV can now be installed on any disk (a path to the installed folder should be stored in the environment variable "AL4");
  • Fixes:
    • For the {Dialog}: calling Hide now can also be used to end a modal dialog; other fixes (Delphi/VCL, Delphi/KOL, C#, Java);
    • Generating Report_leaks (C++, for options /$Strings==std and /$SSTRINGS);
    • Dynamic arrays of Boolean (Delphi);


January, 26, 2018 - new version: 0.86.8

  • Fixed:
    • capturing mouse for a {Paint_tabs} (Delphi/VCL);
  • IDE AL4:
    • Fixed: incorrect positioning in text by mouse click;
    • Fixed: deleting text from memory together with closing tab;
    • Fixed: auto-completion after '.' (suggesting fields, methods, etc.);
    • Improved: taking into account (()) nesting hinting function parameters;
    • Added: hints on class/record constructors {Type}(... by CTRL-SPACE;


January, 24, 2018 - version: 0.86.7

  • Fixes:
    • {Control}.Set_foreground / Set_background;
    • {Bitmap}.Load (C#);
  • Added:
    • {Paint_turtle} - a button with a glyph drawn by a "turtle";
    • An application Tools\Turtle_image to prepare turtle images (supports underlying images);
  • IDE AL4:
    • tool buttons added for some often operations: save, find, undo, compile);
    • fixes and improvements (see in Ide_al4.al4 at the end of source file).


January, 23, 2018 - version: 0.86.6

  • Fixes:
    • Compiling {OpenGL} projects;
  • Changes:
    • {Paint_tabs} - animation with auto-scroll is not now started by clicking a tab with a left mouse button (only with a right mouse button);
  • IDE AL4:
    • localization, translation to Russian;
    • fixes and improvements (see in Ide_al4.al4 at the end of source file).


January, 19, 2018 - version: 0.86.5

  • Fixes:
    • Assigning an object in a dynamic objects array (Delphi);
  • Changes:
    • {Long_operation} - finished for C++, Delphi/KOl, Delphi/VCL.
  • IDE AL4:
    • fixes (see in Ide_al4.al4 at the end of source file).


January, 19, 2018 - version: 0.86.4

  • Fixes:
    • {Canvas}.Reset_transorm -> ResetTransform;
    • MIN_INT = 0xFFF_FFFFF -> 0x8FFF_FFFF;
    • Code generating to work with fixed arrays in some cases;
  • Changes:
    • FOR loops ...TO MAX_INT] and DOWNTO MIN_INT] are disabled. In case of non-constant to-value equal such value, the loop can be not executed at all (C#, C++) since actually a for (...; < to_value; ...) is used where to_value = value+1 (and in case of MAX_VALUE+1 it becomes equal to MIN_VALUE);
  • Added:
    • {{Long_operation}, automatic showing a progress long operation dialog with a capability to cancel the operation (changes are in {Screen}, {Form}, {AL4_form} and in the core: for C#, C++);
  • Changes:
    • Some improvements, better navigation on symbols (CTRL-ENTER);
    • Other improvements and fixes (see in Ide_al4.al4 at the end of source file).


January, 12, 2018 - version: 0.86.3

  • Fixes:
    • Trim, TrimL, TrimR (C#: C# native Trim does not remove '\0' chracter);
    • Code generation to work with fixed arrays (C#, Delphi, C++);
  • Added:
    • option key /norun (compatible with /run, but only the last is applied);
    • the rest of options following /@ path-of-configuration also is handled, at the end of options in a configuration file;
  • Changes:
    • It is now possible to compile project from the IDE, and to list errors/warnings from a special window, including compiling without running;
    • Other improvements and fixes (see in Ide_al4.al4 at the end of source file).


January, 7, 2018 - version: 0.86.2

  • Changes:
    • It is now possible to compile project from the IDE, and to list errors/warnings from a special window.


January, 4, 2018 - version: 0.86.1

  • Changes:
    • {Form}.Set_column_auto_arrange(BOOL) - allows to turn off automatic placing controls on the column and to place and size it by your own code (e.g. in the form event "resize").
    • a compiler outputs all the errors and warnings to Compiler_messages.html also.
  • Fixed:
    • {Form}.activated event;
    • Platform_info (Delphi/KOL);
    • {Form}.key_press (Key.Alt, Shift, Control, Win did not set - Delphi KOL, VCL);
    • function TEST returned FALSE in a test mode;
  • A documentation is completed in part:
    • AL-IV: How to start programming


December, 29, 2017 - version: 0.86.0

  • Changes:
    • Additional optimizations in C++ code:
      • SString class to optimize strings manipulations;
      • graphics output in classes {Canvas}, {Bitmap}, {Paintbox} ... made via Windows GDI;
  • Fixed:
    • optimization of CASE could form an erroneous code.
  • The first time the editor Ide AL4 is published, version 0.86 (betha).


December, 17, 2017 - version: 0.85.9

  • Changes:
    • A function added {Font}.List_fonts(Options, Names[]);
    • Optimization is turned on for a C++ when building with the /final option (can be off by the option /$NOOPTIMIZE);
    • Additional optimizations in C++ code;
  • Fixed:
    • cursor shape for {Paintbox} is set only for its box not affecting its scroll bars (C#, Java);
    • Optimization errors (replacing a method call with its body);
    • Generating unique method names in class descendants (for names not matching by registry case only - Delphi);
    • Checking for a necessity of import of classes used implicitly (in FOR/PUSH statements);
    • Working of a file filter in Java (in Windows addFilenameFilter is not working but there is a non-documented "feature" with setFile method);
    • Fonts anti-aliasing (Java);


December, 11, 2017 - version: 0.85.8

  • Changes:
    • Friends of a class can access its non-public methods.
  • Fixed:
    • key_press event was firing for the key DELETE  thereas the DELTE key was not received in key_down/key_up events(Java);
    • setting cursor shape in {Paintbox}, beam shape cursor in {Paint_lines} (Delphi/VCL); also for Java-implementation cursor showing changed to prevent instant window repainting.


December, 7, 2017 - version: 0.85.7

  • Changes:
    • A statement
      FRIENDS: {class1}, ... {classN} . added. Friends of a class can access its non-public fields and (later) methods.
  • Added:
    • Attributes "disabled", "checked" for menu items;
    • Encoded symbol #ESC added;
  • Fixed:
    • {Paint_tabs}: highlighting did not work for tabs left to the current;
    • {Form}.mouse_move - coordinates in the mouse field (Delphi/KOL);
    • Focusing {Paintbox} and its descendats by mouse click (Java);
    • {Listbox}.Clear; selection_changed event for {Listbox} ;
    • a method for array of STR: Remove(STR) (Delphi, Java);
    • Double destroying controls on closing form (C++/wx);
    • {Paint_tab} .Move_tab(From, To);


December, 2, 2017 - version: 0.85.6

  • Changes:
    • Comparing for equality (==) and inequality (!=) is not allowed for REAL values;
    • For {Form} columns in Java implementation only vertical scroll bars left;
  • Added:
    • {Sorting} .Data_sort(Count) - to sort arbitrary data (methods data_compare and data_swap should be overridden in the same object);
  • Fixed:
    • {Listbox}.Insert_item in the Count position;
    • code generation for assigning a record to an array of such type records (Delphi);
    • event click firing on right mouse button (Delphi/VCL,KOL, C++);
    • {Text_file}.Save: saving text in 'UTF8' format (Delphi, C++);
    • inserting an item to a dynamic array of BOOL or BYTE (Delphi);
    • size of the first label in a column (for columns aligned 'LEFT', 'RIGHT' or 'CLIENT') is set to column.Label_width value (Java);
    • pop-up menu coordinates when a control is clicked (Java);
    • {Dialog_file}.Select_file (Java: bug in Java 7 & 8);
    • flickering is removed in {Paintbox} and its descendants (Java: Jpanel from swing was used instead of Canvas from awt);


November, 27, 2017 - version: 0.85.5

  • Added:
    • {File_path}.File_info(Path) ==> {file_info} (dates, attributes, size);
    • In addition to a symbol @, which turns on mode in which new line symbols are added in a multiline string constant automatically, a symbol @@ added which allows to turn such mode off (to the end of a constant or to the next symbol @);
    • {Form}.shown event;
    • Methods of {Edit} class: Set_selection_range(Start, Length), Select_all, Get_selection_start, Get_selection_length;
    • Method {Control} .Set_selection is abandoned and replaced to Replace_selection;
  • Fixed:
    • event mouse_double_click (Delphi/VCL), - sequence of calls was DOWN-UP-DBLCLICK-DOWN-UP instead of normal DOWN-UP-DOWN-UP-DBLCLICK;
    • code generation for case of creating a structure containing a fixed array (C#);
    • code generation for assigning a value to a record field if a record is from an array (C++);
    • On press Ctrl+[, ] and some other keys a field Key.Char was not assigned to a correspondent character;
    • event click firing for default and cancel button when Enter/Escape is pressed (Java, C++);
    • preserving the Screen object on all the time while an application is running, closing all the forms at the moment when the main form is closed (Java, C++);
    • still now for C++ all the resulting sources are united into one big cpp-file to speed up project compiling. The problem is that after 65536 lines it is not possible to make breakpoints. Now, for very large resulting projects in C++, large output source files are splitting onto enough small ones.


November, 22, 2017 - version: 0.85.4

  • Changes:
    • A requirement added on code structure: block statements (CASE, FOR, FOREVER, PUSH, DEBUG, debug) must always start from a new line (i.e. it is not allowed to write those in the same line following ELSE or in CASE branches follwing ':' or '?').
    • While calling a Str|ing embedded function to convert value to string, its name can be reduced to S.
  • Fixed:
    • direction in vertical_wheel (Java, Delphi/KOL);
    • Setting {Paintbox}.Set_content_size less then current Visible_area_size (by width, height - Delphi/VCL);
    • Setting modifiers Ctrl, Alt, Shift in the field {Form}.Key for all the mouse and keyboard events (Java);
    • {Paint_lines} always stores values set by the method Move_top_left_to (for both vertical and horizontal directions) and returns it in case when a difference between that value and a correspondent scrollbar position is less then 1 in absolute value (this fixes rounding problem which occur in result of rounding to nearest integer of a value assigned to a scrollbar current position property);
    • C# compiler errors analyzing: not only word "error" is checking but its neighboring characters to ensure that error is not a part of longer word (i.e. a class name);
    •  code generation for STORED parameters (C++);
    • generating [].Delete(index++) (in case when index is auto-decremented or auto-incremented).
  • A small present to myself for anniversary a year from the first publication: an own code editor for AL-IV started (and sufficiently progressed). It is planned to finish its developing up to the end of the year.


November, 15, 2017 - version: 0.85.3

  • Added:
    • {Control}.Location ==> {rect} - control coordinates in a parent form rather then (Left, Top returning coordinates relatively to a parent column).
  • Fixed::
    • Generating code for NATIVE directives not starting from "using" (C#): moved into a resulting class;
    • Optimization in case of inlining of a function containing in an expression a type cast of class: RESULT = x.y.z.{Some_class};
    • {Control}.Top (Delphi/KOL);


November, 12, 2017 - version: 0.85.2

  • Changes:
    • on C++ code generation, in function Main following code is added: _CrtSetDbgFlag(0); (to prevent very long delay while reporting about memory leaks, on the application end - though these are not memory leaks actually but results of STL working).
  • Added:
    • A enumeration {Paintbox}.{cursor}, a field Cursor|_shape, a method Set_cursor(New_c|ursor_shape)
      -- it seems does not work for Delphi VCL (VCL bug?);
  • Fixed:
    • Generating code for NATIVE directives not starting from "using" (C#): moved into a resulting class;
    • {Canvas}.Measure (C# incorrectly calculates size for a string having trailing spaces);
    • special key codes handling (C++/wx);
    • code generation  for PUSH statements in CASE branches (C++ compiler can not initialize local variables);
    • For the {Paintbox} (and its descendant {Paint_lines}) when the option "F" is set (focusable), then all the navigation keys are handled in the control itself (all the languages/frameworks);
    • {Localize_str} for Java - in case when Set_directory_lang was not called;
    • {Paint_lines}.provide_caret (Java) - removing old caret before setting new one.


November, 9, 2017 - version: 0.85.1

  • A capability provided to use variables of class {Object} (and assigning NONE to them).
  • Added:
    • {Canvas}.System_color({system_color}, enumeration {system_color};
    • A capability to add a timer for any control for animation purposes (mainly), methods {Control}.animate(Count, Interval) and animation(Tick) (a callback event);
    • Own mouse events handlers for {Control} class: mouse_move, mouse_down, mouse_up, mouse_wheel;;
    • A visual component {Paint_tabs}:
  • Fixed:
    • {Canvas}.Offset , Measure - pixels were used, now current units of the canvas are used (default are points);
    • mouse coordinates {point} mouse for all the mouse events (in Java & C++);
    • pop-up menu coordinates for {Tray_icon} (C++);


November, 5, 2017 - version: 0.85.0

  • A capability added to specify parameters restrictions in form of comparison relations, e.g.:
    , IF P1 IS CONST, THEN P1 >= 0 ...
  • Fixed:
    • {Canvas}.Offset, Rotate - made the same for all the frameworks.
    • calling {Form}.resize event provided on form maximize / restore (Java).
  • A control {Paintbox} with content scroll is finished.
  • A visual control {Paint_lines} (based on {Painbox}) added with support of blinking caret and specific methods to handle lines.




Previous versions history (2016-2017)


See here