![]() |
![]() ![]() |
![]() |
IUnknown |
![]()
Сообщение
#1
|
![]() a.k.a. volvo877 ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: ![]() ![]() ![]() |
На официальном сайте FPC с 1 января 2012 г. доступна новая версия компилятора: 2.6.0
Приведу список новых возможностей... Изменения в языке 1. Добавлена поддержка вложенных типов (в том числе - классов), классовых переменных и локальных констант. То есть, теперь можно написать так: type 2. Расширенный синтаксис записей. То, что в Дельфи называется advanced record syntax, теперь есть и в FPC. В записях можно использовать спецификаторы private/public, можно описывать вложенные типы, конструкторы, статические поля, свойства, классовые конструкторы, классовые деструкторы и классовые операторы (конструкторы записей пока не поддерживаются). На всякий случай, отличия таких расширенных записей от классов: 1) не поддерживается наследование; 2) записи могут содержать вариантные части, классы - нет; 3) записи - это не ссылки, а значения, в отличие от классов. 3. Энумераторы записей. В предыдущих версиях FPC энумераторы (перечислители) могли быть классами, объектами или интерфейсами. Теперь они могут быть также и расширенными записями. 4. Поддержка хелперов классов и записей. Это позволяет добавлять методы, свойства и перечислители к классам и записям, не прибегая к наследованию. Пример использования хелпера: typeПодробное описание - Здесь (англ.) 5. Дженерики: записи, массивы и процедурные типы. В предыдущих версиях FPC поддерживались только шаблонные (вернее, обобщенные) классы, объекты и интерфейсы. Теперь стало возможным делать обобщенными всё вышеперечисленное. 6. Поддержка локальных перечислений. В режиме {$SCOPEDENUMS ON} перечисления не добавляются в глобальную область видимости: type 7. Поддержка собственных сообщений об устаревших элементах. unit OldUnit deprecated 'Use NewUnit instead';(также допустимо использовать с константами) 8. Поддержка диалекта Objective Pascal Для большего удобства работы в MacOS X. (В настоящее время этот диалект поддерживается только на Darwin-платформах, включая iOS). Основы языка Objective Pascal описаны здесь 9. Добавлен режим, поддерживающий стандарт ISO 7185 {$MODE ISO}, или -Miso из командной строки 10. Поддержка вложенных процедурных переменных. Теперь возможно определить переменную процедурного типа, которая совместима по присваиванию с вложенными процедурами/функциями. Эта фича включена по умолчанию в режимах {$mode MacPas} и {$mode ISO}, в остальных режимах ее надо включить явно: {$modeswitch NestedProcVar}. Возможно также присвоить обычную (не вложенную) подпрограмму подобной переменной, и вызывать ее таким образом. Разрешение этой фичи изменяет соглашение вызова вложенной подпрограммы. Это "сломает" код времен Турбо-Паскаля, который использует вложенные процедуры/функции как Callback-и при работе с коллекциями из модуля Objects. Тип процедурной переменной может хранить ссылку на вложенную подпрограмму в двух случаях: а) когда он описан внутри списка параметров другой процедуры (описание в стиле ISO: procedure caller(procedure ToBeCalled);) б) когда в объявлении присутствует "is nested" (подобно описанию "of object" для методов класса): При использовании этого способа надо быть внимательным, поскольку очень просто написать неправильный код: если присвоить ссылку на вложенную процедуру соответствующей переменной, выйти из области видимости внешней функции, и только потом попытаться вызвать вложенную - подобный вызов приведет к UB (неопределенному поведению) 11. Поддержка нелокальных Goto (я просто описываю нововведение, нравится оно мне или нет - это другой вопрос) Теперь возможно перейти по Goto на метку в другой подпрограмме, т.е., быстро выйти из глубоко вложенной подпрограммы в менее вложенную. Эта возможность включена по умолчанию в режимах ISO/MacPas, в остальных - ее надо (а лучше - не надо) включить: {$modeswitch NonLocalGoto}. Невозможно обойти нелокальным Goto стековые фреймы, требующие финализации (во избежание проблем с подсчетом ссылок). 12. Поддержка & для экранирования ключевых слов. Можно использовать экранированные служебные слова как идентификаторы:
13. Поддержка параметров univ для режима MacPas Предыдущие версии компилятора просто игнорировали квалификатор univ для параметров. Теперь FPC его нормально парсит и интерпретирует как и все другие компиляторы MacPascal-я: то есть, разрешает передачу любых фактических параметров, если их размер соответствует размеру формального параметра подпрограммы. Эта возможность - только для режима {$mode macpas}. Пользоваться ей нужно с большой осторожностью, так как она вообще предназначена для портирования Legacy-кода. 14. Вещественный тип CExtended С точки зрения точности этот тип аналогичен типу Extended, но он соответствует свойствам/поведению эквивалентного Extended типа в C. С практической точки зрения это означает, что на платформах i386/x86_64 тип CExtended соответствует типу long double, а на остальных платформах - типу double. В основном это необходимо в случаях, когда с С переводятся описания структур, чтобы гарантировать правильное выравнивание, и для описания параметров к Сишным подпрограммам. Внимание: на данный момент FPC не поддерживает эквивалент long double на других платформах (кроме вышеперечисленных). 15. Встроенный SAR (shift arithmetic right) В отличие от SHL/SHR, SAR реализован не как оператор, а как встроенная функция. Она имеет разные имена для разных целочисленных типов (SarInt64/SarLongint/SarSmallint) чтобы избежать проблем при присваивании результата функции в выражении. 16. Встроенные ROL/ROR Вместе с SAR добавлена поддержка и для ROL (Rotate Overflow Left) и ROR (Rotate Overflow Right). Также как и в случае SAR, функции реализованы под разными именами для разных типов параметров. 17. Встроенные функции Bit Scan. Добавлена поддержка еще двух функций: BSF (Bit Scan Forward) и BSR (Bit Scan Reverse). 18. Типы Boolean16, Boolean32 и Boolean64. Эти 3 типа аналогичны по поведению стандартному типу Boolean, за исключением того, что их размеры - соответственно 2, 4 и 8 байт. Очень удобно в случае организации интерфейса с библиотеками. Внимание: существующие типы WordBool/LongBool/QWordBool подразумевают, что False = 0, а True <> 0. В случае использования новых типов False = 0, True = 1, а все остальные значения - не валидны. Изменения в языке 1. Поддержка VFPv2/VFPv3 Была добавлена поддержка модулей Vector Floating Point (VFP) второй и третьей версии. Эти модули обычно включаются на процессорах семейств Cortex-A8 и Cortex-A9, а также на устройствах, основанных на iOS. 2. Поддержка Thumb-2 Была добавлена поддержка для генерации Thumb-2 кода для ARMv7-M так же, как это реализовано в семействе Cortex-M3. На данный момент эта архитектура поддерживается только для встроенных (embedded) систем, она еще не работает ни для Linux ни для iOS. (продолжение следует. Есть еще немало изменений на уровне использования - usage changes - с описаниями, как было, как стало и почему внесено изменение. Чуть позже опишу их тоже подробно) |
IUnknown |
![]()
Сообщение
#2
|
![]() a.k.a. volvo877 ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 013 Пол: Мужской Репутация: ![]() ![]() ![]() |
Продолжаем
![]() Все системы Изменения в использовании конструкций языка 1. Ключевое слово static теперь разрешено использовать по умолчанию во всех режимах совместимости (Показать/Скрыть)
2. Переключатель режимов POINTERARITHMETICS заменен на директиву POINTERMATH (Показать/Скрыть)
3. Компилятор больше не ищет утилиты в текущей папке. (Показать/Скрыть)
Изменения в языке 1. Передача производных классов через var- и out- параметры (Показать/Скрыть)
2. Параметры array of const и подпрограммы cdecl (Показать/Скрыть)
3. Строковые константы длиннее 256 символов (Показать/Скрыть)
4. Типизированные константы (String/AnsiString), содержащие WideChar-ы/UnicodeChar-ы (Показать/Скрыть)
5. Неявная переменная Result в режиме MacPas (Показать/Скрыть)
6. Тип результата оператора Addr() (Показать/Скрыть)
7. Недоступные символы и свойства (Показать/Скрыть)
8. <ordinal> запрещено в <set type> (Показать/Скрыть)
9. Поддержка хелперов для записи и класса (Показать/Скрыть)
10. Анонимный вызов Inherited (Показать/Скрыть)
11. Получение адреса поля в свойстве-записи. (Показать/Скрыть)
12. Синтаксис Generic-ов в режиме Delphi (Показать/Скрыть)
Изменения в реализации 1. Порядок параметров в RTTI (Показать/Скрыть)
2. Размер множеств в режиме TP/Delphi (Показать/Скрыть)
3. Константы в смешанных (знаковых/беззнаковых) 64-битных выражениях (Показать/Скрыть)
4. Переполнение/Проверка границ для вещественных констант (Показать/Скрыть)
5. Новый элемент перечисления TTypeKind (Показать/Скрыть)
6. Выравнивание (padding) типов Object/Class (Показать/Скрыть)
7. Декорирование имен переменных, типизированных констант, и внутренних символов. (Показать/Скрыть)
8. Использование ResourceString для инициализации типизированных строковых констант. (Показать/Скрыть)
Изменения в модулях 1. SysUtils.GetAppConfigDir() теперь использует VendorName (Показать/Скрыть)
2. IniFiles.WriteString() больше не удаляет пустые строки (Показать/Скрыть)
3. IniFilesDeleteKey() больше не удаляет пустые секции (Показать/Скрыть)
4. Модуль и утилиты xmlrpc удалены (Показать/Скрыть)
5. Определения IInterface.QueryInterface, ._AddRef и ._Release изменились. (Показать/Скрыть)
6. Переменная thread_count удалена из модуля system (win32, win64, wince, symbian, nativent) (Показать/Скрыть)
7. Глобальные переменные для локали объявлены устаревшими. (Показать/Скрыть)
8. Изменено логгирование CustApp (Показать/Скрыть)
9. Свойство fpweb T(Custom)FPWebModule.Template (Показать/Скрыть)
10. Изменения в модуле HTTP (Apache) (Показать/Скрыть)
11. fcl-image теперь использует другое сжатие по умолчанию при записи PNG-файлов (Показать/Скрыть)
12. Некоторые поля дженериков в FGL были случайно установлены в Public/Protected (Показать/Скрыть)
13. Файл regexpr.pp переименован в oldregexpr.pp (Показать/Скрыть)
Unix платформы 1. SysUtils.FileAge больше не работает для папок (Показать/Скрыть)
x86 платформы 1. Размер операции pushf/popf/pusha/popa во встроенном ассемблере (стиль Intel) (Показать/Скрыть)
x86-64 платформы 1. Передача параметров и возврат результата на x86-64 (за исключением Win64) (Показать/Скрыть)
2. Передача константных параметров под не-Win64 платформами (Показать/Скрыть)
|
TarasBer |
![]()
Сообщение
#3
|
![]() Злостный любитель ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: ![]() ![]() ![]() |
> 15. Встроенный SAR (shift arithmetic right)
> В отличие от SHL/SHR, SAR реализован не как оператор, а как встроенная функция. Она имеет разные имена для разных целочисленных типов (SarInt64/SarLongint/SarSmallint) чтобы избежать проблем при присваивании результата функции в выражении. А чё, слабо было просто сделать так, чтобы shr учитывал знаковость типа? Этот косяк ещё с ботланда тянется, пора бы и убрать. -------------------- |
![]() ![]() |
![]() |
Текстовая версия | 6.09.2024 13:59 |