It discussed the current status and possible future of SMP enabled Erlang VM.
It is worth to read!
2009/06/10
2007/02/28
Erlang 的运行时更新
Erlang 作为电信级开发语言,在设计之初就有了在运行时自动更新程序,也就是不停机打patch的能力。 首先这种功能对于电信级别的程序来说,是非常必要的,如果不能做到这个5个9基本上就是空谈了。
然而对于传统的使用C/C++或者Java开发的程序而言,全面支持这种能力是非常复杂的,这种复杂性主要是有由于C/C++ 语言的自身特性所决定的。由C语言开发的程序的运行态,在地址空间中一般都具有4个以上的sections:
text 在连接程序完成之后就确定的,对于同一份源程序产生的都是完全一样的。
data 在程序的连接完成之后,它在内存中的位置也已经确定,但是内容可能会随运行态改变。
stack 和 heap 则是完全动态的,而一个运行程序的stack数量和他所具有的thread数量相对应。基本上可以认为这两个段不能够采用认可以预定义——简单替换的方式进行更新,它们的内容对于非运行系统而言是不可知的。
因此为一个处在正在运行中的应用打补丁,需要:
Erlang 只有代码段,没有数据段,所有数据都动态,实现这样的功能确实要简单很多。而且 Erlang 又是已虚拟机的方式运行,替换代码段的难度又有所降低。
对于 Erlang 而言,运行时程序更新,这样的功能就算是水到渠成吧!
然而对于传统的使用C/C++或者Java开发的程序而言,全面支持这种能力是非常复杂的,这种复杂性主要是有由于C/C++ 语言的自身特性所决定的。由C语言开发的程序的运行态,在地址空间中一般都具有4个以上的sections:
- text/代码段 就是程序本身
- data/数据段 用来保存全局变量,静态变量,以及未初始化的变量;
- stack/程序堆栈 用来保存当前线程的临时变量 对于C/C++ 来说它保存了程序的运行状态;
- heap/堆 用来保存程序运行中分配的临时变量;
text 在连接程序完成之后就确定的,对于同一份源程序产生的都是完全一样的。
data 在程序的连接完成之后,它在内存中的位置也已经确定,但是内容可能会随运行态改变。
stack 和 heap 则是完全动态的,而一个运行程序的stack数量和他所具有的thread数量相对应。基本上可以认为这两个段不能够采用认可以预定义——简单替换的方式进行更新,它们的内容对于非运行系统而言是不可知的。
因此为一个处在正在运行中的应用打补丁,需要:
- 不改变text代码段中的函数的入口地址。因为在stack中会保存这些函数的入口地址,如果改变了它们的地址,必将导致程序跑飞。
- 不能改变text代码段中所有已有函数的参数或者调用方式。
- 不能在中间增加数据段中全局变量。因为这将改变已有的全局变量的地址,使代码引用错误的变量。
- 不能简单替换数据段中的变量内容,即不能随意修改源程序中非const全局变量的内容。
Erlang 只有代码段,没有数据段,所有数据都动态,实现这样的功能确实要简单很多。而且 Erlang 又是已虚拟机的方式运行,替换代码段的难度又有所降低。
对于 Erlang 而言,运行时程序更新,这样的功能就算是水到渠成吧!
2007/02/11
关于 Erlang
在国内小程序员的圈子里,高水平的不多,但是跟风的水平还是不低的,C/C++, VB, Delphi, Java, C#, Perl, Python, PHP, Lua, JavaScript, Rudy, Haskell, Erlang...... 随风而来。不才也跟了一把风 Erlang 了一把! 说起这个 Erlang 真正令我感兴趣的地方是——它是由 Ericsson 开发出来的用于电信级应用程序开发的语言。说来惭愧现在也算是在电信圈子里面(当然不在Ericsson) 讨生活的菜鸟吧! 不由自主地对别人如何做同样的东西有兴趣。 算起来也在上面画了N个小时了,有点感受也记录下来总也不算是枉费了这些时间。
首先,Erlang 诞生于于1980年代,在 Ericsson Computer Science Laboratory,虽然没有官方的说明,当时我个人感觉,Erlang的根本源于LISP,虽然语法上作了一些变化,但是语言的本质上确是不可回避的LISP风骨:函数语言,自动内存管理,原子概念,LIST/表操作,不一而足,虽然从语法上作了一些改变,摒弃了繁复的"()", 引入了
其次,为了函数语言能够在工程实践中具有实际应用,Erlang在语言层次上引入了许多辅助的功能。1)Erlang从语法层次上定义了一种引入副作用(side effect)的方法进程间消息的发送——
不过坦白的讲,除了第一点进程间消息的发送与接受具有些实质上的意义之外,异常及其处理机制,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 中写的
首先,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".
订阅:
博文 (Atom)
BlockChain 相关电子书
@copyright of Sam Chadwick - https://thehub.thomsonreuters.com/groups/bitcoin/blog/2017/09/10/blockchain-paper Blockchain Papers A c...
-
为Windows 10 添加 拼音加加双拼 输入方案 把下面的内容保存为 ppp.reg, 然后双击导入注册表,Pinyin PlusPlus双拼输入方案就有了。 Windows Registry Editor Version 5.00 [HKEY_CURRENT...
-
算起来到这里已经一年多了, 中间断断续续当然了也包括一些可观的原因,一共也没有放多少东西上来。 总算还有两片篇幅较长的原创,也算是聊以自慰了。 再接再厉好了!希望自己能够百尺竿头更进一步~~~
-
Today I do update the JavaScript syntax script for VIM to 0.7.2. Until now PRC 2007.01.30-21:37 my script got: Rating 332/99, Downloaded by ...