宝马娱乐在线城-宝马娱乐在线

来自 世界互联 2019-10-01 17:12 的文章
当前位置: 宝马娱乐在线城 > 世界互联 > 正文

工程师亲述在 Google 从事 TypeScript 工作的独家体会

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

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

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

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

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

图片 1

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

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

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

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

我们工程师也会这么做:我们也会做出有趣的妥协,试图平衡不同的问题。我希望将来可以写更多关于多年来发现的一些有趣的小事。正如刚开始使用Type时我写下的这篇文章一样(http://neugierig.org/software/blog/2016/02/revisiting-type.html),我认为Type在设计领域内做出了很好的权衡。

Clojure

我们应该折中

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

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

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

style="font-size: 16px;">原文:http://neugierig.org/software/blog/2018/09/type-at-google.html

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Java出乎意料地流行了起来

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

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

总结

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

图片 2

图片 3

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

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

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

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

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

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

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

本文由宝马娱乐在线城发布于世界互联,转载请注明出处:工程师亲述在 Google 从事 TypeScript 工作的独家体会

关键词: