2021 年你需要知道的关于 Erlang 的一切
- admin
- 07 Jan 2024
今天,我们将看一个相当古老且有些古怪的东西。 你们大多数人可能没有注意到的语言。 虽然 Erlang 不像某些现代编程语言那样流行,但它安静地运行着 WhatsApp 和微信等每天为大量用户提供服务的应用程序。 在这篇文章中,我将告诉你关于这门语言的更多事情、它的历史,以及你是否应该考虑自己学习它。 ## 什么是 Erlang,它在哪里使用? Erl
Read MoreRebar3 是 Erlang 的构建工具和包管理工具。借助 Rebar3及其Hex插件,创建和发布您的 Erlang 包非常简单。让我们做一个简单的“hello world”包,尝试一下吧!
在此处下载最新版本:http://www.rebar3.org/ 。
curl -O https://s3.amazonaws.com/rebar3/rebar3
使用 chmod 为其添加执行权限,然后添加到环境变量 PATH中。
chmod +x rebar3
export PATH=$PATH:your-current-directory
使用命令rebar3 new,将开始使用名为app的内置模板生成一个新项目。在此示例中,我们正在创建一个名为myapp的项目。其他可用模板有:release、lib、plugin、escript、cmake。
$ rebar3 new app myapp
===> Writing myapp/src/myapp_app.erl
===> Writing myapp/src/myapp_sup.erl
===> Writing myapp/src/myapp.app.src
===> Writing myapp/rebar.config
===> Writing myapp/.gitignore
===> Writing myapp/LICENSE
===> Writing myapp/README.md
你的代码放在src目录中。
$ cd myapp
$ tree
.
├── LICENSE
├── README.md
├── rebar.config
└── src
├── myapp.app.src
├── myapp_app.erl
└── myapp_sup.erl
常见的是使用一个.app.src文件将您的应用程序定义为 OTP application,因为 Rebar3 仅处理OTP 结构化项目。看起来很熟悉?该文件也是 Erlang代码。查看完整的参考资料,看看它可以包含什么。
$ cat src/myapp.app.src
{application, 'myapp',
[{description, "An OTP application"},
{vsn, "0.1.0"},
{registered, []},
{mod, {'myapp_app', []}},
{applications,
[kernel,
stdlib
]},
{env,[]},
{modules, []}
]}.
src/myapp_app.erl中的代码非常简单。它只是确保您可以启动和停止您的 Erlang 应用程序:
$ cat src/myapp_app.erl
-module('myapp_app').
-behaviour(application).
-export([start/2, stop/1]).
start(_StartType, _StartArgs) ->
'myapp_sup':start_link().
stop(_State) ->
ok.
Rebar3 使用一个名为rebar.config的文件来指定附加元数据,例如依赖项。rebar.config可以包含很多字段。要查看它们,请查看完整示例。
$ cat rebar.config
{erl_opts, [debug_info]}.
{deps, []}.
现在让我们使用 Rebar3 启动一个 Erlang shell,其中包含您的应用程序和路径中的依赖项。运行application:start(myapp).验证您的应用是否已正确加载。
$ rebar3 shell
===> Verifying dependencies...
===> Compiling myapp
Erlang R16B03-1 (erts-5.10.4) [source] [64-bit] [smp:8:8] [async-threads:0] [hipe] [kernel-poll:false]
Eshell V5.10.4 (abort with ^G)
1> application:start(myapp).
ok
2> application:stop(myapp).
ok
3>
=INFO REPORT==== 29-Jun-2015::16:14:10 ===
application: myapp
exited: stopped
type: temporary
为了了解命令rebar3 shell,Fred Hebert(《Learn You Some Erlang》的作者)在这里写了一篇很好的文章。
我们需要安装一个名为rebar3_hex的插件,以便从Erlang/Elixir 包管理器Hex.pm获取和安装 Erlang 包。只需将以下行添加到您的rebar.config文件中。(您需要 Erlang 版本 OTP 17.4 及以上)
{plugins, [rebar3_hex]}.
然后运行命令:rebar3 update以启用插件。
$ rebar3 update
===> Fetching jsx ({pkg,<<"jsx">>,<<"2.6.1">>})
===> Fetching ssl_verify_hostname ({pkg,<<"ssl_verify_hostname">>,
<<"1.0.5">>})
===> Fetching rebar3_hex ({pkg,<<"rebar3_hex">>,<<"0.6.0">>})
===> Compiling ssl_verify_hostname
===> Compiling jsx
===> Compiling rebar3_hex
===> Updating package index...
如果您想在每次创建新的 Erlang 应用程序时避免此步骤,请将条目添加到全局rebar.config并将其放置在:
~/.config/rebar3/rebar.config
搜索命令可以让你找到在Hex.pm上发布的远程 Erlang 包。您可以在查询中使用正则表达式字符:
$ rebar3 hex search cowboy
cloudi_service_http_cowboy
cowboy
Rebar3 可以下载和安装 Erlang 包和任何必要的依赖项。将应用程序名称添加到rebar.config文件中的deps条目,然后运行命令:rebar3 compile。在这个例子中,我们尝试使用两个 Erlang 包,分别是cowboy和meck。
{deps, [cowboy, meck]}.$ rebar3 compile
===> Verifying dependencies...
===> Fetching ranch ({pkg,<<"ranch">>,<<"1.0.0">>})
===> Fetching meck ({pkg,<<"meck">>,<<"0.8.2">>})
===> Fetching cowlib ({pkg,<<"cowlib">>,<<"1.0.1">>})
===> Fetching cowboy ({pkg,<<"cowboy">>,<<"1.0.0">>})
===> Compiling cowlib
===> Compiling ranch
===> Compiling meck
===> Compiling cowboy
===> Compiling myapp
想要安装特定版本的 Erlang 包?在元组中写入应用程序名称和版本。您可以在Hex 主页浏览软件包的可用版本。
{deps, [{cowboy, “1.0.2”}, {meck, "0.8.3"}]}.
rebar3 deps命令显示本地安装的包:
$ rebar3 deps
cowboy (locked package 1.0.0)
meck (locked package 0.8.2)
要卸载一个包,你必须先从 rebar.config文件中删除它,然后使用命令:rebar3 unlock。在这里,我们从列表中删除了meck包。
$ rebar3 unlock
$ rebar3 deps
cowboy (locked package 1.0.0)
今天,我们将看一个相当古老且有些古怪的东西。 你们大多数人可能没有注意到的语言。 虽然 Erlang 不像某些现代编程语言那样流行,但它安静地运行着 WhatsApp 和微信等每天为大量用户提供服务的应用程序。 在这篇文章中,我将告诉你关于这门语言的更多事情、它的历史,以及你是否应该考虑自己学习它。 ## 什么是 Erlang,它在哪里使用? Erl
Read More这篇文章探讨了 Erlang/OTP 25 中基于类型的新优化,其中编译器将类型信息嵌入到 BEAM 文件中,以帮助JIT(即时编译器)生成更好的代码。 ## 两全其美 OTP 22 中引入的基于SSA的编译器处理步骤进行了复杂的类型分析,允许进行更多优化和更好的生成代码。然而,Erlang 编译器可以做什么样的优化是有限制的,因为 BEAM 文件必须
Read More自从Erlang 存在,就一直有让它更快的需求和野心。这篇博文是一堂历史课,概述了主要的 Erlang 实现以及如何尝试提高 Erlang 的性能。 ## Prolog 解释器 Erlang 的第一个版本是在 1986 年在 Prolog 中实现的。那个版本的 Erlang 对于创建真正的应用程序来说太慢了,但它对于找出Erlang语言的哪些功能有用,哪
Read More