原文
支持源码包文件
这是个编译器功能,而不是D语言功能.
与给链接器提供目标文件库方式类似,给编译器添加源码包文件支持.包(及其所有子文件)都可成为源码包文件.
然后,把源码包文件提供给编译器,而不是包含大量文件的目录.即,如,可按一个(std.sar)文件分发所有的标准库.
sar扩展名代表"源码包(source archive)".如果std.sar在提供给编译器的导入路径列表中的路径中,则编译器将首选std.sar,而不是在std目录树中查找子模块.
甚至不必有std目录..sar文件的文件格式与目标文件库和各种其他方案的文件格式类似.因为它们因平台而异,不遵循其他方案.
sar文件不需要特殊考虑.它旨在对映射内存文件访问友好,且不存在对齐问题.
.sar文件由以下节组成:
1.按幻数和版本来标识.sar文件的头.
 2.内容表,每个源文件一项.由文件名串的偏移/长度和文件内容的偏移/长度组成项.
 3.文件名串,每个串都有个终止0.
 4.文件内容,每个文件附加四个0字节,如词法分析器的哨兵.
 5.格式中的整数是小头.
要创建一个.sar文件,如Phobos的std文件:
dmd sar=/home/duser/dmd/src/phobos/std
会创建文件:
/home/duser/dmd/src/phobos/std.sar
并用扩展名为".di",".d",".c"或".i"之一的所有子文件填充.
对标准库,std.sar的大小约为11兆字节.
要使用std.sar文件,无需在用户的构建系统中更改.
DMD自动优先使用它找到的.sar文件.在开发源文件时禁止它是必要的,选择以下选项之一,来禁止.sar文件:
 1.删除.sar文件.
 2.用sar=off编译器开关.sar=on打开它,且是默认设置.
在像helloworld此简单程序试用它.sar在编译速度上的差异可忽略不计.一个更大程序也不太可能在性能上显示出特定趋势.
在DMD实现中,很方便创建一个独立的归档程序.
 还可简单添加它到命令行,来使用.sar文件:
dmd foo.sar
如果foo.sar包含文件a.d,b.d和c.d,则该命令等价于:
dmd a.d b.d c.d
即.sar文件只是绑定"一堆源文件"到单个文件中的方法.
理由
1.可按单个文件表示项目或库中的所有源文件,来方便处理.
 2.要使用DMD一次编译所有源文件,命令行可能会非常长,且肯定很笨拙.使用.sar文件,你甚至可以不需要makefile或构建器,只需:
dmd project.sar
3.在Phobos(及大多数代码)中,因为多个文件的不便,喜欢把许多仅略微相关函数集中到一个文件中.
如,在std.algorithm中,单个算法可放进多个文件中,因为它们不相互引用.这也可帮助那些不想在单个模块中自动获得"友"声明状态的人.
 .sar文件可使更精细的模块更具吸引力.
4.项目中的目录可以是任意的.但是项目中的多个.sar文件表明这就是代码位置.不同名字的.sar文件,可在同一目录中表示项目的多个版本.
5.使用(helloworld)小程序的实验显示编译速度的变化可忽略不计.
对.sar文件,因为较少的文件操作,更大程序可能会显著提高编译速度.
 对速度较慢的文件系统(如SD卡或网络文件系统),加速可能会很大.
 据我所知,其他编译器没有这样.即便如此,.sar文件仍会有一些令人惊讶的用法.