太阳娱乐工程师亲述在 Google 从事 TypeScript 工作的独家体会!

太阳娱乐 15

太阳娱乐工程师亲述在 Google 从事 TypeScript 工作的独家体会!

原标题:工程师亲述在 Google 从事 TypeScript 工作的独家体会!

Java虽然是很受欢迎的语言,但是并不适合所有人,那么有哪些替代方案呢?本文将分析5种Java替代方案。

AngularJS | Closure | Google Web Toolkit | Dart | Polymer

文章整理于互联网。
本文收集了 60款 Google 开源的项目,排名顺序按照 Github ★Star 数量排列。

style=”font-size: 16px;”>【CSDN编者按】多年来,Google为了开发大型Java应用程序而构建了大量基础架构。

style=”font-size: 16px;”>今天,就来听听在Type上工作了两年多的Google软件工程师Evan
Martin,对此有什么心得体会吧!

太阳娱乐 1

GWT

Google Web Toolkit (GWT) 是一种开源 Java 软件开发框架,可以使不会使用第二种浏览器语言的开发人员编写 Google 地图和 Gmail 等 AJAX 应用程序时更加轻松。GWT 可在使您避免这些麻烦的同时,还为您的用户提供同样的与标准兼容的动态体验。您只需使用 Java 编程语言编写您的前端,GWT 编译器会将您的 Java 类转换为与浏览器兼容的 JavaScript 和 HTML。

0、机器学习系统 TensorFlow  ★Star 62533

太阳娱乐 2

1995年,Netscape聘请Brendan Eich为当时最受欢迎的网络浏览器Netscape
Navigator添加一种新语言。Netscape希望增强网络的可编程性。

Closure 

如Closure Compiler(用于生成紧凑且高性能代码的工具)、Closure Templates(用于动态生成HTML)、Closure Linter(JavaScript风格检查器)及Closure Stylesheets(对CSS的一套扩展)

 

我已经在Type上工作了两年多了,所以我想写一两篇文章来回顾这两年的工作。首先,我应该写一个标准的免责声明:我只是一家公司的一个普通的工程师,公司拥有数万名工程师,肯定会有人对我在这里表达的观点持有不同的意见。

Live在1995年末发布了测试版的浏览器,并在最终发布前改名为Java,以利用Netscape与Sun
Microsystems的合作关系,后者是流行的Java语言背后的公司(尽管Java本质上与Java没有任何关系)。

Dart

Dart([KK] 英语发音:/dɑrt/, [DJ] 英语发音:/dɑ:t/)是一种基于类型的可选类型化编程语言,类似于Javascript。它是一种面向对象语言,由Google主导开发,于2011年10月公开。它的开发团队由Google Chrome浏览器V8引擎)团队的领导者拉尔斯·巴克(Lars Bak)所主持。

太阳娱乐 3

谷歌很早就开始做Web应用程序

Mozilla的创始人之一是Eich,他在10天内开发出了Java的原始版本。在接下来的25年里,Java从一种不受欢迎且受到严重限制的语言发展成为现代web应用程序构建的强大基础。如今,Java主导了浏览器,并通过Node.js占领了大部分服务器。

angularjs

 

 

 

 

使用AngularJS构建大型Web应用

 

AngularJS 自集成了模板,不能使用第三方的——不过你仍然可以 Jade 之类的模板进行预编译,以简化书写。
与一些 MDV Model Driven Views同类相比(Facebook 有 React;Google 另外还有 Dart、Polymer;Mozilla 有 X-Tag),我认为 AngularJS 胜在可用和易于测试这两方面。

 Are you doing heavy DOM manipulation? I would use jquery and backbone

 Very data driven app? Angular with it’s nice data binding

 Game programming? none, direct to canvas, maybe a game engine

 

  Top JavaScript MVC Frameworks 

 

Google很早就开始做Web应用程序了。我简直无法相信Gmail发布已经14年了。在当时使用Java是非常疯狂的做法。Gmail的工程师不得不担心IE糟糕的垃圾回收算法,他们需要手动将字符串文字从for循环中提取出来,以避免GC(Garbage
collection垃圾回收机制)停止工作。

然而,Java并不是所有开发人员都喜欢的语言。Eich在早期做出了一些古怪的决定,这些决定一直持续到2019年,其中包括典型的继承、“this”以及Java的侵略性和不一致的类型强制。

Polymer

http://www.polymer-project.org

代表了下一代Web框架的方向:一切皆组件,尽量减少代码量,尽量减少框架限制。

Polymer由加盟Google的原Palm webOS开发团队打造,是一套以“一切皆组件、最少化代码量、最少框架限制”为设计理念的Web UI框架。Web Components则提供了一种更彻底的解耦方式,更加方便了UI的开发和模块化,可以说是Polymer的基础之一。

 以前的dart webui库

 

 

以上可见google开发个的web应用库就很多了,从语言到界面等多个层面提供了解决的方式,我们根据具体的需求进行选择吧。

