Welcome to Pandora's Box(Why)

Keep It Simple, Stupid!

Fork me on GitHub

初识Go-Erlang-Dart

| Comments

Preface

今天Beijing GDG的活动是编程语言沙龙,一口气了解了3种对我来说比较陌生的编程语言(Go, Erlang和Dart),感觉心情比较舒爽,感谢GDG的分享(@许士伟,@连城,@韩国恺,@各位组织者)。趁着脑子还有点热,写点东西谈谈自己的想法吧:–)

Go

跟Unix很有缘分,因为打造Go语言的那些大牛曾经参与过Unix操作系统的开发,C语言在Bell实验室内部的时候,他们也是最早的受众用户吧;后来,Plan 9操作系统的开发,他们也在其列,可惜Plan 9没火起来(在Unix编程艺术里面得知,Unix有一个低迷期,不知道是不是跟当时的大环境有关系)。然后,Unix中的精髓,在Go语言中体现为连接和组合,本质上还是管道和文本话协议吧,按照我的理解。

讲师@许士伟,是七牛云存储的CEO,他们的产品是用Go打造的,在生产环境下经受得起考验,是对Go本身的最佳证明了。本来编程语言的Topic就不太好讲,许老师没有把重点放在实战上,而是就哲学层面展开叙述,主要讨论“连接和组合”是如何在Go中体现的,以及为何说Go是多种编程范式的。听了这个演讲,并不能马上上手Go,但是对于引发我们对编程语言设计哲学的思考是很有好处的。Go在刚推出的时候,主打自己是System Programming级别的,现在貌似是主打自己是作为通用语言设计的,也许是感觉自己的设计理念优秀吧,我个人研究不多,不敢妄加评论。目前Go的GC有停顿的现象,被某些反对者所诟病,不过,相信其GC会在后续的版本中得以增强!

等把《Unix编程艺术》读完了,再回过头来看看Go的设计,应该启发更大:–)

Erlang

很大程度上,今天是冲着Erlang去的,这学期的《多处理器系统编程》听得云里雾里,想看看有实际工程经验的人对应对“并发”会如何阐述。而今天不妄此行,讲师@连城显然对于Erlang有比较多的研究,从Erlang的历史,到核心理念和设计,以及OTP,涉及到很多有意思的东西。而从苛刻的电信生产环境中催生的Erlang,容错性和并发能力都是超一流的,其核心,在我看来是Isolate的理念以及消息传递的机制。故障隔离可以保证整个系统不会由于局部的罢工而停止运转,有效的故障隔离和修复,把复杂的系统分离开来,上层的hypervisor只执行简单的逻辑,以最大程度保证其逻辑的正确性,而实际的worker进程受到hypervisor的管辖,执行真正的处理任务,出了故障可以被hypervisor隔离或者修复(比如进程状态重置,又想起了七龙珠里面的那个boss了,连城的那个比喻很贴切)。讲到这里的时候,我很自然地联想到了Soalris的FMA(Fault Manager Architecutre,S10引入的新特性),其核心也是故障隔离以及自己修复(通过更换FRU或者重启Service,这里会跟SMF发生交互)。进程的通信不是简单的“共享内存”,而是拷贝式的消息传递,这里理解得不是很深入,就不多说了。

非SMP VM,64 bit,16GB RAM可以轻松跑700万进程,Erlang天然的并发处理能力可想而知,而这都是源于其优良的设计吧!之后讲到了Functional Programming的东西,简单说了Erlang对函数式编程的支持;后来的OTP,回忆不起来太多内容了,我的理解是,这是一个通用的,很nb的并行编程框架!忘了GC了,相对于JVM和Go的VM,Erlang的VM的GC实现算法更加高效,不过没怎么听懂…

时间关系,跳过了Q&A环节,只能会后去问我的问题,“Erlang的设计在多处理器以及多核方面是如何考虑的?”。在Erlang出现的年代,多处理器还不太流行,因此对多处理器和多核的支持应该最近才添加进去。容易想到,有Erlang VM在中间,进程的调度全权尤其搞定,因此对于多处理器和多核的支持应该也是在VM那里下文章吧,具体不是很清楚,如果也是Isolate的原则+拷贝式消息传递,是不是Lockfree的呢?

合影的时候,一个豆瓣的开发者(做平台的)简单给我讲了下Erlang对于多处理器和多核的支持,后来借机,问了些豆瓣的信息:–) 对那位帅哥说声感谢:–)

Dart

2009年才对外公布的语言,Chrome V8团队的新作,新的Dart VM比V8快了50%,而据Dart VM的作者说,Dart的速度应该是JavaScript的两倍(如果不准确,请韩老师指正)。

Dart应该是提供了Web开发的整个Stack了,从编程语言,到运行环境VM,调试环境Dartium(Chrome+Dart VM),再到Dart Editor(IDE),一站式服务了:–) 不仅如此,还提供了dart2js,在于不支持Dart的环境中,可以编译成JavaScript运行,而且提供Source Map。感觉加以时日,Dart应该会超越JavaScript,受到web开发者的追捧!

韩老师介绍了Dart的很多feature,对OO的支持,数据和行为的一致性(不知道这样描述是否准确),getter/setter,语法本身的易上手(尽量采用大家已经熟悉的语法规则)。时间原因,韩老师讲的比较快,现在回忆不了太多了,等拿到了slides,自己再消化一下:–)

Conclusion

总体来讲,今天的编程语言沙龙让自己受益颇多,在C/C++,Java之外,大大拓展了自己的视野,也再一次坚定了自己尽快学习一门Functional Programming Language的决心!

再次感谢GDG的精彩活动,期待下一次技术分享会!自己作为一个学生,要努力接触并吸收新知识,有一天能够站在GDG的讲台上,给大家带来有趣有用的分享:-)

Comments