【问题标题】:Is there a list of all compiler intrinsic function for Delphi by version?是否有按版本列出的 Delphi 的所有编译器内在函数列表?
【发布时间】:2015-04-22 03:19:47
【问题描述】:

正如在其他 SO 问题中所回答的那样,现代 Delphi 终于支持编译器内在函数,如 AtomicIncrement

是否有某个地方列出了在哪个版本的 Delphi 中引入了哪个内部函数,以便我可以使用 {$if CompilerVersion ...} 来保持代码向后兼容(使用内联 asm)并为未来的编译器提供更清洁的功能?

【问题讨论】:

  • 您可以将 {$IFDEF NEXTGEN} 用于 AtomicIncrement、AtomicCmpExchange、AtomicExchange 和 AtomicDecrement。
  • @LURD 然后你会拒绝自己在桌面平台上使用它们的能力,这将是一种耻辱
  • @DavidHeffernan,我知道。我只是参考文档:In a multi-platform application, atomic intrinsics can be used inside {$IFDEF} for either the AUTOREFCOUNT or NEXTGEN conditional.Use Atomic Instrinsics Instead of Assembly Language
  • @LURD 我可以看到该文档。这很古怪。内在原子函数是桌面平台上的最佳选择。
  • 每个版本在系统中的"{需要编译魔法的过程和函数}"部分都有一个列表。

标签: delphi intrinsics


【解决方案1】:

嗯,你可以使用文档,但我不能保证它的准确性。

事实上,这个内在函数列表是不完整的。它没有您感兴趣的功能。真可惜。如果您有兴趣知道添加了这些特定功能的版本,那么您肯定可以解决这个问题。如果你想有一个涵盖每一个功能的官方列表,那么它似乎不存在。我想您将不得不在没有它的情况下生活,或者创建列表。

回到文档,你可以考虑这个列表:

看看最后两个。 XE3 链接有信息,XE2 链接为空。这表明该功能是在 XE3 中添加的。快速测试证实了这一点。

鉴于官方文档缺乏可靠性,您准备好信任它了吗?

所以,我的建议是你自己测试一下。这样做的好处是您可以确定自己的代码是正确的。

【讨论】:

  • 而这种不完整正是我试图查看是否有人试图创建这样一个列表的原因。显然,这是我们可以从当前的 Embarcadero 文档中获得的最佳效果。注意:对于 Atomics,我将使用 XE3,它似乎可以工作。
  • 如果有人创建了这样一个列表,你会相信它吗?我知道我不会!
  • 文档完全缺少 XE7 引入的新内在函数,如 GetTypeKindIsManagedHasWeakRef 及其效果。
  • @Stefan 我不知道他们在 Emba 的想法。我的经验是,编写文档有时会暴露设计缺陷。发布然后记录只会让你跌倒。
  • @MaximMasiutin 这个问题不需要为更新的版本更新。它涉及在 XE2/XE3 时间框架中添加的功能。问题中的链接就足够了,有人可能会争论已经过多了。
猜你喜欢
  • 2021-09-08
  • 1970-01-01
  • 2022-08-07
  • 1970-01-01
  • 2017-01-18
  • 2021-03-27
  • 2012-01-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多