欢迎光临散文网 会员登陆 & 注册

Erlang + SublimeText 编程环境搭建指导

2023-09-03 13:00 作者:紧果呗  | 我要投稿
  1. 下载安装 Erlang 运行环境 download,将 bin目录配置到 PATH 环境变量中方便调用。

  2. 下载安装 SublimeText www.sublimetext.com

  3. 安装 SublimeText 插件管理器 Package Control

  4. 安装 SublimeText LSP 插件  lsp.sublimetext.io

  5. 安装 Erlang 语言服务器 erlang_ls (Windows 平台下可能需要自行编译)

安装 Sublime Text 语言服务插件,插件本身使用 Erlang 开发,可以直接下载源代码编译安装。需要注意,它本身依赖了几个代码仓库,在构建时会自动克隆到 build 目录下,或者插件或是依赖库,根据 rebar.config 或者 rebar.lock 配置指示,可以插件下载到指定目录。国内网络访问不了 git 服务器,可以使用 git@github.com 以 SSH 协议尝试访问:


构建脚本 Makefile 中的命令 `rebar3 as dap escriptize` 表示构建包含 Debug Adapter Protocol (DAP) 调试信息的输出。

1. https://github.com/erlang-ls/erlang_ls/releases/download/0.48.1/els_dap-win32.tar.gz

2. https://github.com/erlang-ls/erlang_ls/releases/download/0.48.1/erlang_ls-win32.tar.gz

3. https://microsoft.github.io/debug-adapter-protocol/


0. https://lsp.sublimetext.io/language_servers/#erlang

1. https://github.com/sublimelsp/LSP-elixir

2. https://github.com/erlang-ls/erlang_ls

3. https://erlang-ls.github.io/


执行构建命令后,会生成 erlang_ls 脚本,这就是 LSP 服务入口程序。这是一个 escript 脚本,Windows 系统下配置 command 时需要前缀 escript.exe 命令去执行它。插件官方发布的 0.48.1 版本还会在 Windows 10 平台下引发 main 入口函数未定义问题,生成的文件有问题。

源代码构建也会产生错误面终止,Gradualizer 模块代码中调用函数时可能少传了参数,可以添加一个 utf8 默认值。另一处问题是定义了未使用的函数 eep48_docs,将其相关代码行注解即可:

Rebar3 在 Windows 10 执行编译不顺利,还到官网上下载编译好的 rebar3。将下载的 rebar3 文件移动到 erl 的环境变量目录下,创建一个 `erlang_ls.cmd` 即可执行相应的 rebar3 脚本,Linux 系统则会自动处理:

这段脚本的意思是,将命令行的脚本名保存到 rebarscript 变量中,然后 `"%rebarscript:.cmd=%"` 表示将其中的 `.cmd` 扩展名删除,而 `%*` 表示命令行中传入的所有参数,然后使用 escript 执行它。


比如,如下查看版本命令,执行的是 erlang_ls.cmd,就会调用 escript 执行 erlang_ls 这个编译好的脚本文件。



Install the Erlang Language Server.

Open Preferences > Package Settings > LSP > Settings and add the "erlang-ls" client configuration to the "clients":


Erlang OTP 最初是爱立信为开发电信相关产品而产生,即 OTP - Open Telecom Platform 缩写,Erlang 开源前这个名字多少还有点品牌效应。无论 Erlang 还是 OTP 都早已不再局限于电信应用:更贴切的名字应该是“并发系统平台”。


Erlang 是一种面向并发 Concurrency Oriented,面向消息 Message Oriented 的函数式 Functional 编程语言。


Erlang 应用场景


- 分布式产品,网络服务器,客户端,等各种应用环境。

- Erlang 也可以作为一种快速开发语言,进行原型开发。

- 应用需要处理大量并发活动。

- 需要良好的软件或硬件 fault-tolerant 容错能力。

- 软件产品需要在多服务器中具有良好的伸缩能力,而不必大改动。

- 容易实现不中断服务进行升级过程,如游戏服务器。

- 软件需要在严格的时间片响应用户,如游戏服务器。

游戏服务端开发非常有用!如果低延迟对你的应用来说很重要,那么平心而论,不选 Erlang 反而显得很奇怪了。


2019年4月20日,Erlang 语言设计者 Joe Armstrong 去世,享年 68 岁。


1986 年,Joe Armstrong 和 Robert Virding、Mike Williams 在电信公司爱立信共同创造了应对大规模并发场景的编程语言 Erlang,这一语言起初是爱立信的私有语言,后于 1998 年开源。


Erlang 是一门相对小众的编程语言,这一点与 Lisp 很像 —— 小众但影响很大。Joe Armstrong 曾用一句话概括过 Erlang 的优点:一次编写,永远运行。


Joe Armstrong 在论文中是这样认为的:几乎所有传统的编程语言对真正的并发都缺乏有力的支持——本质上是顺序化的,而语言的并发性都仅仅由底层操作系统而不是语言提供。


而用对并发提供良好支持的语言,也就是作者说的`面向并发的语言` COL - Concurrency Oriented Language 来边写程序,则是相当容易的:


- 从真实世界的活动中识别出真正的并发活动

- 识别出并发活动之间的所有消息通道

- 写下能够在不同消息通道中流通的所有消息


其次,通过定下的九条原则性思想设计,写出来天然支持分布式系统的 Erlang 以及 OTP 框架,真的做到了他说的实现面向并发的语言。


> - everything is a process.

> - process are strongly isolated.

> - process creation and destruction is a lightweight operation.

> - message passing is the only way for processes to interact.

> - processes have unique names.

> - if you know the name of a process you can send it a message.

> - processes share no resources.

> - error handling is non-local.

> - processes do what they are supposed to do or fail.


- 一切皆进程

- 进程强隔离

- 进程的生成与销毁都是轻量的操作

- 消息传递是进程交互的唯一方式

- 每个进程有唯一的名字

- 你若知道进程的名字,就可以向他发消息

- 进程之间不共享资源

- 错误处理非本地化

- 进程要么正常跑着,要么马上挂掉


就以上九条的观念,设计出的 Erlang 语言,成就了可靠性达到 99.9999999% 的目前世界上最复杂的 ATM 交换机。


其三,let it crash 思想的提出与实现。


程序不可能处理一切错误,因此程序员只要力所能及的处理显然易见的错误就好了,而那些隐藏着的,非直觉性的错误,就让他崩掉吧——本来就很有可能是极少见的错误,经常出现的?就需要程序员人工处理了,这是紧急情况,就算 try catch 所有错误也无法避免,因为系统已经陷入崩溃边缘了,苟延残喘下去只是自欺欺人。并且,不恰当地使用 try catch 还会埋下隐患,让系统带病运转。


其四,一切进程都是轻量级的,都可以被监控 monitor,有 Supervisor 专门做监控。你可以方便的用一个 supervisor 进程去管理子进程,supervisor 会根据你设定的策略,来处理意外挂掉的子进程。这种情况的问题的是,错误处理稍微做不好就会挂,策略有:


- one_for_one:只重启挂掉的子进程

- one_for_all:有一个子进程挂了,重启所有子进程

- rest_for_one:在该挂掉的子进程 创建时间之后创建的子进程都会重启。


Erlang + SublimeText 编程环境搭建指导的评论 (共 条)

分享到微博请遵守国家法律