Go 语言的崛起?

by admin on 2020年1月14日

我们这个世界真的需要另外一种C语言风格的编程语言吗?很显然,谷歌很早就这么认为了,在2009年,它借用雷蒙斯乐队的歌“Hey!Ho!Let’s
Go”,正式推出了Go语言。现在Go语言开发团队已经开发出了这种语言的第一个稳定版本,他们称之为Go
1,他们将这种语言推向世界,希望人们用这种语言“开发出健壮的软件产品和作品。”那么,现在人们对这种语言的使用情况又是如何呢?

根据最新出炉的《2019年1月RedMonk编程语言排行榜》,JavaScript分支TypeScript和Java同胞Kotlin两款编程语言持续受到开发者的青睐,排名仍在继续上升。根据两家全球最大的在线开发者网站GitHub和Stack
Overflow综合的编程语言排行,RedMonk表示这个排行榜目的是未来一年开发者喜欢使用的语言。

姓名:牛康  学号:17101223416

让我们先回顾一下,什么是Go语言,是什么促使谷歌决定推出这样一种语言?按Go语言的“常见问题”
里的说法,自从那个“重要的系统级编程语言”诞生距今已超过十几年了,这段时间计算机世界已经发生了很大的变化。谷歌的才人们对目前现有的各种语言深感失
望,他们必须要在“快速的编译、快速的执行或简单编程”之间做出选择。“没有一种主流的编程语言,例如C,C++,Java,Python等,能提供谷歌
人想要的全部特征。

图片 1

转载自:

于是,谷歌的工程师从2007年起开始开发Go语言。“常见问题”里这样说:Go语言在基本语法上”基本上属于C语言家族“,但它从Pascal语
系吸收了”大量的理念“,还有一些思想是来自其它的语言。但对于程序员来说,应该把它当成一种全新的语言,一种以”让程序员更有效率,让编程更有效率,至
少是让我们更有效率并且使编程更有乐趣“的理念为设计目标的编程语言。

TypeScript

【嵌牛导读】:Java 的创造者们在一开始就把Java 语言和Java 虚拟机分开,
现在看来是个非常明智的决定。Java虚拟机定义了一个”软CPU”,   和Intel 的x86
的指令集一样,
这个软CPU也有一套自己的指令,这就意味者对于任意一门编程语言,
只要你能编译成Java 的字节码指令,或者在运行时动态的生成字节码指令,
 就可以运行在Java虚拟机中。

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来开发。

TypeScript是一种由微软开发的自由和开源的编程语言。它是JavaScript的一个严格超集,并添加了可选的静态类型和基于类的面向对象编程。C#的首席架构师以及Delphi和Turbo
Pascal的创始人安德斯·海尔斯伯格参与了TypeScript的开发。

【嵌牛鼻子】:Jython和JRuby、Groovy、Scala 和 Clojure

关于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语言的垃圾收集系统以及脚本语言和编译型语言之间比较的评论。

图片 2

【嵌牛提问】:Java 虚拟机发展了这么多年, 已经非常的成熟和稳定,
是一个很有吸引力的平台。 除了Java 之外还有不少编程语言慕名而来,
这些语言是怎样的存在呢?

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语言开发过什么项目吗?给我们说说你对Go语言的感觉,它是否是一个有未来的语言?

[本文英文原文链接:Google’s Go Programming Language Grows Up: Now
What?
]

 

本文转载自: 外刊IT评论

尽管在2018年的增长势头有所放缓,但它依然是上升最快的攀登者之一,上升4个排名至12名,非常接近于前十。RedMonk首席分析师兼联合创始人Stephen
O’Grady写道:“这款编程语言上升如此快的原因固然有JavaScript的受欢迎程度,以及可选的静态输入检查等安全功能有关。但仅凭这些功能本身不足以如此快速推动该语言,这主要归功于它不断被各种项目广泛接受,这也解释了为何TypeScript能够保持增长趋势。”

【嵌牛正文】:

Kotlin

一、Jython和JRuby

虽然TypeScript目前的位置已经很高,但是增长速度没有Kotlin那么快。作为Java的现代化替代语言,Kotlin拥有易于学习和使用的特点。201年,当Google将其指定为构建Android应用程序的官方支持语言时,它获得了巨大的推动。Netflix高级软件工程师将其描述为“兼具了其他编程语言的一些优势”并“增强了Java的互操作性”,因为它能够在Java虚拟机上运行。

从这两位名字开头的字母 “J” 就可以看出来这两个语言和Java 的血缘关系。

图片 3

没错,他们就是可以运行在Java 虚拟机上的Python 和 Ruby 。
 不同于用C语言写的CPython和 CRuby,  这两者需要一个JVM才能运行。

需要知道的是在2019年的榜单中,面向JVM的编程语言中只有Kotlin越来越受欢迎,它上升了8个排名,而其他JVM编程语言均有不同程度的下降:Scala下降了1个排名,Clojure和Groovy下降了3个排名。

既然是运行在JVM上的语言, 自然要能调用Java 类库,
要不然放着这么多优质Java 资源不用多可惜!

Julia和Rust

下面就是一个在JRuby 脚本中调用 Java Swing的例子:

除了这些快速爬升的语言之外,O’Grady在报告中还表示Julia和Rust这两款编程语言非常值得关注。

图片 4

Julia上升2个排名,上升至第34位。不过O’Grady认为它拥有和TypeScript相同的增长潜质。Julia是一种高级通用动态编程语言,它最初是为了满足高性能数值分析和计算科学的需要而设计的,不需要分别编译速度快,
也可用于客户端和服务器的Web用途、低级系统编程或用作规约语言。
Julia设计的独特之处包括,参数多态的类型系统,完全动态语言中的类型,以及它多分派的核心编程范型。

