用 Tab 还是 Space?谷歌程序员分析了10亿份代码

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
查看查看55 回复回复1 收藏收藏 分享淘帖 转播转播 分享分享 微信
查看: 55|回复: 1
收起左侧

用 Tab 还是 Space?谷歌程序员分析了10亿份代码

[复制链接]
攻城狮 发表于 2016-11-4 10:28:24 | 显示全部楼层 |阅读模式
快来登录
获取优质的苹果资讯内容
收藏热门的iOS等技术干货
拷贝下载Swift Demo源代码
订阅梳理好了的知识点专辑
本帖最后由 攻城狮 于 2016-11-4 10:38 编辑

用 Tab 还是 Space?事关程序员的信仰之争。2015 年程序员 Uku Pattak 分析了 GitHub 上多种语言的热门项目(star 数量高)中使用 Tab 和空格的对比情况2016 年,谷歌程序员 Felipe Hoffa 分析了 10 亿份代码

分析结果可先看下图:

用 Tab 还是 Space?谷歌程序员分析了10亿份代码 1

用 Tab 还是 Space?谷歌程序员分析了10亿份代码 - 敏捷大拇指 - 用 Tab 还是 Space?谷歌程序员分析了10亿份代码 1





1、40万个repo, 10亿份代码文件, 14TB 代码



1.1、规则:

  • 数据来源:已存储在 BigQuery 上的 GIthub 文档
  • Star 很重要:只选择了2016年1月到5月之间加星量(star)在前 40 万个的项目
  • 排除小文件:代码文件至少得有 10 行代码,开始的字符是:空格或者制表符
  • 去除冗余:不管它们存在于多少个项目中,相同的程序文件只算一次
  • 一个文件一票:有些代码文件中混用了制表符和空格。如果该文件制表符用的多,那它就算制表符一票。反之亦然。
  • 只考虑使用广泛的编程语言:我只选取了有下面这些后缀的文件:(.java, .h, .js, .c, .php, .html, .cs, .json, .py, .cpp, .xml, .rb, .cc, .go)




1.2、数据

用 Tab 还是 Space?谷歌程序员分析了10亿份代码 2

用 Tab 还是 Space?谷歌程序员分析了10亿份代码 - 敏捷大拇指 - 用 Tab 还是 Space?谷歌程序员分析了10亿份代码 2




1.3、实现方法

我使用了已有的 [bigquery-public-data:github_repos.sample_files] 表。这个表列出了排名最前的 40 万个项目。从中提取了含有被广泛使用的语言后缀的文件。

[SQL] 纯文本查看 复制代码
SELECT a.id id, size, content, binary, copies, sample_repo_name , sample_path
FROM (
  SELECT id, FIRST(path) sample_path, FIRST(repo_name) sample_repo_name 
  FROM [bigquery-public-data:github_repos.sample_files] 
  WHERE REGEXP_EXTRACT(path, r'.([^.]*)$') IN ('java','h','js','c','php','html','cs','json','py','cpp','xml','rb','cc','go')
  GROUP BY id
) a
JOIN [bigquery-public-data:github_repos.contents] b
ON a.id=b.id


[Plain Text] 纯文本查看 复制代码
864.6s elapsed, 1.60 TB processed


由于我要联结分别有 1.97 亿行和 0.7 亿行的两个表(一共有 1.6T 数据量),这个过程花费了不少时间。我把结果放在这里了[fh-bigquery:github_extracts.contents_top_repos_top_langs],你们就不用重新跑这个过程了。

在 [contents] 表格中,包含了去冗余之后的所有文件。下面的命令行用来检查文件数量和大小。

[SQL] 纯文本查看 复制代码
SELECT SUM(copies) total_files, SUM(copies*size) total_size
FROM [fh-bigquery:github_extracts.contents_top_repos_top_langs]


用 Tab 还是 Space?谷歌程序员分析了10亿份代码 3

用 Tab 还是 Space?谷歌程序员分析了10亿份代码 - 敏捷大拇指 - 用 Tab 还是 Space?谷歌程序员分析了10亿份代码 3

10 亿文件,14TB代码

然后开始按照前面提到的规则排序:

[SQL] 纯文本查看 复制代码
SELECT ext, tabs, spaces, countext, LOG((spaces+1)/(tabs+1)) lratio
FROM (
  SELECT REGEXP_EXTRACT(sample_path, r'.([^.]*)$') ext, 
         SUM(best='tab') tabs, SUM(best='space') spaces, 
         COUNT(*) countext
  FROM (
    SELECT sample_path, sample_repo_name, IF(SUM(line=' ')>SUM(line='t'), 'space', 'tab') WITHIN RECORD best,
           COUNT(line) WITHIN RECORD c
    FROM (
      SELECT LEFT(SPLIT(content, 'n'), 1) line, sample_path, sample_repo_name 
      FROM [fh-bigquery:github_extracts.contents_top_repos_top_langs]
      HAVING REGEXP_MATCH(line, r'[ t]')
    )
    HAVING c>10 # at least 10 lines that start with space or tab
  )
  GROUP BY ext
)
ORDER BY countext DESC
LIMIT 100


[Plain Text] 纯文本查看 复制代码
16.0s elapsed, 133 GB processed


分析 133G 代码只有 16 秒?我爱 BigQuery。




2、最后 Felipe Hoffa 还贴上一个视频

在热播剧《硅谷》第三季中,不仅有 Tab 和 Space 之争,也有 Vim 和 Emacs……结果导致一对程序员做不成情侣了



视频亮点在结尾




大家还可以看看2015 年程序员 Uku Pattak 分析了 GitHub 上多种语言的热门项目(star 数量高)中使用 Tab 和空格的对比情况




转自:伯乐在线

都看到这里了,就把这篇资料推荐给您的好朋友吧,让他们也感受一下。

回帖是一种美德,也是对楼主发帖的尊重和支持。

*声明:敏捷大拇指是全球最大的Swift开发者社区、苹果粉丝家园、智能移动门户,所载内容仅限于传递更多最新信息,并不意味赞同其观点或证实其描述;内容仅供参考,并非绝对正确的建议。本站不对上述信息的真实性、合法性、完整性做出保证;转载请注明来源并加上本站链接,敏捷大拇指将保留所有法律权益。如有疑问或建议,邮件至marketing@swifthumb.com

*联系:微信公众平台:“swifthumb” / 腾讯微博:@swifthumb / 新浪微博:@swifthumb / 官方QQ一群:343549891(满) / 官方QQ二群:245285613 ,需要报上用户名才会被同意进群,请先注册敏捷大拇指

嗯,不错!期待更多好内容,支持一把:
支持敏捷大拇指,用支付宝支付10.24元 支持敏捷大拇指,用微信支付10.24元

评分

参与人数 1金钱 +10 收起 理由
Anewczs + 10 发帖就是光荣,分享精神可嘉!.

查看全部评分

女汉子 发表于 2016-11-7 10:41:13 | 显示全部楼层
行头用tab,其它用space
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

做任务,领红包。
我要发帖

分享扩散

都看到这里了,就把这资料推荐给您的好朋友吧,让他们也感受一下。
您的每一位朋友访问此永久链接后,您都将获得相应的金钱积分奖励
关闭

站长推荐 上一条 /3 下一条

热门推荐

合作伙伴

Swift小苹果

  • 北京治世天下科技有限公司
  • ©2014-2016 敏捷大拇指
  • 京ICP备14029482号
  • Powered by Discuz! X3.1 Licensed
  • swifthumb Wechat Code
  •   
快速回复 返回顶部 返回列表