TensorFlow
是谷歌的第二代机器学习系统,按照谷歌所说,在某些基准测试中,TensorFlow的表现比第一代的DistBelief快了2倍。TensorFlow
内建深度学习的扩展支持,任何能够用计算流图形来表达的计算,都可以使用TensorFlow。任何基于梯度的机器学习算法都能够受益于TensorFlow的自动分
化(auto-differentiation)。通过灵活的Python接口,要在TensorFlow中表达想法也会很容易。(详情:)

最近我发现了一个那个时代的设计文档,他们当时在考虑做我们现在称为Java“压缩”的东西,但一些备选工具只能在Windows上使用。在今天看来,这些都难以想象。

近年来,开发人员已经创建了Java的替代品。Java仍然是在浏览器中运行的唯一语言,因此这些新语言主要是编译或转换为Java。Coffee是第一个类似的脚本,但很快就被众多竞争对手所超越,每个竞争对手都对Java进行了改进。

 

这些年,Google为开发大型Java应用程序,构建了大量基础架构。例如,有一个模块系统可以让源文件表述它们的相互依赖性。有一个捆绑程序可以组合并压缩源文件,生成可以兼容浏览器的产品。

Dart

1、material-design-icons  ★Star 30315

另一个程序可以通过可动态加载的入口点来分析应用的依赖关系图,并分解出公共的块供其他块使用。服务器端的渲染很常见。对于如今的Web开发人员来说,所有这些概念载熟悉不过了,但Google的技术栈很早就有了,而且一直在发展,因此在概念上类似,但具体方面完全不同,Google拥有不同的流程、工具,甚至不同的概念名称。

Dart是一种面向对象的c语言,由Google创建,作为Java的替代品。它抛弃了Java的原型继承系统,而采用了更传统的面向对象的方法,任何使用过Java或c++的人都熟悉这种方法。与Java不同,Dart是一种静态类型的语言,消除了Java代码中的常见错误源。Dart支持类型推断,因此没有必要在每次声明变量或函数时都包含类型样板。

Google 开源了 Material Design 系统图标包其中的 750
个字形。该系统图标包含常用的图标,如用于媒体播放、通讯、内容编辑、连接等等。在
Web 应用,安卓和 iOS
设计均适用。(详情:)

还有个例子可以说明并行发展:Google、Facebook和Microsoft各自构建了类似但不兼容的编译器,这些编译器向Java添加了静态检查。

也许Dart最令人激动的功能是它在网络之外的可用性。Dart代码可以转换为Java以便在浏览器中运行,但它也可用于独立应用程序和服务器端开发。Google的Flutter
UI工具包是一个可移植的前端框架,可用于桌面、移动设备和Web,构建本机应用程序。

 

Google的编译器常被称为Closure。(请不要与Clojure语言混淆;为了避免混淆需要说明一下:Clojure使用的是Closure编译器。)

Type

2、前端开发工具组 MDL  ★Star 27873

Google的Java堆栈非常棒。有了它的帮助,Google才能编写并维护可以改变互联网的web应用程序。(还记得Google地图发布时,多么令人震惊吗?如今制作一个可以拖拽的地图小部件似乎非常简单。)

Type是微软向更好的Java进军的第一步。与Dart不同,Type不是一种全新的语言,而是Java的超集。Type编译器可以编译有效的Java,但是Type增加了几个新特性,改进和现代化了Java的限制,其中最重要的是一个可选的类型系统。

太阳娱乐 4

Google地图的一些技术甚至超越了当今最好的技术。例如,Closure编译器可能仍然是最复杂的Java优化程序,它能够执行很多操作,例如利用类型信息优化代码,跨越热加载的块的边界进行函数内联,以及在符号层次删除未使用的代码等。

许多Java问题都是由于缺少静态类型导致的,这导致了编译器在运行前进行检查时就被限制了。顾名思义,Type实现了一种类型表示法,开发人员可以使用这种表示法为web应用程序编程保证安全。与Dart一样,Type支持类型推断。

MDL (Material Design Lite) 是 Google 推出的网站前端开发工具组。Material
Design Lite (MDL)可以让你添加一个 Material Design
的外观和感觉到你的静态内容网站,不依赖于任何的 JavaScript 框架和库。MDL
可以优化跨设备的使用体验,可以在旧版的浏览器进行平滑的切换,提供非常快速的访问体验。(详情:)

Google的Java技术栈也存在一些问题。linter的渐进式发展表明了Closure只不过是个拥有静态类型的Java,其中新功能是通过注释引入的。

值得一提的是,Type比它的竞争对手谷歌更受欢迎。比如,虽然Angular是谷歌的项目,但它的框架是用Type开发的。Type也可以与React和Vue一起使用。

 

Closure的语句难以捉摸,速度很慢,有很多Bug,而且如果你不会正确地使用的话,那么它往往会破坏你的代码。尽管它是开源的,但也许是正因为这些原因,除了熟悉它的Google员工之外,行业中并没有广泛使用到它。

Elm

3、Web 前端框架 Angular  ★Star 25524

Java在Google内部的反响并不好,我认为部分原因在于我们对工具很挑剔,大家既嫌静态语言过于繁琐,又嫌动态语言不可捉摸。

Dart和Type与Java和C.
Elm有明显的亲缘关系。它是一种静态类型的函数语言,与Haskell相比更类似于C,但没有Haskell那种令人挠头的复杂性。

Angular 是一款十分流行且好用的 Web 前端框架,目前由 Google
维护。官方已将 Angular 2 和之前的版本 Angular.js 分开维护(两者的 GitHub
地址和项目主页皆不相同)。渐进式 Web 应用,借助现代化 Web
平台的力量,交付 app
式体验。高性能、离线化、零安装。(详情:)

Java出乎意料地流行了起来

Elm本质上是一种用于构建web前端的特定于领域的语言。

 

与此同时,在Google之外,Java也在不断发展,甚至出乎意料地流行起来了。我们构建了Chrome,部分原因是为了解决IE的那些垃圾回收Bug,但也因此催生了了v8,再由v8产生了Node.js。

Elm不像Java那样是一种通用语言,相反,创建者Evan
Czaplicki专注于构建最好的前端web应用程序开发体验。Elm的主要优点是,通过静态类型和不可变值消除了前端代码中的许多潜在bug。Elm宣称自己是一种“在实践中没有运行异常”的语言,这意味着如果一个Elm程序运行,它就不太可能在生产中遇到阻止性能的bug。

4、容器集群管理系统 Kubernetes  ★Star 24599

最后导致今天大多数的Web工具都是用Java编写的,尽管Google习惯用Java构建这种工具。模块系统(UMD、AMD、CommonJS)迅速发展。(随之出现了ES6,并发明了自己的模块系统,但是由于某种原因它与其他所有模块系统不兼容,唉!)

以下是Elm代码示例

Kubernetes 是来自 Google 云平台的开源容器集群管理系统。基于 Docker
构建一个容器的调度服务。该系统可以自动在一个容器集群中选择一个工作容器供使用。其核心概念是
Container Pod。(详情:)

NPM统一了工具和库的共享方式。Webpack可以在开发期间,将模块动态地切换到正在运行的应用程序中。

太阳娱乐 5

 

Google一概没有用到这个技术。Google的那些经验丰富的Web开发人员像是生活在另一个时间线中。我们有像SASS这样的CSS预处理语言,但它不是SASS而且没有人喜欢它。精心设计的块分割程序并不能真正支持第三方Java库,部分原因是这些工具的出现早于Java的库生态系统。

Elm代码看起来和Java一点也不像,但是它有简单直观的语法,Elm对学习过Java的人来说应该不难。

5、数据描述语言 protobuf  ★Star 18447

这都只是历史。你可以说我们本不应该这么做,但这么说却无法改变现状。相反,有趣的问题是:接下来我们该何去何从?有几个选择。我的观点肯定是偏向我喜欢的技术。

Clojure

Protocol Buffers (ProtocolBuffer/ protobuf
)是Google公司开发的一种数据描述语言,类似于XML能够将结构化数据序列化,可用于数据存储、通信协议等方面。现阶段支持C++、JAVA、Python等三种编程语言。同XML相比,Protocol
buffers在序列化结构化数据方面有许多优点(详情:)

接下来我们该何去何从

Clojure是Clojure编程语言的一个版本,可以编译为Java。Clojure是运行在Java虚拟机上的Lisp。与Elm一样,Clojure也是一种函数性语言,具有不可变的数据类型。与Elm不同,它是一种通用编程语言,可以在后端与JVM一起使用,也可以通过Java在前端使用。

 

第一个诱人的选择就是放弃眼前的一切,并从头开始建造一个没有Java的新世界。如果我们投入更多精力到GWT(一个将Java编译成Java的Google项目)或Dart(一个将新语言编译成Java的Google项目)或WASM,或者你最喜欢的语言:Clojure?Haxe?还是Elm?那么我们根本不需要担心Java!

与所有Lisp一样,Clojure是用括号分隔的s表达式编写的。用Clojure的创建者Rich
Hickey的话来说,Clojure试图用Clojure(简洁且功能强大的编程语言)取代Java,从而解决客户机/嵌入式应用程序开发中的薄弱环节。Clojure可以与React和其他流行的Java框架一起使用。

6、Java 常用库 Guava  ★Star 17267

作为PL爱好者,我非常喜欢这个想法。我想仔细分析一下这个想法,但是这篇文章已经够长了,而且我认为已经有很多关于这方面讨论的文章了。

当Netscape雇用Brendan
Eich时,他们计划将Scheme集成到Navigator中,而不是创建一种新的语言。Scheme是一种Lisp,因此,如果历史的发展稍微有些不同,Lisp可能已经成为世界上最流行的编程语言家族。Java通过一流的函数、闭包和lambdas保留了一些“Lispiness”。在Java开发过程中扮演关键角色并发明了JSON的道格拉斯•克罗克福德(Douglas
Crockford)将Java称为“披着C外衣的Lisp”。

该项目是 Google 的一个开源项目,包含许多 Google 核心的 Java
常用库。(详情:)

