您的位置:首页 > 编程语言

从20亿行代码中瞬间定位到你要查找的代码,糖果云是如何做到的?

2017-10-28 10:42 344 查看
有篇新闻报道了谷歌公司拥有20亿行代码(相当于40个Windows系统的代码,Windows有5000万行代码),几万名谷歌工程师同时在维护及更新这20亿行代码,创造了互联网上的一个又一个奇迹。

据一位在微软及谷歌都供职过的工程师介绍,20 亿行代码虽然多,但对 Google 这个量级的公司来说不算什么了不起的事情,但Google 在这方面真正值得称道的,是Google 能够把这20亿行代码放在同一个库里面,让所有的工程师在同一个源码库上工作!这真是太方便了!任何人可以随意阅读几乎所有的代码来学习,重用别人的实现也变得极为简单。而在他去Google之前,在 Microsoft 工作时,每个组有每个组自己的库。在 windows server 组工作,就看不到 office 的代码,反之亦然。组和组之间如果存在共享代码的需求,需要复杂的协调工作,有些组还安排了专人来负责。本来查看几行代码仅需几秒钟的事情,要拖延到几天。

从这个介绍来看,当时Microsoft 的开发环境比 Google 落后整整一代。由此带来的结果就是工程师在 Google 能够看到更多被广泛采用的高质量共享库,更多的提高开发效率消除重复劳动的工具,从而带来了更高的开发效率,以及工程师能够更快地成长,最终的结果就是谷歌的业务超出了微软:Chrome打败了IE, 安卓打败了Windows Mobile。

为什么重用代码对软件开发如此重要?我把程序员刚写出来经过编译的代码叫做生代码,而经过千百次运行证明准确无误的代码叫做熟代码,生代码要想变成熟代码,付出的时间成本以及人的脑力成本,超过写出生代码的10倍也不止!生代码写出来后要调试,功能基本无误之后还有各种测试,甚至产品上线数月之后还有bug,所以在软件开发中,应该尽量使用熟代码,以减少无谓的bug。

开源软件的蓬勃发展,促进了软件技术的进步,因为开源软件源代码是公开的,任何人都能使用及修改。全球最大的开源项目聚集地Github,当前拥有开源项目800多万个,有如此多的开源项目,搜索引擎里也能搜到成吨的代码,然而实际情况是:大部分开发人员还在重写生代码,因为找到可重用的代码代价也很大,在搜索引擎里找代码,垃圾太多,在开源项目里找代码,也很费时间,Github的代码搜索功能有限,Github采用的是开源的ElasticSearch搜索引擎,搜索项目没有问题,但搜索代码基本不能用。

如何能像谷歌的员工一样可以随意检索20亿行源代码,让自己的技术得以更快的成长呢?

这就是我们创立糖果云网站的初衷:一个有20亿行源代码的网站(未来会更多),能让你瞬间定位到任意代码的网站,糖果云网站的首页是这样的:



糖果云首页

糖果云有三大特点:

1 第一个特点是快,糖果云是你见过的最快的搜索引擎,比百度谷歌更快,糖果云搜索快到什么程度?大部分搜索响应都低于1毫秒,糖果云是世界上第一款真正的毫秒级搜索引擎。

因为响应足够快,糖果云在你每输入一个字符时都返回当前输入的搜索结果,很多时候,关键词尚未输入完毕,答案即已呈现。有人说百度似乎也有这个功能,百度的这个功能叫热词提示,例如你输入一个迪,提示迪丽热巴,但热词总量也就几十万个,总文本量不过几M,而糖果云的代码库,例如Chrome源码库,Android-7.1(安卓内核7.1版)总文本量都在几个G以上,糖果云依然可以做到毫秒响应,快如闪电。

2 第二个特点是糖果云有专为代码搜索而定制的搜索引擎,代码搜索的需求与普通关键词搜索不一样,代码搜索需要准确定位:

例如代码中包含cookie这个词,普通关键词搜索引擎可以搜索到cookie,例如共有5000处,你如果还想更精细的定位,你可以搜索如下词汇:

cookie( cookie+小括号,你要找的cookie是个函数

cookie[ cookie+中括号,你要找的cookie是个数组

cookie, cookie+逗号,你要找的cookie是个函数参数

cookie; cookie+分号,你要找的cookie是个变量

cookie 空格+cookie,你要找的cookie前面有空格

cookie 制表符+cookie,你要找的cookie前面有制表符

.cookie 句点+cookie,你要找的cookie是个类成员

->cookie 指针符号+cookie,你要找的cookie前面有指针

以上的这些搜索,在普通关键词搜索引擎中,支持程度有限或根本不能搜索,糖果云完全支持,理论上糖果云支持任意字符序列的搜索。

在百度中搜索“.SetCookie(”(加双引号以便更准确定位,否则更不是我们所需要的结果),百度返回的结果如下(与程序员所期望的结果相去甚远):



baidu搜索代码

在Github中搜索.SetCookie(,然而Github只能返回SetCookie的结果(用“.SetCookie(”搜索结果相同),如下图所示:



Github搜索

在糖果云中同样搜索.SetCookie(,糖果云返回的结果是真正包含.SetCookie(的代码,如下图所示:



糖果云搜索

3 第三个特点是糖果云对所有代码进行了很好的分类,首先是一个项目的代码形成一个库,然后所有的库按应用领域和编程语言进行分类,如下图所示:



糖果云库

谷歌公司的20亿行代码虽然在一个代码库,相信它依然是可以按项目,按语言,按功能分别搜索的,否则搜索C++代码结果出现java代码是很让人扫兴的。

谷歌的代码库只有谷歌员工能使用,糖果云的代码库全所有开发人员均能使用,用户还可以上传并分享自己的代码,我们希望将糖果云建设成为所有开发人员的知识宝库。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息