- Изменения:
- Платформы / языки:
- Поддержка компиляции в языки программирования
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 Кб может показаться
великоват, но давайте помнить, что:
- не на всякой машине удастся запустить такое приложение
C# (нужна определенная версия
DotNet Framework); Приложение
KOL запустится практически везде, где
есть Windows/Linux+WinE (в том числе
NT4/Windows98);
- C# не использует статическую
линковку по умолчанию и все нужные ему библиотеки уже есть в
Windows. Приложение
KOL не требует каких-либо внешних библиотек, все свое у
него с собой;
- Это может показаться странным, но для не совсем пустого
приложения (когда на форме имеется несколько визуальных
элементов, есть обращения к файлам и т.п.)
GUI приложение KOL
оказывается примерно вдвое меньше аналогичного приложения
C#. За исключением, пожалуй,
минимального приложения для обращения к БД, где
C#NET опять небольшое имеет стартовое
преимущество.
- Введен модификатор IMPORT, ANYWAY: {класс}
. При включенной оптимизации не удаляются классы,
импортированные таким образом. Так же, не удаляются нативные методы
(в отличие от нативных функций);
- Расширен модификатор NATIVE для
функции: теперь он может включать список зависимостей от классов и
функций/методов в виде NATIVE({класс},
{класс}.метод, ...).
Такой список позволяет при включенной оптимизации не
допустить отбрасывания неиспользуемых (в коде AL4)
классов и их функций/методов;
- Компиляция:
- C#: файлы *.cs
в целевой папке удаляются перед сборкой (нет необходимости
чистить вне компилятора в случае смены опций оптимизации).
- Delphi: аналогично, файлы *.pas
в целевой папке удаляются перед сборкой.
- Исправления:
- Delphi: генерация инициализации полей
встроенного класса {Object} редуцировалась
по причине излишней оптимизации;
- Delphi: в классе
{Paintbox}
прокрутка каретки не шла вместе с прокруткой окна;
|