作为反驳,我有一些常见的问题:如果采用一种不同的语言,那么第一个问题是,这对于我们现有的数百万行代码没有任何帮助——“用新语言从从头开始重写”等想法在某些情况下是正确的选择,但是如何充分利用Gmail工程师的时间是一个很难的问题;第二个问题是,对于我们想聘请的经验丰富的前端工程师来说,也几乎没什么用。

Phoenix LiveView

 

与重写一切相对的做法是不改变任何东西。您可能会说,公开的Java世界充满了业余和不成熟的代码。一个优秀的工程师总能适应我们特殊的前端方式,我们总能改进或构建更多自己的工具。

之前讲过的语言可以编译成Java,它们让开发人员无需编写Java就可以构建客户端应用程序。

7、Spark  ★Star 13378

我们构建的应用类型(Google搜索页面每天可以获得数十亿次点击)与其他人构建的web应用程序不同,我们的工具既优秀又很有必要性。我非常赞同这种观点。

Phoenix
LiveView与众不同。Phoenix是一个用相对较新的Elixir编程语言编写的web框架。Phoenix是一个服务器端框架。但我们为什么要在一篇专门讨论浏览器Java替代方案的文章中讨论它呢?因为LiveView可以在许多web开发场景中替代Java。

太阳娱乐 6

我认为在权衡利弊的时候,有一种看法认为建立我们自己的工具很有道理,而另一种看法则认为我们已经远离主流,我们的工具是一种负担。

Phoenix的创建者Chris
McCord称LiveView是“一个令人振奋的新库,它支持使用服务器呈现HTML,实现丰富的实时用户体验”。LiveView使用Phoenix
channel在浏览器和服务器之间创建双向连接。LiveView基于Websockets,可以在不编写Java的情况下创建交互体验。人们自然会担心这种方法太慢而无法使用,但是LiveView的设计目的是最小化数据传输,并且在实践中可以用于构建低延迟接口。

Spark 是谷歌公司推出的一款基于 Chrome 浏览器的开发环境。提供一组可重用的
UI 组件。采用 Dart
开发。(安装方法:)

那么争论的焦点是我们究竟处在什么位置,我相信我们不属于后者。我们为LLVM
/
Clang做出的贡献获益良多,因为我们依赖于C++,但是我们构建自己的LLVM,并不能从中获得更多额外的价值。

但LiveView有局限性,我们不建议在LiveView中构建像Google
Docs这样的复杂应用程序。如果离线功能对应用程序很重要,那么LiveView也不是合适的解决方案。但是,对于表单、实时界面更新和数据验证等功能,Phoenix
LiveView是Java的可行替代方案。它比大多数Java应用程序小得多;,LiveView的浏览器代码大约是React的四分之一。

 

我们应该折中

太阳娱乐 7

8、RPC 框架 GRPC  ★Star 10363

所以,我觉得我们应该折中,这也是我们的团队一直在追求的道路:逐步采用一些合理的外部工具,并弄清楚这些工具如何才能与我们现有的代码库相互合作。

总结

GRPC 是一个高性能、开源和通用的 RPC 框架,面向移动和 HTTP/2
设计。目前提供 C、Java 和 Go 语言版本,分别是:grpc, grpc-java, grpc-go.
其中 C 版本支持 C, C++, Node.js, Python, Ruby, Objective-C, PHP 和 C#
支持.GRPC 基于 HTTP/2 标准设计,带来诸如双向流、流控、头部压缩、单 TCP
连接上的多复用请求等特。这些特性使得其在移动设备上表现更好,更省电和节省空间占用。(详情:)

这项任务并不那么有趣,因为我们不会只是单纯地抛弃历史遗留的混乱或者“这次做正确的事情”,但我喜欢更谦虚地思考,不要固步自封。

我们已经研究了Java的五种替代方法,每种方法都提供了一种创建Web应用程序和交互式界面的不同方式。当然目前大部分人使用的依然是Java,因为它是Web浏览器支持的唯一语言。

 

为了Google的Java世外桃源重回大陆,我们要做的第一步是:采用了一个支持良好的静态检查器:(1)不是我们自己做的;
(2)很流行,同时与我们现有的代码相似;(3)旨在搭建通往Java的桥梁;(4)旨在支持大规模的开发,这才是我们定制工具的根本原因。而这个工具就是Type。

但随着WebAssembly被广泛采用,这种情况可能即将发生变化。所有主流浏览器都支持WebAssembly,将来它很可能成为面向Web的语言的默认编译目标。对于Web开发人员来说,探索WebAssembly的可能性是个很不错的方向。

9、高质量压缩图片算法工具Guetzli  ★Star 9959

Closure编译器的优势在于优化输出,而Type具有出色的用户界面且根本没有优化。因此这两个工具可以互补,并且(有些工作)可以结合在一起。

太阳娱乐 8

因为Type已经很好用了——毕竟只有这样我们才会采用它——所以我们获得了许多采用已有语言的好处,比如IDE风格的代码自动补齐,以及能够从StackOverflow获取答案。

