RabbitMQ是近年来比较流行的消息队列产品,它是用Erlang语言编写的,Erlang虽然一直流行于一些特定领域里,但也毕竟属于小众语言,随着RabbitMQ的推广,Erlang也逐渐被更多的人所了解。
Erlang语言概述
-
Erlang,是瑞典的爱立信公司的乔·阿姆斯特朗、罗伯特·维丁、迈克·威廉姆斯开发的编程语言。
erlang.png - Erlang最早应用在爱立信公司的电话交换机中。
- 它是一种并发式语言,函数式语言。
- Erlang名称的由来:
Erlang由比亚恩·戴克命名,因丹麦数学家Agner Krarup Erlang而得名,也是Ericsson Language(爱立信编程语言)的缩写。 - Erlang发布于1986年,1998年发表开放源码版本,称为开放电信平台(OTP)。
- Erlang衍生自Prolog语言,它的衍生过程如下:
PLANNER → Prolog → Erlang - Erlang的扩展名:
源程序文件:erl,头文件:hrl - Erlang的注释:%
- 官网下载地址:
https://www.erlang.org/downloads - Erlang程序运行在虚拟机上,起初运行在JAM虚拟机上,后来改用Beam虚拟机,通过第三方也能运行在其它平台,如运行在JVM上的Erjang等。
Beam虚拟机概述
- Beam虚拟机(Bogdan's Abstract Machine),是一种基于寄存器的虚拟机,它是ERTS(Erlang运行时系统的一个组成部分)。
- Erlang源代码要首先编译为Beam字节码,然后运行在Beam虚拟机上,Beam字节码文件的扩展名为:beam。
- Beam比JVM和CLR等虚拟机出现的更早,和后两者相比,它的优势在于热代码加载和并发等方面,而不是速度,这更符合电信基础设施的需求。
- Beam虚拟机支持如下语言:
Erlang,Elixir,Hambler,LFE,Reia等等。
Hambler是一种衍生自Haskell的语言,擅长5G、IoT、云计算和边缘计算等领域。
Erlang交互式环境(Eshell)
erl是交互式环境的启动程序。
在系统终端输入erl后,会有如下提示:
Eshell V11.0.3 (abort with ^G)
1> _
Eshell中的表达式要以句号结尾,如输入“1+2.”,则会输出3:
Eshell V11.0.3 (abort with ^G)
1> 1+2.
3
2> _
退出Eshell:
- halt()
立即停止系统,强制退出,它的全写是erlang:halt(),冒号前边的是模块名,此函数也可以携带一个整型参数,表示程序的返回值,默认为0,表示正常退出。 - q()
停止系统,有可能存在退不出去的情况,它是init:stop()的别名。
函数式语言和命令式语言
第1讲的最后我们来简单的聊一下这两类不同的编程语言。
- 函数式语言,以函数为第一公民,函数式语言讲究的是没有副作用,如变量不能改值、没有循环语句等,但是都通过函数来实现了这些功能,这是另外一种编程思维。
- 函数式编程语言有很多,如:
LISP、Scheme、SML、O'Caml、F#、Erlang、Elixir、Haskell、Hambler等等。 - 而主流语言则绝大多数都是命令式语言,如:
C、C++、OC、Java、C#、Go、Python、Swift、Scala、Kotlin、JS等等。 - 虽然说函数式语言不能算是主流语言,但是其中有很多特性和思维都是很优秀的,所有说现在的很多命令式语言,都在逐渐的吸取函数式语言的一些特性。
- 最后有一点需要强调,这两类语言和面向对象编程是不同的角度而言的,因为函数式语言也有面向对象的和非面向对象的,而命令式语言也有面向对象的和面向过程的。