首先,Erlang 诞生于于1980年代,在 Ericsson Computer Science Laboratory,虽然没有官方的说明,当时我个人感觉,Erlang的根本源于LISP,虽然语法上作了一些变化,但是语言的本质上确是不可回避的LISP风骨:函数语言,自动内存管理,原子概念,LIST/表操作,不一而足,虽然从语法上作了一些改变,摒弃了繁复的"()", 引入了
"->", ",", ";", "."
这样只是更加突出了函数的定义和使用时的方便性。 其次,为了函数语言能够在工程实践中具有实际应用,Erlang在语言层次上引入了许多辅助的功能。1)Erlang从语法层次上定义了一种引入副作用(side effect)的方法进程间消息的发送——
Pid ! Message
, 与接收 Receive
。这与 Erlang 虚拟机的轻量级进程相结合,无疑是提供了一个颇具工程价值的强悍的函数式语言;2)引入的模块(module),函数输出/输入定义(export/import),引入宏; 3)增强的 Term 匹配; 4)引入异常处理机制(try/catch),5)引入 tuple 以及 record 数据类型。 不过坦白的讲,除了第一点进程间消息的发送与接受具有些实质上的意义之外,异常及其处理机制,tuple数据类型,感觉上却有些画蛇添足之感,这些变化只是让程序设计的复杂性有所增加,并没有什么实质性的提高。
特别是异常这样的东西,很有可能是受了这些年 C++/Java语言的毒害吧,就结构化程序而言,我们还可以异常可以简化程序的正常流程,增加可读性。可是对于函数式语言除了需要多些try/catch这样的另类语法,我们又得到了什么呢?赫赫,只能是仁者见仁智者见智了!
还有,Erlang/OTP 为程序开发人员提供了一个相当完善的,可以李可使用的程序库 OTP。在当前的这个软件开发时代。一个高质量,高易用性的 library 对于语言的发展有着非常大的推动作用,Java语言,也正是凭借着功能丰富,充分文档化的Java API在当今程序设计领域占据着重要地位的。对于一个电信设备专用语言而言,OTP已经为我们提供了,SNMP Agent, CORBA, CORBA IDL, CORBA Event, 数据库。确实极大的方便了设备开发人员的工作。
再就是 Erlang 的 soft real-time 特性。 以及 Erlang 的虚拟机。基本上可以认为Erlang编译出来的程序式平台无关的, Erlang设计的程序可以运行在Linux/Windows/Solaris平台。 这样就可以构造 Linux + Erlang 德超强组合。也算是开拓了电信设备设计的一种新思路吧!
Ericsson 会把这样的东西放出来还真是很有意思的,就如同在 Erlang 的 FAQ 中写的
10.4. Why is Ericsson giving away Erlang?
(The following is my personal impression. I don't speak for Ericsson!)
Nothing to lose: Ericsson's core business is telecommunications products, selling programming tools is not really a business Ericsson is interested in.
Stimulate adoption: Erlang is a great language for many sorts of systems. Releasing a good, free development environment is likely to make Erlang catch on faster.
Generate goodwill: Giving away cool software can only improve Ericsson's image, especially given the current level of media attention around "open software".
没有评论:
发表评论