关于Servo项目中Rust代码行数的数据来源
我两个月之前的一篇博客《为什么我说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。
关于Servo项目中Rust代码行数的数据来源的更多相关文章
- 【未解决】对于使用Windows的IDEA进行编译的文件,但无法在Linux系统中统计代码行数的疑问
在我学习使用Windows的IDEA的过程中,将代码文件转移到Linux虚拟机当中,但无法在Linux系统中统计代码行数. 注意:拷贝进虚拟机的文件均能编译运行. 具体过程如下: root@yogil ...
- iOS - Xcode项目统计总代码行数
最新公司需要把项目代码量统计一下,第一时间找到Xcode插件管理工具Alcatraz,查找插件ZLXCodeLine,这是一个快速统计Xcode工程项目代码量的插件,好像已经不支持Alcatraz安装 ...
- 使用vs的查找功能,简单大概的统计vs中的代码行数
VS强大的查找功能,可以使用正则表达式来进行查找,这里统计代码行数的原理就是: 在所有指定文件中进行搜索,统计匹配的文本行数. 但是匹配的行需要满足:非注释.非空等特殊非代码行. 使用Ctrl+Shi ...
- 统计iOS项目的总代码行数的方法
打开终端, 用cd命令 定位到工程所在的目录,然后调用以下命名即可把每个源代码文件行数及总数统计出来: find . "(" -name "*.m" -or - ...
- OC Swift中检查代码行数
1 打开终端 cd 进去当前项目 2 总行数查看命令 find . -name "*.m" -or -name "*.h" | xargs wc -l ...
- vs 中统计代码行数
------解决方案--------------------b*[^:b#/]+.*$^b*[^:b#/]+.*$ ctrl + shift + F 查找选项勾选 正则表达式
- 在.NET中怎样取得代码行数
文章目的 介绍在.NET中取得代码行数的方法 代码 [STAThread] static void Main(string[] args) { ReportError("Yay!" ...
- 使用 cloc 统计代码行数
可能大家都知道用 `wc -l` 命令进行代码行数统计,但是它会将代码中的注释.空行所占用的文本行都统计在内.如果想查看一个 tar 包或一个项目目录中“实际”的代码行数并且不愿意自己去写一个脚本来做 ...
- Python计算一个项目中含有的代码行数
最近想要知道以前做过的project有多少行代码,因为文件太多,直接手工数效率太低,于是编写一个python程序用来计算一个project有多少代码行. 首先,在一个项目中,有很多子文件夹,子文件夹中 ...
随机推荐
- chmod和chown命令具体使用方法
Linux下数字表示文件的操作权限(777,755,..) Linux下.查看某路径下用(ls -l)查看全部文件的具体属性列表时.会看到文件的操作权限.类似"drwxr-xr-x" ...
- shell文本过滤编程(十一):paste命令
[版权声明:转载请保留出处:blog.csdn.net/gentleliu. Mail:shallnew at 163 dot com] 从字面上能够看出.paste命令和cut命令功能相反,cut命 ...
- 2016.03.02,英语,《Vocabulary Builder》Unit 03
ambi/amphi: 指on both sides或者around的意思,ambi-来自拉丁语,amphi-来自希腊语.ambidextrous:[ˌæmbi'dekstrəs] adj. 两手俱利 ...
- 0x07 贪心
被虐爆了...贪心这种玄学东西还可以证吗??除了范围缩放算是可以想想比较经典(倍增第一题?)... poj3614:这道题想了很久,并没有想到是把minSPF按大到小排序,一直的思想是小的就小到大排序 ...
- TP为什么这个if判断什么都不显示?
既不显示aaa也不显示bbb这是为什么? <if condition="isset(session('name'))"> aaa <else /> bbb ...
- Data type-数据类型
操作方式.含义.存储方式. In computer science and computer programming, a data type or simply type is a classifi ...
- 数据库过滤操作中 != 或者 <> 指定操作数并不能改匹配到NULL值
数据库过滤操作中 != 或者 <> 指定操作数并不能改匹配到NULL值
- 路飞学城Python-Day25
- 利用cookie判断文件下载完成
在网页下载文件时,该文件又是通过后台代码生成的,比如报表之类的.当需要生成文件过大时会耗费很多时间,而文件生成好传到页面的时候也没有事件可以监听它,像微软官网,谷歌,百度等下载方式都是通过提示五秒过后 ...
- 关于read函数的一些分析
ssize_t readn(int fd, std::string &inBuffer, bool &zero) { ssize_t nread = ; ssize_t readSum ...