![]() |
![]() |
volvo |
![]()
Сообщение
#1
|
Гость ![]() |
Итак, в качестве новогоднего подарка от разработчиков FPC на официальном сайте доступна новая версия компилятора: 2.4.0
Изменений достаточно много:
. . Приведу краткий список изменений... Полный список, с объяснением их причин и методов исправления программ приведен здесь (англ. язык): freepascal wiki -> User Changes 2.4.0 Изменения в использовании конструкций языка 1. В предыдущих версиях компилировался код, в котором константа перечислимого типа передавалась в подпрограмму: procedure test(const a);, теперь он компилироваться не будет, поскольку неизвестен размер константы (1, 2, 4, или 8 байт), передаваемой в подпрограмму. 2. Свойства (properties), напрямую связанные (mapped) с полями класса, трактуются компилятором, как обычные поля класса. Если раньше можно было такие property передавать в качестве Var или Out - параметра, и получать адрес свойства, то теперь этого делать нельзя. Все property трактуются одинаково, независимо от того, связаны они с полем напрямую, или используют функции чтения/записи (getter/setter): {$mode objfpc} 3. Перегрузка оператора присваивания, возвращающего строку. Теперь невозможно создать такой оператор, который будет возвращать строку фиксированного размера (не равного 255). То есть, код: typeкомпилироваться больше не будет (ts1 не является теперь допустимым типом для оператора присваивания). Если вам так уж необходимо вернуть строки разной длины - "оберните" эти строковые типы в запись: type 4. Описание абсолютных переменных: прежние версии FPC позволяли совмещать переменные с полями классов, элементами динамических массивов, элементами строк, и т.д. Теперь совмещение с любым разыменованным выражением запрещено. Код: typeкомпилироваться не будет... 5. Индексированные свойства (properties) и значения по умолчанию: если в getter-е для индексированного свойства присутствует значение по умолчанию, то при вызове можно было не указывать умалчиваемое значение Теперь этого делать нельзя, ВСЕ параметры в таких getter-ах должны быть указаны: {$mode objfpc} 6. Порядок полей/методов в описании класса. Раньше можно было описывать "вперемешку" поля, свойства и методы класса. Теперь этого делать нельзя: поля должны идти перед методами и свойствами. Как результат - подобный код: {$mode objfpc}компилироваться больше не будет. 7. Описания типов в списке параметров подпрограммы. Теперь нельзя конструировать тип прямо в заголовке подпрограммы, нужно предварительно описать тип (в секции Type программы/модуля), а уж потом его использовать. Так больше делать нельзя: procedure write(var f: file of extended; e: extended);Это ограничение проистекает из правила совместимости типов Паскаля: "Два типа, описанные совершенно одинаково в разных местах программы, считаются разными". Некоторые изменения в реализации: 1. Изменены правила выравнивания переменных, имеющих тип "запись". 2. Присваивание значения True в переменную типа ByteBool/WordBool/LongBool/QWordBool теперь не эквивалентно присваиванию 1. Теперь все биты булевых переменных устанавливаются в 1 (значение становится равным "-1"). ***** Чуть позже будут выложены результаты тестирования компиляторов FPC второй ветки (2.0.0, 2.0.4, 2.2.0, 2.2.2, 2.4.0) на скорость: 1) доступа к члену класса. 2) вызова пустого статического метода. 3) вызова пустого динамического метода. 4) быстрой сортировки массива (Quick Sort). 5) пузырьковой сортировки массива(Bubble Sort) 6) "древесной" сортировки массива (Tree Sort). 7) вычисления 4500 цифр числа Пи. 8) конкатенации строк. 9) вещественных вычислений. |
![]() ![]() |
Romtek |
![]()
Сообщение
#2
|
![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 303 Пол: Мужской Реальное имя: Роман Репутация: ![]() ![]() ![]() |
Так как же тогда можно с пунктом 2?
-------------------- Romiras HomeLab- материалы и статьи по разработке ПО, моделирование алгоритмов, обработка и анализ информации, нейронные сети, машинное зрение и прочее.
|
![]() ![]() |
![]() |
Текстовая версия | 21.06.2025 11:48 |