即将发布的Delphi 10.4运行时库增强功能

Delphi Runtime Library是该产品的基础之一,因为UI库(例如VCL和FireMonkey)以及数据库访问库和许多第三方组件都在核心RTL上进行回复。这就是为什么对RTL进行更改特别相关,因为它们往往会影响所有开发人员。以下是一些即将推出的重要更改。

位计数标准功能

我们为常见的低级位处理操作引入了新的标准功能,如下所示。

  • 计算前导零:计算参数X的最高有效一位之前的前导零位的数量。如果X为零,则返回位宽。即CountLeadingZeros32为32,CountLeadingZeros64为64
  • 计算尾随零:计算参数X的最低有效一位之后的尾随零位数。如果X为零,则返回位宽。例如,CountTrailingZeros32为32,CountTrailingZeros64为64。
  • 计数填充:计算参数X的1的个数。返回值的范围是0到位宽度。即CountPopulation32为32,CountPopulation64为64

经典课程的其他功能

  • TCustomIniFile类具有以下两种方法:WriteInt64和ReadInt64
  • TGUID类型具有新的IsEmpty方法
  • 现在,TJSONArray类的Items属性是默认的数组属性,允许您编写myJArray [2]而不是myJArray.Items [2]

更好的流缓冲

TStream基类的CopyFrom函数曾经具有用于复制数据的固定常量缓冲区(设置为60K)。这对于复制大型流可能非常低效。新的默认值为1MB,但是该方法还有一个附加参数,您可以根据所执行的复制操作(源流和目标流)使用该参数提供特定的缓冲区大小。该方法的新签名是

//类TStream
函数CopyFrom(const来源:TStream;计数:Int64 = 0;
  BufferSize:Integer = $ 100000):Int64;

性能优化

  • JSON读取优化:TJSONReader现在快了50%
  • 优化将已排序的StringList分配给另一个StringList
  • RTTI性能改进包括:
    • TRttiMethod.Invoke快约4倍
    • TVirtualInterface调用快约1.7倍
    • TRttiType.GetXxxx(AName)方法快约10倍
    • 对于TValue,几个操作更快
  • System.Classes中的QuickSort操作现在更加高效

FreeAndNil

我们更新了FreeAndNil过程的签名,以避免将其与接口引用和其他不受支持的数据类型一起使用。现在声明需要引用一个TObject:

过程FreeAndNil(const [ref]对象:TObject); 排队;

这意味着FreeAndNil的错误使用现在将导致编译器错误。在过去,不会发现错误的用法,从而导致难以解决的错误。请注意,尽管将参数声明为const,但确实修改了by-reference变量。

其他分类功能

  • 我们已删除了一些阻止某些控制台应用程序在Windows Server Core上运行的依赖项
  • TStringHelper.GetHashCode方法已更新为在对字符串进行哈希处理之前不将其大写,因此其结果与其他内部操作(如TStringComparer类)匹配。

这只是部分预期。我们还在并行编程库,AppTethering,REST和HTTP客户端库以及其他Delphi RTL子系统中做了大量工作。希望这些改进(即使相对较小)也将因其在Delphi开发人员每天的工作中所产生的积极影响而受到赞赏。

这是即将发行的RAD Studio的预览。始终可能存在最新的错误或更改。在正式发布该版本之前,此处没有任何内容是最终的。报名参加下周的10.4发布网络研讨会。 

使用RAD Studio,Delphi或C ++ Builder减少开发时间并更快地推向市场。设计。码。编译。部署。