Guetzli,是一个针对数码图像和网页图像的 JPEG 编码器,能够通过产生更小的
JPEG 文件来达到更快的在线体验,并且同时保持与当前浏览器,图像处理应用和
JPEG 标准的兼容性。Google 称 Guetzli 创建高质量的 JPEG
图像文件的大小比当前的压缩方法要再小 35%。上图为 16×16
像素样本,是挂在蓝天下的一根电话线,传统 JPEG
算法经常会遇到的失真状况。左边是未压缩的原图,中间为较小尺寸的
libjpeg,右边是失真更少的 Guetzli
。(详情:)

留给我们的主要工作是集成:允许我们的应用程序逐步转移到Type,而无需从头开始重写。我们在与Google的构建系统集成时非常谨慎,我们采用了渐进式编译,这对大型应用程序至关重要;而且一个模块中的变更不会影响使用了该模块的API,也不会导致下游模块需要重新编译。

 

我们与Closure类型/模块系统的集成意味着ES6
Type模块可以导入Google模块系统中的模块,而且保留了(大部分)类型信息。一家公司成功地使用了我们发布的工具,自动将其整个代码库进行了转换,同时保留他们压缩后的输出。

10、k/v数据库 Leveldb  ★Star 9799

现在Google内部,各个地方都或多或少地使用了Type;如果您使用Google的产品,那么意味着你已经与一些Type代码打过交道了。Type本身就是一系列有趣的折衷方案,它将静态类型的编程语言与自由转换的Java生态系统进行了平衡。

Leveldb是一个google实现的非常高效的kv数据库,目前的版本1.2能够支持billion级别的数据量了。
在这个数量级别下还有着非常高的性能,主要归功于它的良好的设计。特别是LSM算法。(详情:)

