Erlang:OTP
Erlang / OTP与大多数编程环境不同,即使是那些也使用虚拟机的环境也是如此。Erlang对应用程序的结构,应具有的隔离级别以及Erlang的VM可以执行的操作与软件可以执行的操作之间的隔离性。不仅是一种编程语言,还构建系统的整个框架。它确保所有应用程序都能很好地契合在一起,可以实时完成更新,并且代码易于检测和观察。
Run-Time System
一切的基础都是Erlang虚拟机本身,称为BEAM。从技术上讲,BEAM是Erlang虚拟机的单个实现,可能还有其他实现。例如,Erllvm是基于LLVM的实现(使用一些自定义补丁使一切变为可能),而90年代的较早实现称为JAM。Erlang VM是用C实现的,包含许多花哨的东西:用于运行进程的调度程序,垃圾回收,内存分配器,用于事件的计时器轮,用于对操作系统功能进行抽象并提供统一接口(例如时间管理,文件处理驱动程序等),一些内置函数的运行速度快于Erlang自己可以完成的功能(BIF),以及以其他语言(NIF)本地实现的函数的接口,以及针对它们的特殊调度程序。显然还有更多的东西,但是可以像在BSD或Linux中使用内核那样考虑所有这些东西:构建更高级东西所需的低级东西。
Erlang / OTP
到目前为止,所描述的等同于操作系统的内核。现在,需要用户空间组件的基础块。在Erlang中,这实际上就是OTP的目的。OTP指定应如何构建虚拟机上运行的“组件”。语言不仅具有“流程和消息”的含义,还具有一种定义良好的方式来组织代码。
Erlang / OTP系统由名为OTP Applications的组件构成。安装的每个Erlang版本或使用该版本构建的系统都附带了一些OTP应用程序。OTP应用程序基本上有两种变体:库应用程序(仅是模块的集合)和可运行应用程序(包含模块的集合),但还指定了存储在监管树下的有状态流程结构。
- 库应用程序:模块的无状态集合
- 可运行的应用程序:OTP应用程序可启动状态监督树结构,并在其中运行进程
- OTP应用程序:库或可运行应用程序,可以互换
默认情况下,这两个OTP应用包括被称为stdlib
,这是一个库应用程序包含核心标准库模块,如list
或maps
,并且kernel
,是一个可运行的应用程序,并设置该核心结构为一个Erlang系统依赖于OTP应用程序工作。
节点启动时,所有必需的OTP应用程序中的模块都将加载到内存中。然后kernel
开始。kernel
从此开始管理系统的生命周期。所有其他OTP应用程序及其配置都通过它来处理,因此独特的功能(例如分发和热代码更新)也可以通过它来处理。如果我们回到操作系统比较,则可以kernel
像考虑systemd
Linux内核那样思考OTP应用程序。
其实,kernel
和stdlib
需要一个基本的工作Erlang壳仅有的两个应用程序。当键入erl
(或werl
在Windows上启动)时,这将引导VM以及stdlib
预加载的VM 。其他所有内容都是可选的,后面可以加载 。
标准的Erlang发行版包含以下应用程序:
- kernel
- stdlib
- crypto (cryptographic primitives)
- ssl (TLS termination library)
- inets (network services such as FTP or HTTP clients)
- ct (Common Test framework)
- wx (graphic toolkit)
- observer (a control panel to manage your Erlang node, building on
wx
) - compiler (the Erlang compiler to build your own project)
发表评论
要发表评论,您必须先登录。