原文
支持源码包文件
这是个编译器
功能,而不是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
文件仍会有一些
令人惊讶的用法.