我们工程师也会这么做:我们也会做出有趣的妥协,试图平衡不同的问题。我希望将来可以写更多关于多年来发现的一些有趣的小事。正如刚开始使用Type时我写下的这篇文章一样(

 

style=”font-size: 16px;”>原文:

作者:Evan
Martin,Google的软件工程师。

译者:弯月,责编:胡巍巍 class=”backword”>返回搜狐,查看更多

11、自动化网络审查工具 Lighthouse  ★Star 9400

责任编辑:

Lighthouse 是一个开源的自动化工具,用于改进网络应用的质量。
可以将其作为一个 Chrome 扩展程序运行,或从命令行运行。 当为 Lighthouse
提供一个要审查的网址,它将针对此页面运行一连串的测试,然后生成一个有关页面性能的报告。可以参考失败的测试,看看可以采取哪些措施来改进应用。(详情:)

 

12、Gson  ★Star 9261

Gson 是 Google 提供的用来在 Java 对象和 JSON 数据之间进行映射的 Java
类库。可以将一个 JSON 字符串转成一个 Java
对象,或者反过来。(详情:)

 

13、最小系统加载工具 systemjs  ★Star 8356

systemjs
是一个最小系统加载工具,用来创建插件来处理可替代的场景加载过程,包括加载
CSS 场景和图片,主要运行在浏览器和 NodeJS 中。它是 ES6
浏览器加载程序的的扩展,将应用在本地浏览器中。通常创建的插件名称是模块本身,要是没有特意指定用途,则默认插件名是模块的扩展名称。(详情:)

 

14、序列化库 FlatBuffers  ★Star 7991

FlatBuffers 是一个 Java
的序列化库,用于游戏和其他内存受限的应用。FlatBuffers
可以让你直接访问序列化后的数据,无需解压并进行解析的过程。同时提供很强的向前和向后兼容性。FlatBuffers
支持 C++ 和 Java
语言,无需依赖第三方库支持。(详情:)

 

15、Xi 文本编辑器 Xi Editor  ★Star 8000

Xi Editor 是 Google 开源的一款用 Rust 语言编写的文本编辑器,最初是为 Mac
OS X 构建的,使用 Cocoa
作为用户界面,已有计划适配其它平台。所有编辑操作都可以在 16ms
之内提交并处理。文本绘制使用最好的技术(如 Mac 上的 Core Text,Windows
上的 DirectWrite 等),并完全支持
Unicode。(详情:)

 

16、Grumpy  ★Star 7760

Grumpy 是一个 Python  to Go 源代码翻译编译器和运行时,旨在替代 CPython
2.7。 关键的区别是它将 Python 源代码编译为 Go
源代码,然后将其编译为本机代码,而不是字节码。这意味着 Grumpy 没有
VM。编译的 Go 源代码是对 Grumpy 运行时的一系列调用,Go 库服务与 Python C
API 类似的目的(尽管不直接支持 C
API)。(详情:)

 

17、Javascript 编译器 Traceur  ★Star 7300

Traceur 是一个来自 Google 的 Javascript
编译器,通过它可以体验一些很新并且有趣的 Javascript
语言特性,这些多数是还没有被当前浏览器实现的 ECMAScript
标准或草案,比如:数组比较、类、模块、迭代器、方法参数默认值、Promise等。(详情:)

 

18、媒体播放器 ExoPlayer  ★Star 7152

太阳娱乐 9

ExoPlayer 是 Android 上一个应用级的媒体播放器。它为 Android MediaPlayer
的 API 在播放本地或在线的视频与音频上提供了一个候选。ExoPlayer 支持一些
Android MediaPlayer API 无法提供的特性,包括 DASH 和 SmoothStreaming
自适应回放,持久的高速缓存和自定义渲染器。不像 MediaPlayer
API,EXOPlayer 很容易定制和扩展,而且它可以通过 Play Store
更新升级。(详情:)

 

19、代码构建工具Bazel  ★Star 6641

Bazel 是 Google 的一款可再生的代码构建工具。它主要是用于构建 Google
的软件,处理出现在谷歌的开发环境的构建问题,比如说:大规模数据构建问题,共享代码库问题,从源代码构建的软件的相关问题。支持多种语言并且跨平台,还支持自动化测试和部署、具有再现性(Reproducibility)和规模化等特征。(详情:)

 

20、创作艺术和谱写曲子的机器智能 magenta  ★Star 6563

Google Brain团队的一组研究人员发布了一个项目Project
Magenta,其主要目标是利用机器学习创作艺术和谱写曲子。Project
Magenta使用了
TensorFlow系统,研究人员在GitHub上开源了他们的模型和工具。(详情:)

 

21、自动生成命令行界面的内容库 Python Fire  ★Star 6500

Python Fire 是 Google 开源的一个可从任何 Python
代码自动生成命令行接口(CLI)的库。Python Fire 是一种在 Python 中创建
CLI 的简单方法;是开发和调试 Python 代码的有用工具;能够使 Bash 和
Python
之间的转换更为容易;并且通过使用你需要导入和创建的模块和变量来设置
REPL,使得使用 Python REPL 更容易

(详情:)

 

22、软硬件框架AnyPixel.js  ★Star 5906

太阳娱乐 10

AnyPixel.js 是 Google
开源的一个软件和硬件框架,可以用来构建各种由“像素”构成的展示,每个像素可以是任何一种可交互的实体对象,如
LED
灯、气球等。(详情:)

 

23、物联网工具Physical Web  ★Star 5899

太阳娱乐 11

Physical Web 是由 Chrome 团队主导的一个项目, 意在用 URL 连接世界,
方便用户接受数据。在Web世界中,各种URL可以说是链接的基础,也是去中心化的,所以“The
Physical
Web”要做的就是让每个智能设备用URL来标识自己,然后用户按照自己的需要通过URL和设备进行交互。这样一来,你使用智能设备的体验就和在网站上使
用各种超链接差不多了。(详情:)

 

24、Docker 容器性能分析工具cAdvisorc  ★Star 5853

Advisor 是谷歌公司用来分析运行中的 Docker
容器的资源占用以及性能特性的工具。cAdvisor
是一个运行中的守护进程用来收集、聚合、处理和导出运行容器相关的信息,每个容器保持独立的参数、历史资源使用情况和完整的资源使用数据。当前支持
lmctfy 容器和 Docker
容器。(详情:)

 

25、C++单元测试工具  ★Star 5755

Google的开源C++单元测试框架Google Test,简称gtest
是一个非常的不错单元测试框架。支持跨平台以及包括 Windows CE 和 Symbian
在内的一些手机操作系统。(详情:)

 

26、IndexedDB 关系查询引擎 lovefield  ★Star 5532

lovefield 是建立在 IndexedDB 上的关系查询引擎。它提供了类似 SQL
的语法,并且可以跨浏览器工作(目前支持 Chrome 37 及以上版本,Firefox 31
及以上版本,IE 10
及以上版本)。(详情:)

 

27、 Java 生成器源代码集合 Auto  ★Star 5295

Auto 是 Java 生成器源代码集合,Java
有许多机械、重复、未经测试的代码,而且有时会出现一些微妙的 Bug 。Auto
项目是自动执行这些类型的任务的代码生成器的集合,他们可以无 Bug
创建你要编写的代码。(详情:)

 

28、Python 代码格式化的工具  ★Star 5197

YAPF 是 Google 开发的一个用来格式化 Python
代码的工具。(详情:)

 

29、基于 TensorFlow 的神经网络库 Sonnet  ★Star 5000

 

太阳娱乐 12

 

Sonnet
库使用面向对象的方法,允许创建定义一些前向传导计算的模块。模块用一些输入
Tensor 调用,添加操作到图里并返回输出
Tensor。其中一种设计选择是通过在随后调用相同的模块时自动重用变量来确保变量分享被透明化处理。
该库兼容 Linux/Mac OS X 和 Python 2.7。TensorFlow 的版本必须至少为
1.0.1。Sonnet 支持 TensorFlow 的 virtualenv 安装模式,以及 nativ pip
安装。(详情:)

 

30、无损压缩算法Brotli  ★Star 4822

Brotli 是一个通用目的的无损压缩算法,它通过用变种的 LZ77 算法,Huffman
编码和二阶文本建模进行数据压缩,是一种压缩比很高的压缩方法。在压缩速度上跟
Deflate
差不多,但是提供了更密集的压缩。(详情:)

 

31、负载均衡系统 Seesaw  ★Star 4286

Seesaw 是 Google 开源的一个基于 Linux 的负载均衡系统。Seesaw
包含基本的负载均衡特性,同时支持一些高级的功能,诸如:anycast, Direct
Server Return (DSR), 支持多个 VLANs
和集中式配置。同时其设计的宗旨是易于维护。(详情:)

 

32、Gumbo  ★Star 4060

Gumbo 是 Google
的一款用C语言实现的HTML5解析库,无需任何外部依赖。(详情:)

 

33、GXUI  ★Star 3803

GXUI 是 Google 出品的一个跨平台 GO 语言的 UI
框架。(详情:)

 

34、iOS UI 测试自动化框架 EarlGrey  ★Star 3721

遵从开源Apache授权的EarlGrey,由Objective-C编写而成。Google也确实用的它来测试自家的iOS
app。EarlGrey可支持和模拟回溯至iOS
8的设备,有关该工具的详细文档请戳这里。除了EarlGrey,其它iOS
UI测试自动化框架还包括Calabash和Sauce
Labs的Appium。(详情:)

 

35、Blockly  ★Star 3520

Blockly 是一个基于 Web 的可视化编程工具,只需要拖动几个图形就可以编程,
完全不需要打字. 根据项目FAQ介绍,
这个新语言的主要目的是为web应用提供宏(或脚本编 程)的支持.
可以把生成的脚本输出成javascript, python
等.已经有几个利用Blockly的demo.(详情:)

 

36、go-github  ★Star 2707

go-github  是 Google 对 Github 的开放 API 进行 Go
语言封装的一个项目。(详情:)

 

37、抓取bug工具 error-prone   ★Star 2708

error-prone 用来抓取 Java
编译时的错误。通常使用编译器只能做静态类型的检查。但使用此工具,能够进行编译器的类型分析,能够检测并抓取到编译过程中的
Bug,能够大大的节约开发者的时间。(详情:)

 

38、ROS 系统支持的 SLAM 库 Cartographer   ★Star 2700

Cartographer,是Google开源的一个ROS系统支持的2D和3D SLAM(simultaneous
localization and mapping)库。SLAM
算法结合来自多个传感器(比如,LIDAR、IMU 和
摄像头)的数据,同步计算传感器的位置并绘制传感器周围的环境。在产业界和学术界常见的传感器配置上,Cartographer
能实时建立全局一致的地图。(详情:)

 

39、安卓电量分析工具 Battery Historian   ★Star 2579

太阳娱乐 13

 

Battery Historian 是一个通过分析安卓 “bugreport”
进程文件来统计电量消费情况。它允许应用程序开发人员在时间线上可视化系统和应用程序级事件,具有平移和缩放功能,在设备上完全充电后可以轻松查看各种汇总统计信息,并能选择应用程序,检查影响应用程序特定电池的指标。
它还允许两个错误报告的A /
B比较,突出显示关键电池相关指标的差异。(详情:)

 

40、通用编码器&解码器框架 seq2seq  ★Star 2433

太阳娱乐 14

 

seq2seq 是 Google 开源的一款用于 TensorFlow
的通用编码器&解码器框架(encoder-decoder
framework),可用于机器翻译、文本摘要、会话建模、图像描述等。(详情:)

 

41、Web应用 Tracing Framework   ★Star 2371

太阳娱乐 15

 

Tracing Framework 是一套库、工具,用于跟踪和调查复杂的 Web
应用。它就可以帮你发现代码的性能问题,并且帮你打造十分流畅的 60 FPS Web
应用。它目前只能用于特定的应用场合,并不是为应用于所有场景而设计,如果你在使用过程中遇到了问题,请呈递你的
Bug。(详情:)

 

42、深度概率编程语言 Edward   ★Star 2395

Edward 是一个用于概率建模、推理和评估的 Python
库。它是一个用于快速实验和研究概率模型的测试平台,其涵盖的模型范围从在小数据集上的经典层次模型到在大数据集上的复杂深度概率模型。Edward
融合了以下三个领域:贝叶斯统计学和机器学习、深度学习、概率编程。(详情:)

 

43、JavaScript 库 Closure Library   ★Star 2257

Closure Library 是一个强大的 JavaScript 库,用于复杂的大规模的 Web
应用。它被许多 Google Web 应用使用,比如 Gmail 和 Google
Docs。(详情:)

 

44、大型微服务系统管理工具 Istio   ★Star 2291

Istio 是一个由谷歌、IBM 与 Lyft
共同开发的开源项目,旨在提供一种统一化的微服务连接、安全保障、管理与监控方式。Istio
项目能够为微服务架构提供流量管理机制,同时亦为其它增值功能(包括安全性、监控、路由、连接管理与策略等)创造了基础。这款软件利用久经考验的
Lyft Envoy
代理进行构建,可在无需对应用程序代码作出任何发动的前提下实现可视性与控制能力。(详情:)

 

45、远程现场取证系统 GRR   ★Star 2100

GRR 是 Google 开发的远程现场事件取证系统。GRR
由一个代理(客户端)和服务器端组成,客户端可以部署在一个任务系统中,服务器可以管理客户端,跟客户端进行交互。(详情:)

 

46、Android 的悬浮操作栏 Hover   ★Star 2053

Hover 是一个用于 Android 的悬浮操作栏。该菜单栏可以作为一个 service
启动,从而跨进程使用,悬浮在桌面或者其他应用程序的前面,当然,这里需要申请权限。
Hover 仍处在开发阶段,还有很多代码清理工作需要做,也就是说,Hover
现在仅仅处于可用状态。(详情:)

 

47、模块化深度学习系统 Tensor2Tensor   ★Star 2000

Tensor2Tensor 是一个模块化和可扩展的库和二进制文件,
 能够帮助人们为各种机器学习程序创建最先进的模型,可应用于多个领域,如翻译、语法分析、图像信息描述等,大大提高了研究和开发的速度。(详情:)

 

48、Google 模糊测试服务 OSS-Fuzz   ★Star 1781

OSS-Fuzz
能够针对开源软件进行持续的模糊测试,它的目的是利用更新的模糊测试技术与可拓展的分布式执行相结合,提高一般软件基础架构的安全性与稳定性。OSS-Fuzz
结合了多种模糊测试技术/漏洞捕捉技术(即原来的libfuzzer)与清洗技术(即原来的
AddressSanitizer),并且通过 ClusterFuzz
为大规模可分布式执行提供了测试环境。(详情:)

 

49、优化搜索工具or-tools   ★Star 1771

or-tools 是 Google 的优化搜索工具。Google
优化工具包括:约束编程解决方案;为线性规划和混合整数规划解决方案提供简单统一的接口,包括
CBC, CLP, GLOP, GLPK, Gurobi, SCIP, 和 Sulum;背包算法;图算法
(最短路径,线性和分配,最小费用流,最大流)(详情:)

 

50、加密库安全测试套件 Wycheproof   ★Star 1722

Wycheproof
是谷歌开源的加密库测试项目,它包含一系列安全测试,用来检测加密库(cryptographic
libraries)软件是否存在已知的攻击漏洞。(详情:)

 

51、Common Lisp Koans   ★Star 1695

Common Lisp Koans(lisp-koans)是一个语言学习练习程序,类似 ruby
koans,python koans 等等。Common Lisp Koans 主要是帮助学习一些 lisp
规范特性和改进,可以学习到大量的 Common Lisp
语言特性。(详情:)

 

52、 3D 图形开源压缩库 Draco   ★Star 1600

Draco 是一种库,用于压缩和解压缩 3D 几何网格(geometric
mesh)和点云(point cloud)。换句话说,它显著缩小了 3D
图形文件的大小,同时对 3D
图形的观看者来说又根本不严重影响视觉效果。它还旨在改善 3D
图形的压缩和传输。Draco 是作为 C++ 源代码发布的,可以用来压缩 3D
图形,另外还发布了处理编码数据的 C++ 和 Javascript
解码器。(详情:)

 

 

53、 JavaScript 库 Shaka Player   ★Star 1354

Shaka Player 它实现了 DASH 客户端的功能。它的播放功能基于 HTML5
video、MediaSource Extensions,和 Encrypted Media Extensions 。一般的
DASH
客户端功能很难实现。(详情:)

 

54、TensorFlow 深度学习库 Fold   ★Star 1192

TensorFlow Fold 是用于创建使用结构化数据的 TensorFlow
模型库,其中计算图的结构取决于输入数据的结构。 TensorFlow Fold
使得处理不同数据尺寸和结构的深度学习模型更容易实现。(详情:)

 

55、Google 地球企业版 Earth Enterprise   ★Star 1161

Earth Enterprise 是 Google Earth Enterprise
的开源版本,是一个提供构建和托管自定义 3D 地球模型和 2D
地图的地理空间应用,旨在让社区继续改进和推进该项目。(详情:)

 

 

56、图像差异比较库 Butteraugli   ★Star 1100

Butteraugli
是用来评判两个图像之间的相似度。通过识别图像之间一些最受关注的差异点并给出相似度分值。这个项目的一个主要动机是对差异受体的不同颜色的位置和密度的统计,特别是蓝色的低密度锥窝。另一个动机来自于更准确的神经节细胞建模,特别是抑制频率空间。目前该项目只提供了
C++ 接口。(详情:)

 

57、Go 语言实现的网络协协议栈 Netstack   ★Star 1016

Netstack,使用 Go 语言编写的网络协议栈。通过安装 tun_tcp_echo demo
尝试在 Linux 上使用 。(详情:)

 

58、钢琴二重奏 AI aiexperiments-ai-duet   ★Star 883

“钢琴二重奏”的 A.I. Duet。该项目会在你弹出了几个音符之后,通过 AI
自动计算来帮你“补完”旋律的重奏部分。A.I. Duet
运用了人工智能技术,通晓音符的“编码规则”。(详情:)

 

59、端到端加密系统 E2EMail   ★Star 704

E2EMail
是一个实验性质的端到端加密系统。E2EMail由Google开发,内置JavaScript内部开发的JavaScript加密库。它提供了一种通过Chrome扩展程序将OpenPGP集成到Gmail中的方法。消息的明文单独保留在客户端上。(详情:)

 

喜欢就收藏吧~

 

admin

网站地图xml地图