Ответ 1
Обратите внимание, что в этом ответе перечислены только новые языковые функции
не новые функции VCL/FMX.
Вот ссылки на документацию RAD Studio:
- Что нового в Rad Studio 10.3 Rio
- Что нового в Delphi и C++ Builder 10.2 Токио
- Что нового в Delphi и C++ Builder 10.1 Berlin
- Что нового в Delphi и C++ Builder 10 Сиэтл
- Что нового в Delphi и C++ Builder XE8
- Что нового в Delphi и C++ Builder XE7
- Что нового в Delphi и C++ Builder XE6
- Что нового в Delphi и C++ Builder XE5
- Что нового в Delphi и C++ Builder XE4
- Что нового в Delphi и C++ Builder XE3
- Что нового в Delphi и C++ Builder XE2
- Что нового в Delphi и C++ Builder XE
- Что нового в Delphi и C++ Builder 2010
- Что нового в Delphi и C++ Builder 2009
- Что нового в RAD Studio (Delphi для Win32 2007)
- Что нового в RAD Studio (C++ Builder 2007)
- Что нового в Delphi 2006
- Что нового в Delphi 2005
- Что нового в Delphi 7
- Что нового в Delphi 6
- Что нового в Delphi 5
- Что нового в Delphi 4
- Что нового в Delphi 3
- Что нового в Delphi 2
- Delphi 1 Особенности
Полный список от Embarcadero: что нового
Смотрите также: список Давида I
Подвести итоги:
Delphi 10.3.x, 10.4 (еще не вышло, это умозрительно)
- Пользовательские управляемые записи
- Обнуляемые типы
- Поддержка MacOS 64-bit
- Поддержка Android 64-bit
- 64-битный компилятор Linux больше не использует ARC, вместо этого он использует управляемую по умолчанию инструкцию, которая аналогична компилятору Windows. Это значительно упрощает перенос кода из Windows или OSX в Linux.
- Встроенные переменные с автоматическим выводом типа
- Поддержка 8 бит AnsiChar/AnsiString включена в Linux.
- C++ Builder и Delphi теперь используют один и тот же ABI для всех вызовов.
- Поддержка серверных приложений Linux (Intel 64-bit с использованием LLVM и ARC).
- Присвоение динамических массивов указателю с помощью оператора
@
допускается только при жестком приведении массива к нулю. - Более гибкое разрешение пространства имен для имен единиц
- Встроенная поддержка типов Utf8String и RawByteString на всех платформах
- Атрибуты
[weak]
,[unsafe]
и[volatile]
поддерживаются всеми компиляторами. - Размер расширенного в OSX теперь составляет 16 байтов.
- помощники класса и записи не могут получить доступ к закрытым членам классов или записей, которые они расширяют.
- Поддержка Android до 6.01.
- Поддержка Android 5.1.1 и iOS 8.4
- Улучшена обработка исключений OSX
- Поддержка 64-битной iOS;
- Новые целочисленные типы: FixedInt, FixedUInt 32-битные целочисленные типы на всех платформах;
- Новые зависящие от платформы целочисленные типы: LongInt, LongWord (64-разрядная на iOS-64, 32-разрядная на всех других платформах);
- Строковые операции, поддерживаемые в динамических массивах
- Параллельная библиотека добавлена в RTL
-
Новые встроенные процедуры компилятора (недокументированные):
function IsManagedType(T: TypeIdentifier): Boolean; function HasWeakRef(T: TypeIdentifier): Boolean; function GetTypeKind(T: TypeIdentifier): TTypeKind; function IsConstValue(Value): boolean;
- Поддержка Android;
требуется устройство с ArmV6 + Neon или ArmV7 для развертывания
вводит условное определение ANDROID - Перегрузка операторов для классов (но только для компилятора NextGen {Android/iOS})
-
В XE4 введены/включены следующие новые условия:
AUTOREFCOUNT
CPUARM
EXTERNAL_LINKER
IOS
СЛЕДУЮЩЕЕ ПОКОЛЕНИЕ
UNDERSCOREIMPORTNAME
WEAKREF
WEAKINSTREF
WEAKINTREF- Восстановлена поддержка iOS.
- Новая директива
dependency
для указания зависимостей внешней библиотеки (недокументированная до XE8). - Поддержка ARC в компиляторах NextGen (включая TObject.DisposeOf).
Обратите внимание, что большая часть основы для ARC уже была в XE3, но большая часть была отключена - До выпуска XE4 операторы
$IF
могли завершаться только с помощью$IFEND
, а$IFDEF
,$IFNDEF
,$IFOPT
могли заканчиваться только с помощью$ENDIF
.
На XE4 это изменилось так, что $ ENDIF стал принятым терминатором для $ IF, $ IFDEF, $ IFNDEF и $ IFOPT.
- Запись помощников для встроенных типов
- Удалена поддержка iOS.
- Атомные внутренние функции:
AtomicExchange()
,AtomicIncrement()
,AtomicCmpExchange()
,AtomicDecrement()
- Введение атрибута [ref].
- Кроссплатформенная поддержка Mac OSX (32-битная) и iOS;
- Поддержка Win64;
- Модифицированный RTL для поддержки кроссплатформенности;
-
Packed
Now принудительно выравнивает байты записей (до XE2 это не обязательно делалось) -
Восемь новых DEFINE были добавлены:
ALIGN_STACK
CPUX86
CPUX64
MACOS (операционная система Mac)
MACOS32
PC_MAPPED_EXCEPTIONS
PIC
Win64 - Полные имена областей применения теперь требуются в предложении
uses
. - Директива компилятора
{$ExcessPrecision on/off}
(только для x64) - Типы встроенных файлов различаются в зависимости от целевой платформы (32/64-разрядная версия).
- Расширенный тип данных составляет 10 байтов на Win32, но 8 (!) Байтов на Win64
-
{$STRINGCHECKS}
компилятора{$STRINGCHECKS}
игнорируется в XE; - Новое 16-байтовое значение для директивы
{$ALIGN}
: допустимые значения для директивы{$ALIGN}
теперь включают 1, 2, 4, 8 и 16. - Директива new
{$CODEALIGN}
устанавливает начальный адрес для процедуры или функции. - Директива
{$STRONGLINKTYPES ON}
- Поддержка регулярных выражений.
- Улучшенный Delphi RTTI (информация о типе времени выполнения).
- Атрибуты
- Оператор
as
можно использовать для приведения ссылки интерфейса к объекту, из которого он был извлечен. - Оператор
is
можно использовать для проверки того, была ли ссылка на интерфейс извлечена из определенного класса. - Обычное небезопасное приведение может быть выполнено на интерфейсе:
TObject(SomeInterface)
. - новая
delayed
директива указывает, что внешняя библиотека, такая как DLL, не должна загружаться во время объявления, но должна ждать до первого вызова метода - Класс Конструктор/Деструктор
- Внутренняя
string
типа теперь отображается вUnicodeString
; - Директива компилятора
{$HighCharUnicode on|off}
- Дженерики;
-
function Default(T): T
встроенная функцияfunction Default(T): T
(недокументированная) - Умные указатели;
- Анонимные методы;
- Поддержка вложенных исключений и отслеживание исключений;
- поддержка pointermath и новой директивы компилятора:
{$PointerMath on|off}
; - Четыре новых предупреждения компилятора:
-
W1057 Implicit string cast from '%s' to '%s'
, -
W1058 Implicit string cast with potential data loss from '%s' to '%s'
, -
W1059 Explicit string cast from '%s' to '%s'
, -
W1060 Explicit string cast with potential data loss from '%s' to '%s'
;
-
- Функция
Exit
может принимать параметр, указывающий результат; -
resourcestrings
строки как широкие строки; -
TObject
имеет дополнительный скрытый указатель наTMonitor
в дополнение к его указателю VMT; - У
deprecated
ключевого слова теперь может быть дополнительный текст
- Никаких языковых изменений, о которых я знаю;
Обратите внимание, что Delphi 2007 - это стабильный выпуск, DCU от D2006 будет работать без изменений в D2007; - ("Индивидуальность".NET 2007 года представила дженерики)
- Улучшенные записи;
- перегрузка оператора;
-
static
методы и свойства; - помощники класса;
- FastMM - менеджер памяти по умолчанию;
-
strict
конфиденциальное ключевое слово; -
final
ключевое слово для виртуальных методов; - Директива
{$METHODINFO}
;
-
for... in
петлях, -
inline
ключевое слово - Подстановочный знак в выражении использования разрешен
- вложенные типы
- вложенные константы
- Директивы
{$REGION}
/{$ENDREGION}
- три дополнительных предупреждения компилятора:
- Unsafe_Type,
- Unsafe_Code и
- Unsafe_Cast. Эти предупреждения отключены по умолчанию, но могут быть включены
- новая директива компилятора
{$WARN UNSAFE_CODE ON}
- Перегрузки процедур, которые форматируют и анализируют числа, значения даты и времени и валюту, используя структуру
TFormatSettings
.
-
[TCustomVariantType][68]
обеспечивает перегрузку операторов для пользовательских типов вариантов. - Новые директивы компилятора:
-
{$IFDEF MSWINDOWS}
-
{$IFDEF LINUX}
-
{$LIBPREFIX}
-
{$LIBSUFFIX}
-
{$LIBVERSION}
-
{$MESSAGE 'message'}
-
{$SetPEFlags}
-
- Поддержка директив компилятора
{$IF}{$ELSE}
- Директивы подсказок компилятора:
experimental
,deprecated
,library
,platform
(но без дополнительного текста для устаревших) - Вариант больше не основан на COM, но изменен на CLX-совместимый, вариант на основе COM переименован в
OLEVariant
- Типизированные константы не могут быть назначены (Переопределить с помощью
{$J+}
) - Перечислимым типам может быть назначено явное значение (см. C++);
- Свойства интерфейса
- Поддержка вызова внешних функций
varargs
(но только дляcdecl
вызовахcdecl
) - пользовательские варианты
Нет новых языковых функций, но:
- Динамические массивы
-
LongWord
иInt64
;Cardinal
- это UINT32 (до этого было 31-битное значение без знака) -
Real
занимает 8 байтов и такой же, какdouble
(ранее это было 6 байтов);- Переопределить с помощью новой директивы компилятора
{$REALCOMPATIBILITY ON}
; -
REAL48
заменяет старый 6-байтовыйreal
;
- Переопределить с помощью новой директивы компилятора
- Поддержка
resourcestrings
- Перегрузка метода
- Параметры по умолчанию
- Директивы
{$EXTERNALSYM}
и{$NODEFINE}
-
implements
ключевое слово для свойств
- Wordbool, longbool и bytebool сохраняют
true
как-1
вместо 1 (логическое значение не изменяется) - Компоненты должны быть установлены с использованием
packages
. - Утверждениях.
-
out
параметры. -
Widestring
- ключевое слово
interface
иdispinterface
и поддержка COM (dispid
).
- Поддержка 32-битных;
-
Ansistring
заменяетshortstring
в качестве строкового типа по умолчанию -
Currency
-
Variant
(для взаимодействия с OLE-автоматизацией). - Поддержка
ThreadVar
ключевое словоThreadVar
. - 4-байтовые данные - это 4-байтовое выровненное новое
packed
ключевое слово, перекрывающее это поведение; - TDateTime начинается в
1899/12/30
под D1, он начинается в0000/00/00
- новое ключевое слово
finalization
- добавлены соглашения о
register
иregister
вызововstdcall
. -
packed
ключевое слово