Прежде чем я начну, я хотел бы указать, что я честно и искренне искал многократно и исчерпывающе через Google для такого, и не смог найти его.
Мне нужен (для проекта, который я разрабатываю) список всех Delphi (2007 до самой последней выпущенной версии, я больше не поддерживаю версию старше 2007 года), "Языковые функции" и версии, в которых они были введенные и (если применимо) устарели, улучшены или удалены.
Я уже отмечал подобные вопросы в отношении, хотя большинство из них были сформулированы в форме "какая функция лучше" и закрыты, если они считаются непригодными.
Если кто-нибудь знает о таком списке (или у него достаточно свободного времени для его компиляции), я был бы очень благодарен.
Принятый ответ будет содержать ссылку на такой список или сам список.
Обратите внимание, что в этом ответе перечислены только новые функции языка
Вот ссылки на Docwiki RAD Studio:
Полный список от Embarcadero: What New
См. Также: Список Дэвида I
Обобщить:
Delphi 10.3 (кодовое название Carnival) (подлежит подтверждению)
@
разрешено только при жестком литии массива.[weak]
, [unsafe]
и [volatile]
поддерживаются всеми компиляторами.Новые встроенные процедуры компилятора (недокументированные):
function IsManagedType(T: TypeIdentifier): Boolean; function HasWeakRef(T: TypeIdentifier): Boolean; function GetTypeKind(T: TypeIdentifier): TTypeKind; function IsConstValue(Value): boolean;
В XE4 вводятся/включены следующие новые условные обозначения:
AUTOREFCOUNT
CPUARM
EXTERNAL_LINKER
IOS
СЛЕДУЮЩЕЕ ПОКОЛЕНИЕ
UNDERSCOREIMPORTNAME
WEAKREF
WEAKINSTREF
WEAKINTREF
dependency
для указания зависимостей внешней библиотеки (недокументированная до XE8).$IF
могли быть прекращены только с помощью $IFEND
, а $IFDEF
, $IFNDEF
, $IFOPT
могли быть прекращены только с помощью $ENDIF
.В XE4 это изменилось так, что $ ENDIF стал принятым терминатором для $ IF, $ IFDEF, $ IFNDEF и $ IFOPT.
AtomicExchange()
, AtomicIncrement()
, AtomicCmpExchange()
, AtomicDecrement()
Packed
Now Force Byte Alignment Records (Pre XE2 он не обязательно это сделал)Добавлены восемь новых DEFINE:
ALIGN_STACK
CPUX86
CPUX64
MACOS (операционная система Mac)
MACOS32
PC_MAPPED_EXCEPTIONS
PIC
Win64
uses
.{$ExcessPrecision on/off}
директива компилятора (только для x64){$STRINGCHECKS}
компилятора {$STRINGCHECKS}
игнорируется в XE;{$ALIGN}
: допустимые значения для директивы {$ALIGN}
теперь включают 1, 2, 4, 8 и 16.{$CODEALIGN}
, это устанавливает начальный адрес для процедуры или функции.{$STRONGLINKTYPES ON}
as
может использоваться для передачи ссылки на интерфейс обратно к объекту, из которого он был извлечен.is
может использоваться для проверки того, была ли ссылка на интерфейс извлечена из определенного класса.TObject(SomeInterface)
.delayed
указывает, что внешняя библиотека, такая как DLL, не должна загружаться во время объявления, а должна ждать, пока первый вызов методаstring
встроенного типа теперь сопоставляется с UnicodeString
;{$HighCharUnicode on|off}
директива компилятораfunction Default(T): T
внутренняя функция function Default(T): T
(недокументированная){$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
как Widestrings;TObject
имеет дополнительный скрытый указатель на TMonitor
в дополнение к его указателю VMT;deprecated
теперь может иметь дополнительный текстstatic
методы и свойства;strict
личное/защищенное ключевое слово видимости;final
для виртуальных методов;{$METHODINFO}
;for... in
петлях,inline
{$REGION}
/{$ENDREGION}
директивы{$WARN UNSAFE_CODE ON}
TFormatSettings
.[TCustomVariantType][68]
обеспечивает перегрузку оператора для пользовательских типов вариантов{$IFDEF MSWINDOWS}
{$IFDEF LINUX}
{$LIBPREFIX}
{$LIBSUFFIX}
{$LIBVERSION}
{$MESSAGE 'message'}
{$SetPEFlags}
{$IF}{$ELSE}
experimental
, deprecated
, library
, platform
(но без дополнительного текста для устаревших)OLEVariant
{$J+}
)varargs
(но только для cdecl
вызове cdecl
)Нет новых функций языка, но:
LongWord
и Int64
; Cardinal
является UINT32 (до того, как он был беззнаковым 31-битным значением)Real
занимает 8 байтов и совпадает с double
(ранее это было 6 байтов); {$REALCOMPATIBILITY ON}
;REAL48
заменяет старый 6-байтовый real
;resourcestrings
{$EXTERNALSYM}
и {$NODEFINE}
implements
ключевое слово для свойствfalse
как -1
вместо 1 (Boolean не изменяется)packages
.out
параметров.Widestring
interface
и словом dispinterface
а также поддержкой COM (dispid
).Ansistring
заменяет shortstring
в качестве строкового типа по умолчаниюCurrency
Variant
(для взаимодействия с автоматизацией OLE).ThreadVar
.packed
ключевое слово переопределяет это поведение;1899/12/30
под D1, начатое в 0000/00/00
finalization
register
и stdcall
вызове stdcall
.packed
ключевое слово.Только для дополнения ответа Johan эту запись в моем блоге List of changes between versions of Delphi (Since Delphi 5)
и отличную страницу The TIndex
, в которой перечислены большинство новых функций с delphi 2005 и ресурсы по каждому из них.
Файл jedi.inc, используемый проектом Dephi JEDI, предоставляет ряд функций. Если ваш проект совместим с MPL, вы можете даже использовать его для обнаружения функций и избавить себя от необходимости изобретать это конкретное колесо.
Например, он определяет SUPPORTS_FOR_IN
, если компилятор поддерживает перечисления. Можно было бы перевести ваш код перечислителя в проверку IFDEF
для этого определения, а не для проверки конкретной версии компилятора.