图片 5

图片 6

如果你思考的深入一些,就会有这么一个问题 : 由于Python 和ruby
都是脚本语言, 都是解释执行的, 没有编译的过程,  那Jython和JRuby
在解释的过程中,肯定得生成Java 字节码,
要不然JVM就会把他们拒之门外。那字节码是怎么在运行中生成的?

而Rust是一个由Mozilla主导开发的通用、编译型编程语言。它的设计准则为“安全,并发,实用”,支持函数式,并发式,过程式以及面向对象的编程风格。目前在榜单上排行第23位。

答案就是ASM , 一个可以动态生成字节码的Java 类库。

图片 7

我个人觉得Jyhton和JRuby能在JVM上运行起来,调用Java 类库,
是个很好的卖点, 但是却难以大规模流行, 原因可能也是类库造成的。

排行前20名的编程语言为

最早的时候学习C语言, 由于没有良好的类库,就是对一个字符串操作都很麻烦,
那些更加高层的语言例如Java, Python, Ruby 就弥补了这个缺陷,
语言自带强大的类库, 再加上社区的贡献, 用起来非常顺手。 说个题外话,
这也直接导致了很多初学者的疑问: 语言都封装好了, 我还学数据结构干嘛?!

  1. JavaScript

  2. Java

  3. Python

  4. PHP

  5. C#

  6. C++

  7. CSS

  8. Ruby

  9. C

  10. Objective-C

  11. Swift

  12. TypeScript

  13. Scala

  14. Shell

  15. Go

  16. R

  17. PowerShell

  18. Perl

  19. Haskell

  20. Kotlin

Python, Ruby 社区已经积累了大量的、好用的库, 他们才是Python,
Ruby一派繁荣的主要原因,  但是这些库都是Python, Ruby写的,
也有不少是C语言写的, 这些海量的类库全部移植到Java 上绝非易事,
我们也不能要求类库的作者同时提供Java 版本 。

而Java 现成的类库总是感觉和Python , Ruby 有一点Gap,
 语言设计的思维不同, 虽然可以集成互操作, 但还是感觉别扭。

也许Jython和JRbuy 只是小范围内或者特定场合使用吧。

二、Groovy

Groovy 并不像Jython, JRuby, 它并不是一个现有语言在JVM上的移植,
而是一个全新设计的语言。

Groovy被定义为JVM上的动态脚本语言, 适合编写脚本, 测试用例和
领域特定语言(DSL)

用Groovy 写的软件中有两个比较知名:

  1.  Gradle

一个风头正劲的Build 工具, 得益于Groovy 简洁的语法,
可以用“Build领域特定的语言”来描述一个软件的构建过程,   写出的Build脚本
和Ant, Maven 的xml 脚本 相比,读起来更赏心悦目。
在Web项目,Android项目的 Build过程中有大量使用。

下面是一个例子, 大家可以感受一下和Maven 的区别:

图片 8

  1. Grail

这应该是模仿Ruby on Rail的一个项目,热度已经过去, 估计使用的人不多了。

记得在2008年IBM的毛新生带领着团队搞了一个Project Zero出来,
基于Groovy和PHP,  目标是快速Web项目开发, 喧嚣了一阵也是归于沉寂。

在JVM上, Java 是毋庸置疑的老大, Spring 是一座难以撼动的大山,
所以Groovy 最好还是把注意力集中到 小工具,测试 以及Build上,
这是它能最大发挥能量的地方。

三、Scala 和 Clojure

Scala 第一次进入我的视线是一则新闻: Twitter 决定把核心应用从Ruby on
Rails 迁移到Scala,作为曾经的Ruby拥趸, 看到这个消息是让人沮丧的 :
Twitter 可是Ruby on Rails 经常拿来宣传的一个明星系统了,   现在Twitter
竟然想转到Scala , Scala是什么鬼?  怎么可能获得Twitter 工程师的青睐?

后来看了一下,Scala是一个很有趣的语言,
在他的官网上写着“Object-Oriented Meets Functional” ,
面向对象遇上了函数式编程 !
也就是说一门语言混合了两种编程范型。
不仅如此,它还是一个可以运行在Java 虚拟机上的语言, JVM的成熟和稳定,
可能也是Twitter 工程师选择Scala的重要原因。

有人说了,我面向对象还没学完呢, 还学函数式编程?  
 我推荐你看看《黑客与画家》一书, 看完以后十有八九会被Paual
自身成功的案例和 富有煽动性的语言给鼓动起来,
 热血沸腾的去尝试函数式编程语言Lisp(我就是如此)  :-)

但是我相信大部分人都只是浅尝辄止, 因为纯函数式编程和我们日常使用的C,
Java, Python 这些命令式编程语言大相径庭, 需要巨大的思维转变,
最好是完全忘掉之前所学的命令式编程才行, 所以学习曲线极为陡峭,
把很多人都吓回去了。

现在好了, Scala即支持OO, 又支持Functional ,
你可以在一个相对舒服的环境渐渐的去尝试函数式编程的奥妙,确实是不错的选择。

如果你非要学习一个纯粹的函数式编程语言, 可以考虑Clojure
,这是一个运行在JVM中的lisp方言, 同样可以和Java 类库互操作。

四、总结

说了这么多, 如果让我为一个大型项目选择语言, 我极有可能还是要选择Java,
 对于一个大型项目来说,
代码的可读性、可维护性是非常重要的,我之前读一些动态语言的代码,
看到一个变量而不知道它的类型,没法查看它的行为,
 这是非常令人抓狂的体验。

而Java 这种静态类型的语言,IDE的感知能力, 安全重构的能力是极为重要的,
让人觉得安全,可控,适合大团队协作。

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图