我已经注意到 Stack Overflow 上类似的问题,但大多数都是以“哪个功能最好”为形式提出的,并被认为不适合并被关闭。
如果有人知道这样一个列表(或者有足够的空闲时间汇编一个),我将非常感激。
接受的答案将包含指向这样一个列表的链接,或者列表本身。
总结:
@
运算符将动态数组分配给指针。[weak]
, [unsafe]
和[volatile]
属性在所有编译器上都得到支持。function IsManagedType(T: TypeIdentifier): Boolean; function HasWeakRef(T: TypeIdentifier): Boolean; function GetTypeKind(T: TypeIdentifier): TTypeKind; function IsConstValue(Value): boolean;
dependency
directive,用于指定外部库的依赖关系(直到XE8才有文档记录)。$IF
语句只能以$IFEND
结束,而$IFDEF
、$IFNDEF
、$IFOPT
指令只能以$ENDIF
结束。AtomicExchange()
, AtomicIncrement()
, AtomicCmpExchange()
, AtomicDecrement()
Mac OSX(32位)和iOS的跨平台支持;
支持Win64;
修改RTL以实现跨平台支持;
现在“Packed”强制记录的字节对齐 (在XE2之前,不一定会这样做)
增加了八个新的DEFINE:
ALIGN_STACK
CPUX86
CPUX64
MACOS(Mac操作系统)
MACOS32
PC_MAPPED_EXCEPTIONS
PIC
WIN64
内置类型因目标平台(32/64位)而异:
{$STRINGCHECKS}
编译指令在XE中被忽略;{$ALIGN}
指令的新16字节值:
{$ALIGN}
指令的可接受值现在包括1、2、4、8和16。{$CODEALIGN}
指令,用于设置过程或函数的起始地址。{$STRONGLINKTYPES ON}
指令as
运算符可用于将接口引用转换回其原始对象。is
运算符可用于验证接口引用是否来自特定类。TObject(SomeInterface)
。delayed
指令表示外部库(如 DLL)在声明时不会被加载,而是等待第一次调用该方法。string
现在映射到UnicodeString
;{$HighCharUnicode on|off}
function Default(T): T
内在函数(未记录){$PointerMath on|off}
;W1057 从'%s'隐式转换为'%s'
,W1058 从'%s'进行可能有数据丢失的隐式字符串转换为'%s'
,W1059 从'%s'显式转换为'%s'
,W1060 从'%s'进行可能有数据丢失的显式字符串转换为'%s'
;Exit
函数可以接受一个参数来指定结果;resourcestrings
作为WideString;TObject
除了其VMT指针之外,还有一个额外的隐藏指针指向TMonitor
;deprecated
关键字现在可以带有附加文本。static
方法和属性;strict
私有/受保护可见性关键字;final
关键字用于虚方法;{$METHODINFO}
指令;inline
关键字{$REGION}
/{$ENDREGION}
指令{$WARN UNSAFE_CODE ON}
TFormatSettings
结构格式化和解析数字、日期时间值和货币的例程的重载。{$IFDEF MSWINDOWS}
{$IFDEF LINUX}
{$LIBPREFIX}
{$LIBSUFFIX}
{$LIBVERSION}
SO链接
{$SetPEFlags}
{$IF}{$ELSE}
编译器指示experimental
,deprecated
,library
,platform
(但不包含用于已弃用的附加文本)OLEVariant
{$J+}
进行覆盖)varargs
外部函数(仅适用于cdecl
调用约定)没有新的语言特性,但是:
LongWord
和Int64
;Cardinal
是一个UINT32 (之前是无符号的31位值)Real
占用8个字节,与double
相同(以前是6个字节);
{$REALCOMPATIBILITY ON}
编译器指令进行覆盖;REAL48
替换了旧的6字节real
;resourcestrings
{$EXTERNALSYM}
和{$NODEFINE}
指令implements
关键字true
存储为-1
而不是1(Boolean不变)packages
安装组件。out
参数。Widestring
interface
和dispinterface
关键字以及COM(dispid
)支持。$LIBPREFIX
等指令至少从D7开始就有了(我怀疑是D6,因为它们与Kylix相关)。 - Free Consulting仅为补充Johan的答案,请查看我博客上的Delphi版本之间更改列表(自Delphi 5以来)
和优秀页面TIndex
,其中列出了自Delphi 2005以来的大多数新功能以及有关每个功能的资源。
SUPPORTS_FOR_IN
。可以将您的枚举器代码包装在一个IFDEF
中,检查该定义而不是检查特定的编译器版本。jedi.inc
至少是准确的,而Johan的列表需要一些验证。 - Free Consulting