Erlang 复活节彩蛋

我回来了! 让我们用一些有趣的 Erlang/OTP 知识来庆祝吧!

到目前为止,我一直在分享大量奇怪的或者令人困惑的关于 erlangers 信息。 我可能会在下周回到过去那个模式。 但是,在我收集所有这些故事的同一时期,我还发现了 Erlang/OTP 发行版附带的一些不错的代码和文档。 他们在很大程度上展示了语言是如何创建的以及它是如何演变的。 这是带着快乐的编程! 这当然是我最喜欢的编码方式。

我们中间的外星人

首先,让我向您展示一个可以在 Erlang/OTP 中找到的非常好的实用程序:erlang tracer。 是的,当时 erlang_tracer 是一个很长的名字(见下文),所以它的作者称它为 et(外星人)。 当然,有了这样的模块,谁能错过创建这个功能的机会呢?

1> et:phone_home(1, from, to, msg, opts).
hopefully_traced
2>

实际上,我不久前使用它编写了一个模块,并在推特上发布了它……

有趣的硬编码函数名

为函数选择合适的名称并不总是那么容易,因此有时您必须记录该名称背后的原因。 正如 Robert Virding 对 lists:zf/1 所做的那样:

%%
%% The name zf is a joke!
%%

去年我有机会见到他,问他这是什么玩笑,他告诉我这是关于 Zermelo 和 Fraenkel的玩笑。 让我们看看这些先生们对这个笑话有什么看法……

此处禁止 Objective-C 开发者

如果您还记得我之前的一篇文章,那么您在 Erlang 中有多种列表类型。 在那篇文章中,我只列出了正确的列表(即代表有效列表的列表)。 Erlang 也允许您使用不正确的列表,但开发人员找到了一种防止开发人员这样做的好方法。 根据该页面中的注释:

以下内置列表类型也存在,但预计很少使用。 因此,它们的名称很长:

nonempty_maybe_improper_list() :: 
  nonempty_maybe_improper_list(any(), any())
nonempty_improper_list(Type1, Type2)
nonempty_maybe_improper_list(Type1, Type2)

朋友们,这是实事! 谁有时间使用这么长的类型名称,对吧?

神秘的关键词

经典的是,在 Erlang 中,关键字和原子都写成小写单词(嗯……原子也可以写在单引号内,但让我们暂时忘记这一点)。 大多数时候,这不是问题:你知道 if 是关键字,case 是关键字,my_function 不是,等等。

但是有一些保留字实际上不是关键字(在某种意义上你不能用它们构建表达式),但它们也不是原子。 它们只是为未来保留的。 不久前(在 OTP17 之前)放弃的是query。 从那时起,您终于可以编写一个名为 query 的函数,但仍然保留了另外 2 个神奇的关键字。 让我们看看您是否可以通过保留字列表有效表达式列表进行比较来发现它们;)

希望你喜欢本文。 下周见,将会为你带来更多文章!

Related Posts

2021 年你需要知道的关于 Erlang 的一切

今天,我们将看一个相当古老且有些古怪的东西。 你们大多数人可能没有注意到的语言。 虽然 Erlang 不像某些现代编程语言那样流行,但它安静地运行着 WhatsApp 和微信等每天为大量用户提供服务的应用程序。 在这篇文章中,我将告诉你关于这门语言的更多事情、它的历史,以及你是否应该考虑自己学习它。 ## 什么是 Erlang,它在哪里使用? Erl

Read More

Erlang JIT中基于类型的优化

这篇文章探讨了 Erlang/OTP 25 中基于类型的新优化,其中编译器将类型信息嵌入到 BEAM 文件中,以帮助JIT(即时编译器)生成更好的代码。 ## 两全其美 OTP 22 中引入的基于SSA的编译器处理步骤进行了复杂的类型分析,允许进行更多优化和更好的生成代码。然而,Erlang 编译器可以做什么样的优化是有限制的,因为 BEAM 文件必须

Read More

Erlang JIT之路

自从Erlang 存在,就一直有让它更快的需求和野心。这篇博文是一堂历史课,概述了主要的 Erlang 实现以及如何尝试提高 Erlang 的性能。 ## Prolog 解释器 Erlang 的第一个版本是在 1986 年在 Prolog 中实现的。那个版本的 Erlang 对于创建真正的应用程序来说太慢了,但它对于找出Erlang语言的哪些功能有用,哪

Read More