Delphi 语言特性及其引入/弃用版本列表

4si2a6ki  于 2022-11-04  发布在  其他
关注(0)|答案(3)|浏览(147)

在我开始之前,我想指出的是,我已经诚实和真诚地通过谷歌反复和详尽地搜索了这样的东西,但未能找到一个。
我需要(为我正在开发的项目)所有 Delphi (2007年到最新发布的版本,我不再支持任何版本早于2007年)“语言功能”的列表,以及它们被引入和(在适用的情况下)弃用、改进或删除的版本。
我以前在Stack Overflow上注意到过类似的问题,尽管大多数问题都是以“哪个特性最好”的形式表达的,并被认为是不合适的。
如果有人知道这样一个名单(或有足够的业余时间编制一个),我将非常感激。
被接受的答案将包含到这样的列表的链接,或者列表本身。

7qhs6swi

7qhs6swi1#

请注意,此答案仅列出新的 * 语言 * 功能
不是新的VCL/FMX功能。

以下是RAD Studio docwiki的链接:

Embarcadero的完整列表:What's New显示器
另请参阅:David I's list
另请参阅:Delphi Master Release List wiki
总结一下:


  • 二进制常值和数字分隔符号
  • 支持AVX指令的内联汇编器(AVX-512)
  • 新记录助手:TDateTimeHelperTCurrencyHelper
  • macOS ARM 64位目标平台

我的天啊!

  • 所有平台上的统一内存管理-已删除完整的ARC编译器,所有编译器现在都对对象使用手动(经典)内存管理
  • Custom managed records显示器
  • 支持macOS 64位
  • 支持Android 64位

  • The 64-bit Linux compiler no longer uses ARC,它使用默认的手动托管,这与Windows编译器中的相同。这使得代码从Windows或OSX移植到Linux更加容易。
  • 具有自动类型推断的Inline variables
  • 在Linux上启用了8位AnsiChar/AnsiString支持。
  • C++Builder和 Delphi 现在对所有调用使用相同的ABI。



  • 支持Android 5.1.1和iOS 8.4
  • 改进的OSX异常处理

  • 支持64位iOS;
  • 新的整数类型:FixedIntFixedUInt所有平台上的32位整数类型;
  • 新的与平台相关的整数类型:LongIntLongWord(iOS-64上为64位,所有其他平台上为32位);

function IsManagedType(T: TypeIdentifier): Boolean; function HasWeakRef(T: TypeIdentifier): Boolean; function GetTypeKind(T: TypeIdentifier): TTypeKind; function IsConstValue(Value): boolean;



  • Android支持;

需要配备ArmV 6+氖或ArmV7的器械进行展开
推出conditional define ANDROID


  • 在XE 4中引入/启用了以下新条件:

自动引用计数
CPU ARM
外部链接器
内部监督系统
新一代
下划线输入名称
弱参考
弱应力
弱参考

  • 重新引入了对iOS的支持。
  • 新的dependency指令,用于指定外部库的依赖项(XE 8之前未记录)。
  • ARC support(包括TObject.DisposeOf)。

Note that much of the groundwork for ARC was already in XE3, but much of it was disabled

在XE 4中,这一点发生了变化,$ENDIF成为$IF、$IFDEF、$IFNDEF和$IFOPT的可接受终止符。


AtomicExchange()AtomicIncrement()AtomicCmpExchange()AtomicDecrement()等系列产品

  • 引入[ref]属性。

我的天啊

对齐堆叠
CPU X86处理器
CPU X64
MACOS(Mac操作系统)
MACOS 32型
PC_Map_异常
PIC公司
WIN 64操作系统


  • {$STRINGCHECKS}编译器指令在XE中被忽略;
  • {$ALIGN}指令的新16字节值:{$ALIGN}指令的可接受值现在包括1、2、4、8和16。
  • new {$CODEALIGN}指令,它设置过程或函数的起始地址。
  • {$STRONGLINKTYPES ON}指示词
  • 支持正则表达式。

  • 增强的 Delphi RTTI(运行时类型信息)。
  • Attributes显示器
  • as运算子可用来将界面指涉转换回撷取它的来源对象。
  • is运算符可用于验证接口引用是否是从某个类中提取的。
  • 可以在接口上执行正常的不安全强制转换:TObject(SomeInterface) .
  • 新的delayed指令指示外部库(如DLL)不在声明时加载,而是等到第一次调用该方法时才加载
  • 类构造函数/析构函数

我的天啊


  • 据我所知没有语言变化;
  • 请注意, Delphi 2007是一个非中断版本,D2006中的DCU在D2007中将保持不变 *;
    • (2007年的.NET“个性”)*


  • 三个额外的编译器警告:
  • 不安全类型,
  • 不安全代码,以及
  • Unsafe_Cast。* 默认情况下禁用这些警告,但可以启用 *
  • new compiler directive {$WARN UNSAFE_CODE ON}显示器
  • 使用TFormatSettings结构格式化和分析数字、日期时间值和货币的例程重载。

  • [TCustomVariantType][68]提供了operator overloading for custom variant types
  • 新的编译器指令:
  • {$IFDEF MSWINDOWS}
  • {$IFDEF LINUX}
  • x1米55英寸1x
  • {$LIBSUFFIX}
  • {$LIBVERSION}
  • {$MESSAGE 'message'}
  • {$SetPEFlags}
  • 支持{$IF}{$ELSE}编译器指令
  • 编译器提示指示词:experimentaldeprecatedlibraryplatform(但不包含不建议使用的附加文本)
  • 变量不再基于COM,但更改为与CLX兼容,基于COM的变量重命名为OLEVariant
  • Typed constants cannot be assigned to (Override with {$J+} )
  • 枚举类型可以被赋值为显式值(cf C++);
  • 接口属性
  • 支持调用varargs外部函数(但仅适用于cdecl调用约定)
  • 自定义变量

没有新的语言功能,但是:

  • Support added for Frames显示器
    第一个电子邮件地址
  • Dynamic arrays存储器
  • LongWordInt64; Cardinal是UINT 32 (在它是无符号31位值之前)
  • Real占用8个字节,并且与double相同(以前它是6个字节);
  • 用新的{$REALCOMPATIBILITY ON}编译器指令重写;
  • REAL48替换旧的6字节real;
  • 支持resourcestrings
  • Method overloading显示器
  • Default parameters显示器
  • 指令
  • implements keyword用于属性
    第106页第1x页
  • Wordbool、longbool和bytebool将true存储为-1而不是1(布尔值不变)
  • 必须使用packages安装组件。
  • Assert。
  • out参数的值。
  • Widestring
  • interfacedispinterface关键字以及COM(dispid)支持。

  • 支持32位;
  • Ansistring取代shortstring成为预设字串类型
  • Currency
  • Variant(用于与OLE自动化互操作)。
  • 线程支持和ThreadVar关键字。
  • 4字节数据是4字节对齐的,新的packed关键字会覆盖此行为;
  • TDateTime开始于1899/12/30 * 在D1下,它开始于0000/00/00 *
  • 新的finalization关键字
  • 添加了registerstdcall调用约定。
  • packed关键字。
sxissh06

sxissh062#

只是为了补充Johan的答案,请在我的博客List of changes between versions of Delphi (Since Delphi 5)和优秀的页面The TIndex上查看这个条目,其中列出了自 Delphi 以来的大多数新特性和关于每个特性的资源。

ylamdve6

ylamdve63#

Dephi JEDI项目使用的jedi.inc文件公开了一系列的特性定义,如果您的项目是与MPLS兼容的,您甚至可以使用它来进行特性检测,这样就保存了重新发明这个特定轮子的麻烦。
例如,如果编译器支持枚举数,它就定义了SUPPORTS_FOR_IN。可以将枚举数代码 Package 在IFDEF中,检查该定义,而不是检查特定的编译器版本。

相关问题