我两个月之前的一篇博客《为什么我说Rust是靠谱的编程语言》(下面简称原文),在当中“6. 两个半大型成功案例”一节。我以前写道:
- Servo: 下一代浏览器渲染引擎(类Webkit/Blink)。超过40万行Rust代码
- rustc+std: Rust编译器和标准库。超过35万行Rust代码
提供了两大项目的源码行数,却没有明白提供数据来源。本文做补充说明。
Servo官方数据来源
- 来源1“Experience Report: Developing the Servo Web Browser Engine using Rust”说有41万行(410K) [2015年5月26日]
- 来源2“Servo Continues Pushing Forward”说有12万行(126K) [2015年5月1日]
- 来源3“Servo developer tools overview”说有15万行(150k) [2015年7月22日]
这三个来源都具有非常高的权威性,来源1的主要作者包含了Rust项目负责人Brian Anderson和Servo项目负责人Lars Bergstrom,来源2出自Servo项目的合作方三星Samsung OSG官方博客,来源3是Servo项目的官方博客。
数据都非常新,均是2015年5月或之后数据。三种说法有冲突,可能是统计分类标准不同所导致的。
原文最初版本号採纳了来源1。如今我(Liigo)更倾向于採纳来源3。
综合三种来源,我推測觉得,Servo项目自身——不包含其依赖库——的源码行数大概是15万行,Rust编译器和标准库和Servo依赖的Rust库总共加起来有大约36万行(相应原文所述”超过35万行”)。这样算起来rustc+std也必定远少于36万行。但数据来源似乎没有专门统计这一块。此外也没有专门统计Servo的依赖库(不包含std)代码行数——来源1提到有大概20个Rust库——我觉得这类代码是能够算进Servo项目里面的,那么Servo的代码行数将远超15万。
总之,原文提供的有关两个大型项目源码行数的统计数字可能有反复和错误之处,但在有明白的准确数字出现之前暂不更正。特此说明。Liigo, 2015年7月28日。
Liigo自行统计的数据
考虑到前文所述来源统计中可能有冲突、反复、遗漏之处,我自己又敲代码(loc-rs)统计了一遍,结果是:Rust编译器和标准库代码共约30万行,Servo代码约25万行。详情參见下面表格。
+-------------------+---------------+
| rustc | 180K lines |
+-------------------+---------------|
| rustc | 59K |
| syntax | 38K |
| rustc_trans | 37K |
| rustc_typeck | 26K |
| rustc_resolve | 7K |
| rustc_borrowck | 5K |
| ... | ... |
+-------------------+---------------+
+-------------------+---------------+
| std | 120K lines |
+-------------------+---------------|
| std | 55K |
| core | 26K |
| collections | 19K |
| rustc_unicode | 7K |
| libc | 6K |
| alloc | 4K |
| rand | 3K |
| ... | ... |
+-------------------+---------------+
+-------------------+---------------+
| servro | 250K lines |
+-------------------+---------------|
| servo | 155K |
| serde | 15K |
| regex | 15K |
| rust-mozjs | 14K |
| ipc-channel | 14K |
| hyper | 12K |
| html5ever | 9K |
| ... | ... |
+-------------------+---------------+
作者已依据此处统计的结果对原文相关数据进行了修正。2015年7月30日。Liigo。