googlec编程风格
① Google 在开发中主要使用的编程语言有哪些
这可太多了,google对技术非常开放,使用了很多常用的开放式编程语言。C++、java、python是它的搜索引擎的主要编程语言。现在Go语言是google新产品的主要编程语言,很多在线服务都是Go语言编写的。针对它旗下的Android操作系统和相关产品采用的是C结合linux系统以及Java语言。
② 为什么谷歌要执行严格的代码编写规范
我们在谷歌所做事情中另外一个让我感到异常有效、有用的制度是严格的编码规范。在到Google工作之前,我一直认为编码规范没有什么用处。我坚信这些规范都是官僚制度下产生的浪费大家的编程时间、影响人们开发效率的东西。我是大错特错了。在谷歌,我可以查看任何的代码,进入所有谷歌的代码库,我有权查看它们。事实上,这种权限是很少人能拥有的。但是,让我感到惊讶的却是,如此多的编码规范—缩进,命名,文件结构,注释风格—这一切让我出乎意料的轻松的阅读任意一段代码,并轻易的看懂它们。这让我震惊—因为我以为这些规范是微不足道的东西。它们不可能有这么大的作用—但它们却起到了这么大的作用。当你发现只通过看程序的基本语法结构就能读懂一段代码,这种时间上的节省不能不让人震撼!反对编码规范的人很多,下面是一些常见的理由,对于这些理由,我以前是深信不疑。这是浪费时间!我是一个优秀的程序员,我不愿意浪费时间干这些愚蠢的事。我的技术很好,我可以写出清晰的、易于理解的代码。为什么我要浪费时间遵守这些愚蠢的规范?答案是:统一是有价值的。就像我前面说的—你看到的任何的一行代码—不论是由你写的,还是由你身边的同事,还是由一个跟你相差11个时区的距离人写的—它们都有统一的结构,相同的命名规范—这带来的效果是巨大的。你只需要花这么少的功夫就能看懂一个你不熟悉(或完全未见过)的程序,因为你一见它们就会觉得面熟。我是个艺术家!这种话很滑稽,但它反映了一种常见的抱怨。我们程序员对于自己的编码风格通常怀有很高的自负。我写出的的代码的确能反映出我的一些特质,它是我思考的一种体现。它是我的技能和创造力的印证。如果你强迫我遵守什么愚蠢的规范,这是在打压我的创造力。可问题是,你的风格里的重要的部分,它对你的思想和创造力的体现,并不是藏身于这些微不足道的句法形式里。(如果是的话,那么,你是一个相当糟糕的程序员。)规范事实上可以让人们可以更容易的看出你的创造力—因为他们看明白了你的作品,人们对你的认识不会因不熟悉的编码形式而受到干扰。所有人都能穿的鞋不会合任何人的脚!如果你使用的编码规范并不是为你的项目专门设计的,它对你的项目也许并不是最佳方案。这没事。同样,这只是语法:非最优并不表示是不好。对你的项目来说它不是最理想的,但并不能表明它不值得遵守。不错,对于你的项目,你并没有从中获得该有的好处,但对于一个大型公司来说,它带来的好处是巨大的。除此之外,专门针对某个项目制定编码规范一般效果会更好。一个项目拥有自己的编码风格无可厚非。但是,根据我的经验,在一个大型公司里,你最好有一个统一的编码规范,特定项目可以扩展自己特定的项目方言和结构。我善长制定编码规范!这应该是最常见的抱怨类型了。它是其它几种反对声音的混合体,但它却有自身态度的直接表现。有一部分反对者深信,他们是比制定编码规范的人更好的程序员,俯身屈从这些小学生制定的规范,将会降低代码的质量。对于此,客气点说,就是胡扯。纯属傲慢自大,荒唐可笑。事实上他们的意思就是,没有人配得上给他们制定规范,对他们的代码的任何改动都是一种破坏。如果参照任何一种合理的编码规范,你都不能写出合格的代码,那只能说你是个烂程序员。当你按照某种编码规范进行编程时,必然会有某些地方让你摇头不爽。肯定会在某些地方你的编码风格会优于这些规范。但是,这不重要。在某些地方,编码规范也有优于你的编程风格的时候。但是,这也不重要。只要这规范不是完全的不可理喻,在程序的可理解性上得到的好处会大大的补偿你的损失。但是,如果编码规范真的是完全不可理喻呢?如果是这样,那就麻烦了:你被糟蹋了。但这并不是因为这荒谬的编码规范。这是因为你在跟一群蠢货一起工作。想通过把编码规范制定的足够荒谬来阻止一个优秀的程序员写出优秀的代码,这需要努力。这需要一个执着的、冷静的、进了水的大脑。如果这群蠢货能强行颁布不可用的编码规范,那他们就能干出其它很多傻事情。如果你为这群蠢货干活,你的确被糟蹋了—不论你干什么、有没有规范。(我并不是说罕有公司被一群蠢货管理;事实很不幸,我们这个世界从来就不缺蠢货,而且很多蠢货都拥有自己的公司。
③ 如何成为Google软件工程师
招聘的流程?在线申请简历筛选电话访谈现场面试Offer发放面试包括哪些内容?简短介绍介绍你的专长或进行技术评估提出你的问题面试没有益智类问题(因为益智问题并不能反映你的编程能力)如何对申请人的工程技能进行评估?我们会根据以下四个方面来进行评估:编程语言的语法,关键库函数,编程风格,对程序性能的考虑等算法和数据结构分析能力合理设计如何准备面试?复习基础知识复习算法与数据结构练习写代码 在白板上或在纸上练习不要使用伪代码你可以选择你最擅长的编程语言认识Google员工?
和他聊聊他在Google的经历。让他成为你的推荐人,或者让招聘者知道谁可以成为你的推荐人。在实际面试过程中:我们希望了解你解决问题的能力我们会向你提出一个有深度的问题,我们想了解你对复杂问题的解决方法不一定要得到正确答案,你的思考过程比正确答案更加重要我是在校生,离毕业还有两三年的时间,应该怎么努力?打好专业基础学习编程语言:C、C++、Java、Perl、Python参加课堂之外的活动参加计算机俱乐部或社团参加编程竞赛争取尽可能多的实习生机会参与开源项目(不要忘记参加Google编程之夏-Google Summer of Code)博士生的面试会有所不同么?我们会根据每个人的情况安排有针对性的面试面试内容包括标准算法,设计,编码能力论文讨论所有的面试官都具有博士学位Google软件工程师如是说: 问:在Google工作,最担心的一点是什么? 答:公司的零食太多了,在Google工作要防止长胖 问:在Google工作,最轻松的事情是什么? 答:坐在桌子上跟老板说话 问:在Google上班,着装有什么要求? 答:穿总比不穿好。 问:Google工程师几点上班? 答:Google工程师的工作比较自由,没有固定考勤,允许Work from home。但由于需要和其他办公室的同事交流,有可能一大清早就爬起来开会,或者一直工作到深夜。 问:在Google工作,最让你欣喜的事情是什么? 答:在Google工作,有机会与许多大牛共事,一起交流技术。 问:出差的机会多吗? 答:取决于项目安排,可能需要去美国东西海岸、伦敦、苏黎世、悉尼、东京等地出差 问:怎么才能获得上万台计算机来做大规模并行计算实验? 答:到Google工作,你随时可以做到。 问:在Google可以做开源软件吗? 答:可以,很多着名的开源软件程序员加入了Google,包括Google中国也有很多着名的开源软件程序员 问:你们的梦想是什么? 答:我们的梦想是:技术改变世界,do good things that matter in the worldGoogle 非软件工程师如是说: 问:听说在 Google 吃的很好,如果胖了怎么办? 答:公司有健身房,瑜伽房,吃多了下去跑两圈。 问:Google 员工有保险么? 答:有,很好的员工保险,还包括员工家属呢。 问:Google员工有带薪假期么? 答:员工在入职的第一年有15天的带薪假期。在Google工作每多一年,带薪假期就多一天。所以,如果你在Google 工作满235年,就可以全年休假啦! 问: Google对于非技术性职位的要求是什么? 答:用户至上,无论是对终端客户还是内部用户,都将是最重要的标准之一。 问:面试Google非技术性职位有什么技巧? 答:陈述事实,善用数据,如果你经验足够丰富!你懂的。:) 问:Google的销售工作压力大吗? 答:我们欢迎敢于接受挑战的人加入销售团队,按摩椅,健身房,瑜伽室是你最好的减压伙伴。
④ 为什么google编程风格指南设置缩进为2个空格
使代码易于管理的方法之一是增强代码一致性,让别人可以读懂你的代码是很重要的,保持统一编程风格意味着可以轻松根据“模式匹配”规则推断各种符号的含义。创建通用的、必需的习惯用语和模式可以使代码更加容易理解,在某些情况下改变一些编程风格可能会是好的选择,但我们还是应该遵循一致性原则,尽量不这样去做。
本指南的另一个观点是C++特性的臃肿。C++是一门包含大量高级特性的巨型语言,某些情况下,我们会限制甚至禁止使用某些特性使代码简化,避免可能导致的各种问题,指南中列举了这类特性,并解释说为什么这些特性是被限制使用的。
由Google开发的开源项目将遵照本指南约定。
注意:本指南并非C++教程,我们假定读者已经对C++非常熟悉。
⑤ 谷歌浏览器是用什么语言开发的
使用的C++语言
C++是在C语言的基础上开发的一种通用编程语言,应用广泛。C++支持多种编程范式 --面向对象编程、泛型编程和过程化编程。最新正式标准C++14于2014年8月18日公布。 其编程领域众广,常用于系统开发,引擎开发等应用领域,是至今为止最受广大程序员受用的最强大编程语言之一,支持类:类、封装、重载等特性!
⑥ google c++关于头文件包含顺序的观点解决了哪些问题
《Google C++ 编程风格指南》中说明头文件的包含顺序是这样的:
Names and Order of Includes
link ▽Use standard order for readability and to avoid hidden dependencies:C library, C++ library, other libraries' .h, your project's .h.
All of a project's header files should belisted as descendants of the project's source directory without use of UNIXdirectory shortcuts . (the current directory) or .. (the parent directory). Forexample, google-awesome-project/src/base/logging.h should be included as
#include "base/logging.h"
In dir/foo.cc or dir/foo_test.cc, whosemain purpose is to implement or test the stuff in dir2/foo2.h, order yourincludes as follows:
dir2/foo2.h (preferred location — seedetails below).
C system files.
C++ system files.
Other libraries' .h files.
Your project's .h files.
The preferred ordering reces hiddendependencies. We want every header file to be compilable on its own. Theeasiest way to achieve this is to make sure that every one of them is the first.h file #included in some .cc.
dir/foo.cc and dir2/foo2.h are often in thesame directory (e.g. base/basictypes_test.cc and base/basictypes.h), but can bein different directories too.
Within each section it is nice to order theincludes alphabetically.
For example, the includes ingoogle-awesome-project/src/foo/internal/fooserver.cc might look like this:
<span style="font-size:16px;">
#include "foo/public/fooserver.h" // Preferred location.
#include <sys/types.h>
#include <unistd.h>
#include <hash_map>
#include <vector>
#include "base/basictypes.h"
#include"base/commandlineflags.h"
#include "foo/public/bar.h"
</span>
⑦ Google对C++的影响有多大
习C++,未让充满期待
C++门前景软件编程语言C++C语言基础发种通用编程语言应用广泛C++支持种编程范式 --面向象编程、泛型编程程化编程新式标准C++14于20148月18公布其编程领域众广用于系统发引擎发等应用领域至今止受广程序员受用强编程语言,支持类:类、封装、重载等特点废少说C++,事非工作优秀C++工作元工资往往秒杀Java等程序员
二 习C++其实简单没想难
编程塌糊涂能力行态行总觉编程C++难遇点问题各种纠结助或者喜欢习C++伙伴非努力买面各种书籍网看各种视频教程税半斤八两能自说我曾经努力我能说呵呵其实些习都太落早淘汰种习习效率非低往往战斗没力坚持
让我给家指点迷津吧现习C++面先进习看互式直播视频教通电脑现场听课问题场问师许 块明白课看视频放才高习种习模式谁能做我想加群前面组:四三七位于间位置组:五零八组:七九四按照顺序组合起能发现习新陆需要都需要付毛钱需要
三 C++发展历史简单介绍
C语言所要起名C主要参考候门叫B语言设计者认C语言B语言进步所起名C语言;B语言并前A语言B语言作者纪念妻妻第字母B; C语言发展顶峰刻现版本叫C with ClassC++早版本C语言增加class关键字类候版本C都希望C语言增加类概念;C标准委员决定版本C起新名字候征集种名字采纳其意见C语言++运算符体现C语言进步所叫C++立C++标准委员;
美AT&T贝尔实验室本贾尼·斯特劳斯特卢普(Bjarne Stroustrup)博士20世纪80代初期发明并实现C++(初种语言称作C with Classes)始C++作C语言增强版现给C语言增加类始断增加新特性虚函数(virtual function)、运算符重载(operator overloading)、重继承(multiple inheritance)、模板(template)、异(exception)、RTTI、名字空间(name space)逐渐加入标准1998际标准组织(ISO)颁布C++程序设计语言际标准ISO/IEC 1488-1998C++具际标准编程语言通称作ANSI/ISO C++1998C++标准委员立第每5视实际需要更新标准标准更新2009目前我般称该标准C++0x遗憾由于C++语言于复杂及经历演变直现(2009)Visual C++ 2010 CTP发环境编译器完全符合标准
另外目前习C++言认门独立语言;并依赖C语言我完全C语言直接习C++根据《C++编程思想》(Thinking in C++)书所评述C++与C效率往往相差负5%间所认数场合C++ 完全取代C语言(我单片机等需要谨慎利用空间、直接操作硬件要使用C语言) [编辑本段]【语言】根据Effective C++第三版第条款描述现C++由四语言组:
1、C语言C++支持C语言几乎全部功能语与C语言仅极微妙差别(括号表达式左右值性具体请参考C++标准文献)
2、面向象C++C++首先作门面向象语言闻名特点再详述
3、泛型编程语言C++强(容易失控)模板功能使能编译期完许工作提高运行期效率
4、STL(C++标准模板库)随着STL断发展已经逐渐C++程序设计或缺部其效率能比般naive代码低些其安全性与规范性使受欢迎 [编辑本段]【语言发展】
C++语言发展概三阶段:
第阶段80代1995阶段C++语言基本传统类型面向象语言并且凭借着接近C语言效率工业界使用发语言占据相份额;
第二阶段19952000阶段由于标准模板库(STL)Boost等程序库现泛型程序设计C++占据越越比重性同由于Java、C#等语言现硬件价格规模降C++受定冲击;
第三阶段2000至今由于Loki、MPL等程序库代表产式编程模板元编程现C++现发展历史新高峰些新技术现及原技术融合使C++已经今主流程序设计语言复杂员
【C++入门】C++种语言仅仅语、特性、标准类库已经门非高深课程所始习候必须先要打基础市面Visual C++书虽其能花1-2章介绍C++基本特性绝让入门初者习C++应该选择针C++语言本身书籍能针Visual C++、MFC或者Windows API
习C++应该由易至难循序渐进前经说习C++前应该习C语言事实必须C++C语言虽关系仍两种同语言习C++前习其编程语言处使习C++速度更快毕竟计算机语言概念都相通于零基础初者说则应该静要急躁要C++高手容易必须要花努力
入门教材选择主要看习者自身情况已经习高级语言经历推荐使用谭浩强《C++程序设计》注意04版06版本书阉割版面向象虽说CC++相似前面已经说CC++应该作两种语言习所06本内容稍微欠缺点谭浩强04版本书内容比较规整条理清晰其高级语言基础估计半能C++概况解谭浩强师书已经全各高等院校教科书比较受认
零基础始C++推荐使用潘嘉杰《易C++》本书2008新书听说读书候写本书网载免费电版本书主要针初者讲比较趣比较提起习兴趣所没基础初者选本书错想要快高手能看本书够至于看完入门书应该看些高层书比The C++ Programming LanguageC++ Primer同向STL、MFC、API等各向发展别语言兴趣能看看C#JavaC++语概念都类似 [编辑本段]【C++设计原则】?? C++设计静态类型、C同高效且移植用途程序设计语言
?? C++设计直接广泛支援种程序设计风格(程序化程序设计、资料抽象化、面向象程序设计、泛型程序设计)
?? C++设计给程序设计者更选择即使能导致程序设计者选择错误
?? C++设计尽能与C兼容籍提供CC++平滑渡
?? C++避免平台限定或没普遍用途特性
?? C++使用带额外销特性
?? C++设计需复杂程序设计环境
于保证语言简洁运行高效等面考虑C++特性都库(STL)或其形式提供没直接添加语言本身关于类题C++父《C++语言设计演化》 做详尽陈述 [编辑本段]【C++Hello World程序】使用兼容C89标准(称ANSI C)编译器面程序显示Hello, world!结束运行:
(事实并符合98标准[ISO C++]C++程序且数编译器程序能运行若要比较旧编译器编译该程序应iostream改iostream.h)
#include
int main()
{
printf("Hello, world!\n");
return 0;
}
使用兼容C++98标准(ISO/IEC 14882-1998)编译器面程序:
#include
int main()
{
cout << "Hello, world!" << endl;
return 0;
}
使用兼容C++ STL编译器应:
#include
using namespace std;
int main()
{
cout<<"Hello,world!"<<endl;
return 0;
}
根据ISO C++规定main函数形式能
int main(void)
{
...
}
及
int main(int argc,char * argv[])
{
...
}
尽管Visual C++ 2003前Microsoft Studio编译器
void main()
{
...
}
支持并确标准写使程序代码丧失跨平台特性 [编辑本段]【C++程序员数量】析机构EvansData定期发员展调查其调查结与Stroustrup提C++扩张说相违背EvansData数据显示C++工具发员整发界所占比例由1998春76%降至2004秋46%
Forrester新调查显示C++、微软VisualBasicJava众公司产品体系首选语言100家公司调查显示C/C++、VisualBasicJava产品体系使用比例别59%、61%66%
传统认C++相于目前些新潮语言Java、C#优势于程序运行性能种观念并完全深信点说明并没充解理解C++某某语言同持种观念通受某种误导(罪魁祸首些财气粗公司)于些公司言隐藏C++同某某语言间核差别现数程序员太关差别性能加强化随着CPU性能快速提升性能问题已所关叫李代桃僵涉世深程序员相信于公司阴谋逞
般认使用Java或C#发本比C++低能够充析C++些语言差别发现句立条件条件:软件规模复杂度都比较超3万行效代码(包括器产代码)句基本能立否则随着代码量复杂度增加C++优势越越明显造种差别C++软件工程性JavaC#谈软件工程候C++实际已经悄悄软件工程性提升前所未高度点数忽视并且公司竭力掩盖
语言软件工程坏依赖于语言抽象能力面向程面向象语言抽象能力质飞跃实践发现面向象解决所软件工程问题于精英逐步引入、并拓展泛型编程解决更高层软件工程问题(实际面向象泛型编程起源都追溯1967由于泛型编程更抽象所应用远远落于面向象) [编辑本段]【C++语言应用】哪些程序用C++写:
主流3种操作系统Windows,Linux,Unix,内核都用C语言汇编写层高级特性用C++写
C++父Bjarne Stroustrup列举C++应用:
Amazon.com:Software for large-scale e-commerce
Apple: OS X is written in a mix of language, but a few important parts are C++. The two most interesting are
AT&T:The largest US telecommunications provider.
o provisioning systems
o systems for rapid network recovery after failure
Autodesk: A large number of major number of application in the CAD domain
Ericsson:o server platform.
o TDMA-CDMA HLR
o GSM-TDMA-CDMA mobility gateway
Google: web search engine, etc
HP: Here is a tiny fraction of HP's C++ apps:
o C, C++, Fortran90 compilers, and linker for the new HP IA64 platform (these add to more than 1 million lines of C++ code).
IBM: o OS/400.
o K42: a high performance, open source, general-purpose operating system kernel for cache-coherent multiprocessors.
Intel:o Vtune performace analysis software
o compilers and optimizers
o lots of chip design and manufacturing software
JPL (Jet Propulsion Lab, NASA): Mars rover autonomous driving system (incl. scene analysis and route planning). C++ on Mars! Also lots of supporting software "on the ground" (i.e. Earth).
Microsoft:o Windows XP
o Windows NT (NT4 and 2000)
o Windows 9x (95, 98, Me)
o Microsoft Office (Word, Excel, Access, PowerPoint, Outlook)
o Internet Explorer (including Outlook Express)
o Visual Studio
o SQL
Mozilla: Firefox browser and Thunderbird mail client (open source)
MySQL: MySQL Server (about 250,000 lines of C++) and MySQL Cluster. Arguably the world's most popular open source database
Nokia: o Mobile Communications radio-station/internet bridges: FlexiGGSN (Gateway GPRS Support Node) and FlexiSGSN (Server GPRS Support Node).
o MSC/HLR
Sun: o The HotSpot Java Virtual Machine is written in C++
Symbian OS: rationale: "[...] using C++ for all system code, from the kernel upwards." This is one of the most widespread OS's for cellular phones
KDE from linux is written in C++.
telephone systems: I think it would be almost easier to list the systems which aren't written in C++
⑧ 列出《google c++ 编程风格指南》中的观点,主要解决什么问题
编程风格主要用于提高可读性, 其他优点多数都基于此特性延伸而来.
⑨ golang go是函数式编程语言吗
我们这个世界真的需要另外一种C语言风格的编程语言吗?很显然,谷歌很早就这么认为了,在 2009 年,它借用雷蒙斯乐队的歌“Hey!Ho!Let’s Go”,正式推出了 Go 语言。现在 Go 语言开发团队已经开发出了这种语言的第一个稳定版本,他们称之为 Go 1,他们将这种语言推向世界,希望人们用这种语言“开发出健壮的软件产品和作品。”那么,现在人们对这种语言的使用情况又是如何呢?让我们先回顾一下,什么是 Go 语言,是什么促使谷歌决定推出这样一种语言?按 Go 语言的“常见问题”里的说法,自从那个“重要的系统级编程语言”诞生距今已超过十几年了,这段时间计算机世界已经发生了很大的变化。谷歌的才人们对目前现有的各种语言深感失望,他们必须要在“快速的编译、快速的执行或简单编程”之间做出选择。“没有一种主流的编程语言,例如C,C++,Java,Python 等,能提供谷歌人想要的全部特征。于是,谷歌的工程师从 2007 年起开始开发 Go 语言。“常见问题”里这样说:Go 语言在基本语法上”基本上属于C语言家族“,但它从 Pascal 语系吸收了”大量的理念“,还有一些思想是来自其它的语言。但对于程序员来说,应该把它当成一种全新的语言,一种以”让程序员更有效率,让编程更有效率,至少是让我们更有效率并且使编程更有乐趣“的理念为设计目标的编程语言。Go 语言擅长做什么…?那么,Go 语言擅长做什么?根据谷歌着名的软件工程师——Go 语言的设计人之一——Rob Pike 的说法,它是用来开发”大型软件“的。Pike 说 Go 语言适合于”很多程序员一起开发的大型软件,并且开发周期较长,支持云计算的网络服务:简言之,就是服务端软件。Go 语言能够让程序员快速开发,并且在软件不断的增长过程中,它能让程序员更容易地进行维护和修改。它融合了传统编译型语言的高效性和脚本语言的易用性和富于表达性。“(作为原贝尔实验室 Unix 开发小组成员,Pike 对系统软件有相当的认识。)但对于其它类型的软件,Go 语言也一样的好用。例如,我在 Google+ 上询问了 Go 语言的使用者,得到了 Douglas Fils 的回复,他正在拿各种语言做实验。Fils 说他现在有时会开发一些 Web 应用程序,大多数都是在 Java 虚拟机(JVM)平台上。“所以 Java 自然是最常用的。我最近开始尝试更多的语言,例如 Scala 和 Groovy。我用 Groovy 语言已经开发了不少的东西,而且刚刚完成了一个 Groovy/Grails 语言上的大型项目。我还研究了一下 Ruby on Rails/Python (Python 框架),并用它们做了一些东西。”他说他用早期版本的 Go 语言开发了一个 Web 界面来处理数据资源。但很不幸。“当时的 Go 的程序库和语法使得开发起来很困难。我还尝试了 node.js,而且,到了一月份,我的精力完全转向了 node.js.”Node.js,Fils 说,很流行,“虽然我很喜欢它,但它的单线程事件循环机制和非阻塞的编程模式让我不太满意。还有,所有的东西都要用 Javascript 的回调函数,我不喜欢这样。”很显然,他不是一个 JavaScript 的粉丝。Go 语言的语法和结构,从另一方面讲,“还是很简洁的。”当Go 语言的语法和结构趋于稳定,并发布了 Go 1 时,他觉得应该转回来,重写他的 Go 语言程序。这回,他想起来了当初为什么想用 Go 来开发。关于Go 语言的争论Fils 说,在 Java 里,很多东西都需要有一定的模板套路,这是很讨厌。他说 Scala 和 groovy 要好一些,但仍然是个问题。Go 语言给人的感觉像一个动态的类型化语言,Fils 说,但 Go 语言里静态类型特征并不像 Java 里那样明显。Go 语言的垃圾收集管理,比 JVM 要好的多。跟 Groovy 这样的动态语言比起来尤其能看出这点。Fils 在评论中说 Go 语言的速度比其它语言快很多倍。它运行速度快但不影响负载量。它编译所需的时间很短,他在开发时能边开发边编译,就像动态语言那样迅速。最后,他说使用 Go 语言要比使用 Node.js,Java 或以 Java 为基础的语言,Ruby on Rails 等语言要有趣的多。在开发 JVM 平台上的应用时,我总感觉自己是一个系统管理员,而不是一个开发者。我要修改堆空间,我要研究负载均衡或内存问题或其它的资源管理问题。而使用 Go 语言,我不需要考虑这些。我开发,编译,测试,运行,部署,非常的享受。请注意,并不是所有的人都喜欢 Go 语言。你可以看一看 Shaneal Manek 的关于 Go 语言的垃圾收集系统以及脚本语言和编译型语言之间比较的评论。Go 语言能走向主流吗?你的期望是什么?按照 RedMonk’s Stephen O’Grady 的说法,对于 Go 语言来说现在还非常年轻。通常,程序员会分成两个阵营:要么欢迎底层语言和脚本型/垃圾收集器型语言的融合,要么是反对这样做。对于后者,毫无意外的,他们是C语言的坚定拥护者。围绕着 Go 语言有很多的争论,这不令人吃惊,任何一种语言都是这样。而令人吃惊的是目前 Go 语言在程序员中获得了相当的吸引力。O’Grady 二月份在 RedMonk 编程语言分级中把 Go 语言放入了第二梯队。但是,他说,考虑一下 Go 语言是如此的年轻,“即使是目前这种成绩也是让人相当的印象深刻了。”谷歌已经发布了 Go 语言的稳定版本,并且在 Google App Engine 支持部署这种语言的应用,这将给 Go 语言带来更多的吸引力。Go 语言能否成为一种“主流”语言,这需要由时间来判定。不过,看起来除谷歌之外还有很多公司对这种语言也很感兴趣,比如 Engine Yard 等公司。那些对目前的现存的语言不太满意的程序员大概对 Go 语言都在拭目以待。如果你在使用 Go 语言或之前简单涉略过它,你需要注意,Go 1 版引入了不少的变化。然而从 Go 1 版开始,Go 语言的变化将会遵循它的规格说明书进行。根据 Go 语言的开发人员的透露,“也许在某个时间,我们会推出 Go 2 的规范,但在此之前,用 Go 语言编写的程序在今后的 Go 1 版本(Go 1.1, Go 1.2 等)上都能正确的运行。”你用Go 语言开发过什么项目吗?
⑩ 为什么C++是Google 大部分开源项目的主要编程语言
Google的C++开源代码项目
v8 - V8 JavaScript Engine
V8 是 Google 的开源 JavaScript 引擎。
V8 采用 C++ 编写,可在谷歌浏览器(来自 Google 的开源浏览器)中使用。
V8 根据 ECMA-262 第三版中的说明使用 ECMAScript,并在使用 IA-32 或 ARM 处理器的 Windows XP 和 Vista、Mac OS X 10.5 (Leopard) 以及 Linux 系统中运行。
V8 可以独立运行,也可以嵌入任何 C++ 应用程序中。
nativeclient - Native code for web apps
Native Client是一个在Web应用程序中运行本地代码(目前只支持x86架构)的开源的研究性技术,提供更好的“富客户端”用户体验。它允许网络开发者编写更强大的Web程序,这些程序直接通过系统运行而不用通过浏览器来进行,据Google称,它到最后将允许网络开发者开发和桌面软件一样的的web程序,这些程序将带来更快的速度。Native Client类似于微软的ActiveX技术,它还能在Linux和Mac OS X下运行。目前它尚未支持IE,仅支持Google Chrome, Firefox, Safari 和Opera。
tesseract-ocr - An OCR Engine that was developed at HP Labs between 1985 and 1995... and now at Google.
OCR(Optical Character Recognition):光学字符识别,是指对图片文件中的文字进行分析识别,获取的过程。
Tesseract:开源的OCR识别引擎,初期Tesseract引擎由HP实验室研发,后来贡献给了开源软件业,后经由Google进行改进,消除bug,优化,重新发布。当前版本为3.01.
google-glog - Logging library for C++
Google glog是一个基于程序级记录日志信息的c++库,编程使用方式与c++的stream操作类似,例:
LOG(INFO) << "Found " << num_cookies << " cookies";
double-conversion - Binary-decimal and decimal-binary routines for IEEE doubles.
从V8引擎中抽出的有关数值计算相关的代码,包括大数计算,数值到字符串转换等
googletest - Google C++ Testing Framework
gtest测试框架[1]是在不同平台上(Linux,Mac OS X,Windows,Cygwin,Windows CE和Symbian)为编写C++测试而生成的。它是基于xUnit架构的测试框架,支持自动发现测试,丰富的断言集,用户定义的断言,death测试,致命与非致命的失败,类型参数化测试,各类运行测试的选项和XML的测试报告。
googlemock - Google C++ Mocking Framework
googlemockmock技术,在c++单元测试可以随意修改函数行为的技术。
googlemock是google基于gtest开发的mock框架,适用于c++单元测试。
libphonenumber - Google's phone number handling library, powering Android and more
一个专门用于处理电话号码的库
google-diff-match-patch - Diff, Match and Patch libraries for Plain Text
google-diff-match-patch这个类库提供了强大的算法用于纯文本内容的差异比较,匹配,打补丁,实现同步纯文本所需要执行一些操作。支持多种语言包括:Java、JavaScript、C++、C#、Objective C、Lua和Python。
libkml - a KML library written in C++ with bindings to other languages
libKML是解析,生成和操作KML的库。使用OGC KML2.2标准。
KML,是 Keyhole 标记语言(Keyhole Markup Language)的缩写,是一种采用 XML 语法与格式的语言,用于描述和保存地理信息(如点、线、图像、多边形和模型等),可以被 Google Earth 和 Google Maps 识别并显示。您可以使用 KML 来与其他 Google Earth 或 Google Maps 用户分享地标与信息。当然,您也可以从 Google Earth 社区 等相关网站获得有趣的 KML 文件。Google Earth 和 Google Maps 处理 KML 文件的方式与网页浏览器处理 HTML 和 XML 文件的方式类似。像 HTML 一样,KML 使用包含名称、属性的标签(tag)来确定显示方式。因此,您可将 Google Earth 和 Google Maps 视为 KML 文件浏览器。单击此处可获得更多信息。
gdata-cpp-util - Google Data APIs C++ utility library
一个Google Data APIs 的工具库,可以GET/POST/PUT/DELETE
lutok - Lightweight C++ API for Lua
是一个 Lua 的 C++ wrapper
Lua 是一个小巧的脚本语言。是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组,由Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo所组成并于1993年开发。 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。Lua由标准C编写而成,几乎在所有操作系统和平台上都可以编译,运行。Lua并没有提供强大的库,这是由它的定位决定的。所以Lua不适合作为开发独立应用程序的语言。Lua 有一个同时进行的JIT项目,提供在特定平台上的即时编译功能。
dcs-bwt-compressor - Data compressor program and library
dcsbwt是一个基于Burrower-Wheeler变换的数据压缩程序库
treetree - generic n-ary trees for C++
TreeTree (http://code.google.com/p/treetree/)是一个只包含头文件的 C++ Library。它实现了一个通用的 树形结构容器类(遵守 STL约定),并且实现了 operator >> 和 operator <<。
它的底层包含一个双向链表。在前项指针和后项指针以外,每个树节点还包含第三个指针--指向所有子节点的列表。这个实现高效,并且 API 非常清晰。TreeTree 可以表达任何使用Lisp的S表达式能表达的东西(例如推理树(inference trees, programs)等)。
可以使用前序和后序遍历,只遍历某个节点的子节点,或者只是在叶子节点遍历。示例的选项还包含遍历子树(如f(g(x,y),z) 前序遍历,是f(g(x,y),z), g(x,y),x,y和z.
ctemplate - Powerful but simple template language for C++
ctemplate (Google-ctemplate)的设计哲学是轻量级,快速,且逻辑和界面分离,因此和ClearSilver和Teng是有一些差异的。比如Ctemplate就没有模板函数,没有条件判断和循环语句(当然,它可以通过变通的方式来实现)。 ctemplate大体上分为两个部分,一部分是模板,另一部分是数据字典。模板定义了界面展现的形式(V),数据字典就是填充模板的数据(M),你自己写业务逻辑去控制界面展现(C),典型的MVC模型。
sparsehash - An extremely memory-efficient hash_map implementation
Google Sparse Hash 是 Google 一个很节省内存的 hash map 实现
gflags - Commandline flags mole for C++
Google GFlags 是一个命令行标记的处理库,它可以替代“getopt()”,其内置对C++的支持比如string。
protobuf - Protocol Buffers - Google's data interchange format
Google Protocol Buffer 是一个平台无关、语言无关的结构化数据的序列化与反序列化工具。
protocol buffer,可以用来在跨进程、跨机器,不同操作系统,不同编程语言之间进行数据交换。类似于微软的COM IDL或者XML,但是解析速度更快,需要传输字节数更少。(c+
+, java, python)
gperftools - Fast, multi-threaded malloc() and nifty performance analysis tools
TCMalloc,heap检测,是一个google用于性能检测的工具。(c++)
google-breakpad - Crash reporting
breakpad,一个项目的开始需要做一些什么样的基础设施,crash mp和运行logging毫无疑问都是应该有的,这个项目就是负责在crash的时候收集信息,发出crash mp报告的。