BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Google试验新语言——Go

| 作者 Abel Avram 关注 10 他的粉丝 ,译者 侯伯薇 关注 0 他的粉丝 发布于 2009年11月13日. 估计阅读时间: 3 分钟 | QCon上海2018 关注大数据平台技术选型、搭建、系统迁移和优化的经验。

Go是Google的新语言,它是试验性的、开源的,它与C语言类似,但是添加了很多特性,像反射、垃圾回收器、动态类型、并发以及并行机制等等。

Rob Pick在Tech Talk Channel上发布了Go,他是Go语言的主要开发者之一,他说,该语言是试验性的,因为“我们并不认为它能解决所有问题,但是我们在使用它,并且认为现在是把它介绍给世界的时候了。” 该语言还在其中包含了并发构造体,它的目的是让开发者能够易于创建并行任务。据作者所说,该语言的目的包括以下几点:

  • 将静态语言的高效性和动态语言的易于编写的特性组合在一起。实际上,开发者能够选择使用静态还是动态的方式。
  • 安全。该语言是类型安全的,它只允许显式的类型转换,而不允许隐式的转换。另外,该语言不提供指针算法,并且会执行垃圾回收,因此是内存安全的。
  • 为并发和通信提供良好的支持。
  • 拥有高效、无延时的垃圾回收机制。
  • 高速编译。

该语言还有一些有趣的特性:

  • 该语言中有指针,但是没有指针算术。
  • 它拥有接口。
  • 它拥有同步通道。这些通道被用于线程间通信,它是并发的基础。Go推荐通过与其通信来共享内存,而不是通过共享的内存来通信。每次只有一个线程能够访问共享值,该值通过通道在线程之间传递。
  • Go例程(Goroutine)。这是用于并发的另一种结构。go例程只是一种拥有“go”关键字前缀的函数或者方法。一个go例程与一个线程相关联,并通过通道与其它go例程通信。
  • 并行。go例程和通道能够被用于在多个CPU上执行计算。
  • 反射(Reflection)。我们可以在所有类型、通道上实现反射。
  • 内嵌(Embedding)。这是一种简单的继承方式。

迄今为止,该语言有两种编译器。一种针对不同平台有不同的名字。6g针对64位的x86或者AMD64位平台,8g针对的是32位的x86或者AMD32位平台,而5g针对ARM平台。另一种编译器是gccgo。6g拥有标记再清除(mark-and-sweep )垃圾回收器,而gccgo没有,但是基于IBM回收器(IBM’s Recycler)的新垃圾回收器在两种编译器下都可以工作。Go语言暂时还没有图形化开发界面和调试器。

Go语言的目的之一是要拥有最快的编译器,似乎它已经达到了。6g编译器是最快的,而gccgo稍慢一些,但是能够产出更优的代码。编译器只会生成机器码,而不会为虚拟机(VM)生成字节码,并且他们说它几乎可以运行得和C代码一样快,只比类似的C代码慢10-20%。

现在go语言已经提供了很多基本功能库,但还需要很多。Godoc可以像javadoc一样从源代码生成文档。Go是基于BSD许可发行的开源项目。

资源:Go网站Rob Pike的Go语言发布仪式

阅读英文原文:Google Experiments with a New Language, Go

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

又在重复发明轮子了 by zhao edward

搞不懂,都是些java已经包含的特性,有必要再搞另外一个版本吗

Re: 又在重复发明轮子了 by wang boris

go的目标是系统级语言

Re: 又在重复发明轮子了 by 陈 实

重复发明轮子没什么不好嘛,完美的轮子是不存在滴。

Re: 又在重复发明轮子了 by yu hao

轮子没变,只不过从轨道上卸下来拿到旷野上跑。

Re: 又在重复发明轮子了 by Xu Yongrui

go的目标是系统级语言

问题是这个世界已经有D这个轮子了,从Go的特性来看,与D大同小异!

Go可能已经存在一段时间了 by Lee Jerin

他说,该语言是试验性的,因为“我们并不认为它能解决所有问题,但是我们在使用它,并且认为现在是把它介绍给世界的时候了。”
--上面说明,Go可能已经存在一段时间了,只是现在公开了而已。至于公开的动机,不好说……

很难有一种语言能够达到C语言的高度了 by Ma Karl

如题。

语言特性上和 scala比呢 by withyou gakaki

google都不知道发明多少轮子了

上次那个简化版xml不是吗
上回不也是有个新语言

来个语言超越ruby吧 从简单还有框架的革命上

Re: 语言特性上和 scala比呢 by luzhou tang

java 太笨重了。

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

9 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT