【问题标题】:D arbitrary code at compile timeD 编译时的任意代码
【发布时间】:2014-04-18 14:31:55
【问题描述】:

我听说 D 可以在编译时执行任意用户代码。这是真的?有人可以举个例子(特别是当编译永远不会终止时)?这个功能是干什么用的?另外,如果是这样的话,有没有办法通过一些编译器选项来禁用它(编译器是 dmd)?

【问题讨论】:

  • 不是任意代码,编译时只能做纯函数

标签: d dmd ctfe


【解决方案1】:

是的,部分正确。 D 有compile time function execution,即它具有在编译时执行函数的能力。但是这些功能需要既便携无副作用

你会在official documentation of the D language找到深入的解释。

【讨论】:

  • 我还要补充一点,虽然您可以根据需要将编译器置于无限循环中,但它不能做任何比这更恶意的事情;它不能覆盖文件或在网络上发送垃圾邮件或类似的东西。在您自己的程序中,编译时执行是可选的,因此如果您不想使用它就可以不使用它,而在其他人的程序中,我只想说如果编译时间过长,只需按 ctrl+c强行阻止它。
  • @AdamD.Ruppe 它可能会使可执行文件因膨胀而变得不合理
  • @ratchetfreak 有时“臃肿”的程序比在运行时完成所有事情的超级紧凑的东西更有用,此外,它可以由(库)程序员控制,所以它是一个超级有用的工具
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-10
  • 1970-01-01
  • 2014-06-11
  • 2011-09-08
  • 1970-01-01
  • 1970-01-01
  • 2015-01-10
相关资源
最近更新 更多