我两个月之前的一篇博客《为什么我说Rust是靠谱的编程语言》(下面简称原文),在当中“6. 两个半大型成功案例”一节。我以前写道:

  • Servo: 下一代浏览器渲染引擎(类Webkit/Blink)。超过40万行Rust代码
  • rustc+std: Rust编译器和标准库。超过35万行Rust代码

提供了两大项目的源码行数,却没有明白提供数据来源。本文做补充说明。

Servo官方数据来源

这三个来源都具有非常高的权威性,来源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代码行数的数据来源的更多相关文章

  1. 【未解决】对于使用Windows的IDEA进行编译的文件,但无法在Linux系统中统计代码行数的疑问

    在我学习使用Windows的IDEA的过程中,将代码文件转移到Linux虚拟机当中,但无法在Linux系统中统计代码行数. 注意:拷贝进虚拟机的文件均能编译运行. 具体过程如下: root@yogil ...

  2. iOS - Xcode项目统计总代码行数

    最新公司需要把项目代码量统计一下,第一时间找到Xcode插件管理工具Alcatraz,查找插件ZLXCodeLine,这是一个快速统计Xcode工程项目代码量的插件,好像已经不支持Alcatraz安装 ...

  3. 使用vs的查找功能,简单大概的统计vs中的代码行数

    VS强大的查找功能,可以使用正则表达式来进行查找,这里统计代码行数的原理就是: 在所有指定文件中进行搜索,统计匹配的文本行数. 但是匹配的行需要满足:非注释.非空等特殊非代码行. 使用Ctrl+Shi ...

  4. 统计iOS项目的总代码行数的方法

    打开终端, 用cd命令 定位到工程所在的目录,然后调用以下命名即可把每个源代码文件行数及总数统计出来: find . "(" -name "*.m" -or - ...

  5. OC Swift中检查代码行数

    1 打开终端  cd 进去当前项目 2 总行数查看命令     find . -name "*.m" -or -name "*.h" | xargs wc -l ...

  6. vs 中统计代码行数

    ------解决方案--------------------b*[^:b#/]+.*$^b*[^:b#/]+.*$ ctrl + shift + F 查找选项勾选 正则表达式

  7. 在.NET中怎样取得代码行数

    文章目的 介绍在.NET中取得代码行数的方法 代码 [STAThread] static void Main(string[] args) { ReportError("Yay!" ...

  8. 使用 cloc 统计代码行数

    可能大家都知道用 `wc -l` 命令进行代码行数统计,但是它会将代码中的注释.空行所占用的文本行都统计在内.如果想查看一个 tar 包或一个项目目录中“实际”的代码行数并且不愿意自己去写一个脚本来做 ...

  9. Python计算一个项目中含有的代码行数

    最近想要知道以前做过的project有多少行代码,因为文件太多,直接手工数效率太低,于是编写一个python程序用来计算一个project有多少代码行. 首先,在一个项目中,有很多子文件夹,子文件夹中 ...

随机推荐

  1. Java数据结构(排序篇)

    冒泡排序:是经过n-1趟子排序完毕的,第i趟子排序从第1个数至第n-i个数,若第i个数比后一个数大(则升序,小则降序)则交换两数.大泡在上,小泡在下. 选择排序:每一趟从待排序的数据元素中选出最小(或 ...

  2. jQuery的CSS操作

    .css()--获取匹配元素集合中的第一个元素的样式属性的值设置每一个匹配元素的一个或多个CSS属性. .hasClass()--确定不论什么一个匹配元素是否有被分配给定的(样式)类: .addCla ...

  3. Boost.Asio c++ 网络编程翻译(16)

    TCP异步服务端 核心功能和同步服务端的功能类似,例如以下: class talk_to_client : public boost::enable_shared_from_this<talk_ ...

  4. oracle rac下调节redo log file 文件大小

    rac下调节redo log file 文件大小 (1)查看当前日志信息: select * from v$logfile; (步骤2中得路径能够在这里MEMBER列看到,redo文件名称自己命名.比 ...

  5. Fatal error: Incompatible file format: The encoded file has format major ID 1...解决方式

    申请好域名和空间后.将站点源代码上传到空间,解析好域名后.在地址栏输入域名出现以下错误: Fatal error: Incompatible file format: The encoded file ...

  6. poj2947Widget Factory

    对于同余方程的高斯消元啊. 其实也差不多吧.先同一位通分,然后减一下就好了. 主要是判无解和多解的麻烦,需要注意即使有自由元也可能先无解 #include<cstdio> #include ...

  7. 0x02 枚举、模拟、递推

    1.TYVJ1266(这站是不是已经倒闭了啊) USACO陈年老题,对于这种开关问题啊,最多只按一次,而且第一行随便按完下面的就全确定了,类似的还有固定翻转一个长度的区间,这个也是最多翻一次的而且翻的 ...

  8. 【POJ 1733】 Parity Game

    [题目链接] http://poj.org/problem?id=1 [算法] 并查集 [代码] #include <algorithm> #include <bitset> ...

  9. 没有被广泛采用的box-sizing属性

    在标准盒模型下设置的width和height只是内容的宽和高,但在设置了宽和高的情况下若还要设置border.margin.padding等时,会发生溢出的现象,因此需要将盒模型更改. box-siz ...

  10. Windows下慎用内核隔离

    1. 开启内核隔离后只能通过注册表关闭   2. 开启内核隔离后, 默认会启动hybrid-v, 这个东西和虚拟机是冲突的, 这样就用不了虚拟机了.   3. 解决方法: 关闭内核隔离后, 再关闭已经 ...