Max*_*xpm 6 d compilation header-files
我的印象是"AD接口文件只包含模块导入的内容,而不是该模块的整个实现." 对我而言,这转换为签名 - 只返回类型,名称和参数,以便编译器知道它是有效的,并且链接器可以在以后执行脏工作.
dmd但是,通过运行文件几乎不会删除任何内容:
import std.stdio;
void SayHello(const string Name)
{
writeln("Hello, ", Name, "!");
}
Run Code Online (Sandbox Code Playgroud)
dmd Interface.d -o- -H
Run Code Online (Sandbox Code Playgroud)
// D import file generated from 'Interface.d'
import std.stdio;
void SayHello(const string Name)
{
writeln("Hello, ",Name,"!");
}
Run Code Online (Sandbox Code Playgroud)
几乎不是优化的典范.
确切地说,在接口文件中被删除了什么?
(添加了头文件,因为它是我能找到的最接近的东西.)
任何要内联的函数都必须在.di文件中有完整的源代码.任何将在CTFE中使用的函数不仅必须在.di文件中具有完整的源,而且它所使用的每个函数的完整源 - 直接或间接 - 必须可供编译器使用.此外,由于模板的工作方式,它们的完整源也必须位于.di文件中(这与模板在C++中的头文件中的方式相同).因此,在许多情况下,您需要将内容放在.di文件中.
在编译器选择是否删除内容的情况下,我不知道(除了模板自动完全以.di文件结尾的事实,因为他们必须这样做).它可能会根据编译器的当前实现以及它的优化程度而改变.但至少,如果要进行任何内联,它将不得不离开小功能机构.然而,大型功能体和小型虚拟功能体(无论如何都无法内联)可能会被剥离.但是你的例子给出了一个小的非虚函数,所以dmd可能会把它留在里面,以便它可以内联任何调用它.如果你想在生成.di文件时看到dmd剥离很多东西,那么你可能需要有大型函数和/或使用类.
| 归档时间: |
|
| 查看次数: |
286 次 |
| 最近记录: |