Browse » Home » Essay » Blog article: Google创造 “GO” 文明

November 15th, 2009, EGGer

Google Go Programming language

“如果想成就一个辉煌的’文明’,首先需要创造一种强大和健壮的语言”

创造出一种更加高效的方法来诠释整个物质世界,Google帝国迈出了最重要的一步。人类发展过程中总是要经历大大小小不同的变革,计算机世界更是如此,而且其变革的速度远远快过于其它任何发展中的事物。暂时无法量化这种新的编程语言会对整个行业带来的变化,但至少有一点可以肯定,”Go” 的特性将加速整个计算机工业的发展进程。或许可以让我们这一代人将更多的梦想变为现实。

高度关注Google产品的人会感悟到其简单的哲学理念 “Efficiency” ,正是秉持这样的精神,才使得我们完全可以在毫秒间搜遍整个人类文明、体验前所未有的电子邮件服务 “Gmail”或者革命性的沟通工具 “Google Wave等等

为了符合日益高效的生活节奏,Google在2009年11月份正式对外宣布 带给这个世界另外一个惊喜 – “Go“。 其主要的特点是将动态语言(例如:Python)的高效开发特性与编译语言(例如:C/C++)的安全特点相结合,同时还支持当前比较热门的技术 garbage collectedconcurrent ,Google的同事们在当前的条件下正努力的创造一款近乎完美的语言。

HighLight:

  • 高效的静态类型编译语言 + 轻松灵活编程的动态语言
  • 类型安全(Type Safe)+ 内存安全(Memory Safe)
  • 较好的支持并行和线程间通讯
  • 高效和无延迟的Garbage Collection
  • 较高的编译速度

与此同时还存在一个同名的GO programming languag的,从维基百科中了解到其最早的记录时间是2003年,由两个人共同创建Francis McCabe, Keith Clark。今天暂且不去讨论这两个同名语言的争议话题(其维基百科的页面已经发出删除通知,特将以下截图作为一个纪念,目前这两个同名的语言其在Wikipedia的链接仅仅是相差一个”!”符号。)

go - Francis McCabe - Keith Clark

Go语言本质上属于C家族的分支,很大程度上仍然保留着C的特点。Google开发小组对声明语法(Declaration Syntax)上作出了较大的改进,其目的是为了实现更高效的语义分析和摒弃利用符号表(Symbol Table)解析的模式。从而更加容易开发辅助工具,例如:Debuggers、dependency analyzers(从属分析)和自动文档提取器等… ,鉴于这个原因对于C或其它分支在实现上相对难度较大。刚刚接触Go的开发者即便是有过C语言的开发经验,但依然有必要对Go的语法重新做一次完整的了解。

一直以来,系统编程语言较少提供对诸如:垃圾回收(Garbage Collection)和并行计算(Parallel computing)的支持。

Garbage Collection是一种不需要人为干预的动态内存管理机制,其可以自动清除应用程序遗留在内存中的废弃资源(有一篇详细介绍Garbage Collection历史的文章发表于 2004年第二期的《CSDN开发高手》,通过它可以简单了解Garbage Collection发展的历史)。尽管这项技术在最近一段时间内有了长足的进步,但是依然有非常多的程序员青睐于手动执行 Free 和 Delete 命令。因为他们担心这项技术会增加系统的负担,这就好比当初放弃高级语言,而执着于直接编写机器语言的虔诚教徒。Go包含了Garbage Collection技术,但Google并没有正面阐明其所采用的技术可以消减人们对于应用它所产生的负面影响,个人感觉它的秘而不宣似乎说明了Google并不完全满意当前的GC处理技术,以后将帮助大家密切留意这方面的动向。

Parallel computing是现阶段热度较高的应用技术,开发基于多核心运行环境的应用程序。目前多核心对于家用PC已经是个非常普遍的现象(Tilera最近刚刚宣布包含100个核心的Cpu)。从Go语言的这个特性上可以反映出Google对这一领域的探索的兴趣。

引用同事的一句评论“Google真的非常清楚我们的需求 ”。目前Go语言仅仅处于测试阶段,Google非常鼓励喜欢尝试新事物的开发者可以亲自体验这种新语言所带来的编程乐趣。到此已不再需要过的正面修饰,有空的时候适当的摆弄摆弄吧。下面使一些代码片段,可以让大家快速了解其真正面貌:

package main

import (
	"os";
	"flag"; // command line option parser
)

var omitNewline = flag.Bool("n", false, "don't print final newline")

const (
	Space = " ";
	Newline = "n";
)

func main()  {
	flag.Parse(); // Scans the arg list and sets up flags
	var s string = "";
	for i := 0; i < flag.NArg(); i++ {
         if i > 0 {
			s += Space
		}
		s += flag.Arg(i)
	}
	if !*omitNewline {
		s += Newline
	}
	os.Stdout.WriteString(s);
}

Tags: , , ,

Posted in Essay |

Related Posts



Leave a Reply

You must be logged in to post a comment.