引入/不推荐使用的Delphi语言功能和版本列表


113

在开始之前,我想指出的是,我已经通过Google进行了一次诚实而真诚的搜索,涉及范围很广,无法找到它。

我需要(对于我正在开发的项目)所有Delphi(从2007年到最新发布的版本,我不再支持任何早于2007年的版本)“语言功能”的列表,以及引入这些功能的版本和( (如果适用)不推荐使用,改进或删除。

我之前在Stack Overflow上已经注意到了与此类似的问题,尽管大多数问题都是以“哪个功能最好”的形式表述的,并被认为不合适。

如果有人知道这样的列表(或有足够的空闲时间来编写一个列表),我将不胜感激。

接受的答案将包含指向此类列表的链接,或者包含列表本身。


问:那为什么您确实需要这样的清单?问:你们是不是要建立一个代码集(可能是一个组件或库)支持BDS2007和XE2之间的所有平台(即采用超过BDS2007功能更新版本)?问:如果是这样,为什么不尝试在2007年编译,看看有什么坏处?(PS:我仍然很开心地使用BDS2006;)。
paulsm4 2011年

8
Simon检查此问题德尔福语言,RTL,VCL中的新增功能的分类列表?,同样在我的博客上,我维护了Delphi版本之间
RRUZ 2011年

3
@ paulsm4 1)因此,我可以考虑公共库中各个版本的功能限制,2)是(但不一定是组件库),3)因为与预先在库的各个方面进行不同版本的测试相比,预先知道要容易得多。从理论上讲D2006可以正常工作,但我不会积极支持它(没有冒犯)。
LaKraven 2011年

Answers:


158

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

以下是RAD Studio docwiki的链接:

Embarcadero的完整列表:新功能
另请参见:David I的列表


总结一下:

Delphi 10.3.x,10.4(尚未发布,这是推测性的)

德尔福10.3

  • 64位Linux编译器不再使用ARC,而是使用默认的人工托管(与Windows编译器相同)。这使得将代码从Windows或OSX移植到Linux变得更加容易。
  • 具有自动类型推断的内联变量
  • 在Linux上启用8位AnsiChar / AnsiString支持。
  • C ++ Builder和Delphi现在对所有调用使用相同的ABI。

德尔福10.2东京

德尔福10.1柏林

西雅图德尔福10号酒店

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

德尔福XE8

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

德尔福XE7

德尔福XE6

德尔福XE5

德尔福XE4

在XE4,这发生了变化,因此$ ENDIF成为了$ IF,$ IFDEF,$ IFNDEF和$ IFOPT的可接受终止符。

德尔福XE3

德尔福XE2

德尔福XE

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

德尔福2010

  • 增强的Delphi RTTI(运行时类型信息)。
  • 属性
  • as操作者可用于铸造的接口返回参照从它被提取的对象。
  • is操作员可以被用来验证一个接口引用是否从某一类萃取。
  • 可以在以下接口上执行正常的不安全铸造:TObject(SomeInterface)
  • new delayed指令指示在声明时不要加载诸如DLL之类的外部库,而要等到第一次调用该方法时
  • 类构造器/析构器

德尔福2009

德尔福2007

  • 我所不知道的语言变化;
    请注意,Delphi 2007是一个不间断的发行版,D2006中的DCU将在D2007中保持不变
  • (2007年的.NET'personality ' 引入了泛型

德尔福2006

德尔福2005

  • for ... in 循环
  • inline 关键词
  • 允许在使用语句中使用通配符
  • 嵌套类型
  • 嵌套常数
  • {$REGION}/ {$ENDREGION}指令

德尔福7

  • 三个附加的编译器警告:
    • Unsafe_Type,
    • Unsafe_Code,以及
    • Unsafe_Cast。这些警告默认情况下处于禁用状态,但可以启用
  • 新的编译器指令 {$WARN UNSAFE_CODE ON}
  • 使用TFormatSettings结构格式化和解析数字,日期时间值和货币的例程的重载。

德尔福6

德尔福5

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

德尔福4

  • 动态数组
  • LongWordInt64; Cardinal是UINT32 (在它是无符号的31位值之前)
  • Real占用8个字节,并且与double(以前是6个字节)相同;
    • 用新的{$REALCOMPATIBILITY ON}编译器指令覆盖;
    • REAL48替换旧的6字节real
  • 支持 resourcestrings
  • 方法重载
  • 默认参数
  • {$EXTERNALSYM}{$NODEFINE}指令
  • implements属性 关键字

德尔福3

  • Wordbool,longbool和bytebool存储true-1而不是1(布尔值不变)
  • 必须使用安装组件packages
  • 断言。
  • out 参数。
  • Widestring
  • interfacedispinterface关键字以及COM(dispid)支持。

德尔福2

  • 支持32位;
  • Ansistring替换shortstring为默认字符串类型
  • Currency
  • Variant (用于与OLE自动化互操作)。
  • 线程支持和ThreadVar关键字。
  • 4字节数据是4字节对齐的new packed关键字将覆盖此行为;
  • TDateTime从1899/12/30 D1以下开始0000/00/00
  • finalization关键字
  • registerstdcall添加了调用约定。
  • packed 关键词。

太好了!我找不到让Docwiki向我显示特定于较早版本的Delphi(XE2之前版本)的页面的方法……不知道为什么!这太好了,并被标记为正确答案!谢谢!
LaKraven 2011年

@DavidHeffernan这是在2007年提供了新的有用的,因为该套基准......从某种意义上说,我就知道肯定是否有什么我生产的部分可能也许在早期版本(即使我自己有工作无意支持它)
LaKraven 2011年

9
在我的博客上,我维护了Delphi版本之间
RRUZ 2011年

3
天哪,这真是太棒了!升级时,他们为什么不给您这个清单!
彼得·特纳

1
这是不准确的。$LIBPREFIX等指令至少从D7开始存在(我怀疑是D6,因为它们与Kylix有关)
Free Consulting


7

Dephi JEDI项目使用的jedi.inc文件公开了一系列功能定义。如果您的项目兼容MPL,则您甚至可以将其用于功能检测,从而省去了重新发明特定轮子的麻烦。

例如,它定义SUPPORTS_FOR_IN编译器是否支持枚举器。可以将您的枚举器代码包装在IFDEF检查该定义中,而不是检查特定的编译器版本。


是的,这当然可以帮助您,但是它缺少详细列表的完整性(因此有此问题)。感谢您的建议...认为该问题的被接受的答案是对jedi.inc提供的信息的增强:)
LaKraven 2011年

1
@LaKraven:的确,有很多东西是没有的,但对于某些东西来说就足够了。它还具有已经完成的优点。:-)就个人而言,我认为平整VCL层次结构,剥离版权标头并将它们全部扔到版本控制存储库中也很方便。这样,您可以看到何时实施了特定的RTL / VCL功能。
afrazier 2011年

@LaKraven,我相信jedi.inc至少是准确的,而Johan的名单需要一些验证。
免费咨询
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.