Showing posts fromerlang

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

Erlang LS指南(一)

## 欢迎来到 Erlang LS的世界 为编程语言实现自动完成或跳转到定义等功能并非易事。传统上,必须为每个开发工具重复这项工作,并且需要目标编程语言和所选开发工具内部使用的编程语言的专业知识组合。 一个绝妙的直觉, [Language Server Protocol](https://microsoft.github.io/language-ser

Read More

Erlang LS指南(三)

## 工作区符号 立即跳转到您正在寻找的模块。 ![001](/images/blog/0009_001.png) ## 折叠(folding) 专注于重要的事情,放弃其余的。 ![002](/images/blog/0009_002.png) ## 代码片段 快速插入参数化、可重用的代码片段。 ![003](/images/blog/000

Read More

Erlang LS指南(二)

## Theia IDE ### 安装 通过在运行实例中包含 Erlang/OTP 并安装 VSCode 扩展,可以在 Theia IDE 中使用 Erlang LS。 如果您想尝试使用 GitPod,请单击此处。 要在您的 Erlang 项目(托管在 GitHub 或 Gitlab)中使用相同的设置,您可以在 .gitpod.yml 中找到 GitP

Read More

Erlang LS指南(五)

## 如何进行诊断 几天前,NextRoll 发布了 rebar3_hank,这是一个“强大而简单的工具,可以检测 Erlang 代码库周围的死代码”。在他们的原始帖子中,作者提到了 rebar3_hank 和 Erlang LS 提供的一些功能之间的重叠,例如检测未使用的包含文件。 对这个新工具很感兴趣,我决定深入研究它,检查 rebar3_hank

Read More

Erlang LS指南(四)

## 启动调试会话 ### VS Code 选择 Run and Debug 面板,从下拉列表中选择 Existing Erlang Node 并按下播放按钮: ![001](/images/blog/0010_001.png) 打开一个新终端并使用 curl 命令触发我们的新断点。 <Code language="shell"> {`curl -i

Read More

Erlang VM 中的并发性

Erlang通常被称为“面向并发的编程语言”。 这个名字是怎么来的?80 年代为电信行业创建的语言现在如何帮助我们? Erlang 或Erlang/OTP(开放电信平台)于 1986 年在爱立信构建,用于处理不断增长的电话用户群。它的设计目的是改进电话应用程序的开发。它非常适合构建分布式、容错和高可用性系统。 那么,80 年代建立的技术对我们有什么意义

Read More

Erlang maps深度测试

## 介绍 Erlang 在 17.0 版中引入了一个新的数据结构,即 map()。这种结构是从键(key)到值(value)的有限映射,具有扁平的内部表示:映射本质上是两个数组:一个排序的键数组和一个值数组。反过来,这种所谓的flatmap表示对于较小尺寸的map是有效的,但它们对于大尺寸的map表现不佳。 18.0 版将消除大尺寸map的问题。在 1

Read More

Erlang 和代码风格

## 对防御性编程风格的思考 正确的 Erlang 用法要求您不要编写任何类型的防御性代码。这称为意图编程(intentional programming)。您为预期代码采用的意图控制流路径编写代码。而且您不会为您认为不可能的路径编写任何代码。此外,您不会为数据流编写代码,这不是程序的意图。 ## 这是一个愚蠢的效果 如果 Erlang 程序出错,它就

Read More

Erlang 复活节彩蛋

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

Read More

Erlang 开发者必备的 10 个工具

## 概述 在本教程中,我将介绍作为 Erlang 开发人员在日常生活中使用最多的工具。入选的所有或大部分工具都具有以下特征: - 它们是专门为 Erlang 构建的(即没有文本编辑器,没有 git 等)。 - 它们不是为特定类型的应用程序量身定制的(即您可以使用它们来开发任何类型的 Erlang 应用程序)。 ## 在Shell中工作 与许多其他

Read More

Erlang 的核心概念

经过多年大致了解有关 Erlang(和 Elixir)的表面知识后,我最近一直在学习 Erlang(和 Elixir)。 现实世界中有很多教你如何编写 Erlang 或 Elixir 程序的东西,但在这里我想写一篇概念性的文章,我希望在开始之前阅读。 Erlang 以一种既简洁又经久不衰的方式结合了一组旧思想。 Erlang 的并发模型特别使用了我已经知道

Read More

Erlang中的list函数如何失败?

很久以前写过一篇[The Asymmetry of ++](https://medium.com/erlang-battleground/the-asymmetry-of-validations-1ccdf2457293)的文章,感谢Fede Bergero的发现。 让我们在不对称列表中添加更多… > 注意:本文基于 OTP23。 该版本之后,许多事情都得

Read More

Erlang的万圣节👻( Dialyzer 无法找到的dead code)

像我这样谈论 Dialyzer 这样出色的工具的缺点或局限性不太寻常。 尽管如此,今天我还是发现了一些非常死板的代码块,它们通过了Dialyzer的类型分析。 所以,既然万圣节快到了,让我们从它的坟墓里拿出一些死代码吧! ## Dialyzer 产生警告的时候 在以前我见过这样的代码…… <Code language="erlang"> {`warn

Read More

Joe Armstrong:关于Erlang,有很多东西我想改变

**Joe Armstrong**,Erlang最初的设计者和实现者,他也是Erlang OTP系统项目的首席架构师。他拥有瑞典皇家理工学院博士学位,是容错系统开发领域的世界级专家。Armstrong起初是一名物理工作者,在攻读物理学博士学位时因为用完积蓄而转向了计算机科学,找到一份研究员的工作,为英国人工智能领域奠基人之一的Donald Michie工作。

Read More

Rebar3 功能介绍

[Rebar3](https://rebar3.org/)带有许多新的和改进的功能。在接下来的几周内,我将在这里发布博文以介绍其中的一些功能。 ## 本地安装和升级 Rebar 是一个 escript 包,这对其易用性来说是非常重要的,主要是因为它们让 Erlang 用户可以将单个文件作为可执行文件,而不管底层的 Erlang 安装如何,甚至可以提交到项

Read More

redbug使用指南

## 描述 redbug 是一个与 Erlang 跟踪工具交互的工具。当某些事件(例如特定函数被调用)发生时,它将指示 Erlang VM 生成所谓的“跟踪消息”。它使用跟踪功能的一个安全子集,如果感觉过载(例如如果它被跟踪消息淹没)则主动退出。它在后台运行,收集跟踪消息,直到达到其终止条件之一(消息数、文件大小或经过的时间)。 跟踪消息要么打印(即人类

Read More

为 Erlang 编写模板编译器

Erlang 是一个先进的分布式软件平台,非常适合网络和多核计算。我相信它几乎已经为 Web 编程的“黄金时间”做好了准备,但至少有一个大问题阻碍了 Erlang 平台:Erlang语言不适合 Web 程序员面临的许多问题。例如: - Erlang 很难重构 - 哈希映射没有内置语法 - 字符串操作很难 我将讨论一种规避这些问题的方法,即实现另一种语言以

Read More

为什么选择Erlang

首先,我想谈谈 Erlang 在 2010 年被 KAZOO 选中的一些较高层次原因。即使你不是技术人员,我希望你能在阅读本文中找到一些价值。 ## 一些 Erlang 的历史 Erlang 于 1986 年在爱立信开发,并于 1998 年开源。它旨在改进爱立信内部电话应用程序的开发。 Erlang 可以分为三个主要部分: 1. Erlang 语言

Read More

使用 ASDF 安装 Elixir 和 Erlang

## 介绍 许多编程语言会定期发布新版本,以添加或弃用功能、修复错误并引入重大更改。为了帮助开发人员轻松地在版本之间切换,一些语言社区都有版本管理器(例如用于 Node.js 的 NVM 或用于 Ruby 的 Rbenv)。但是,当您需要一次切换多种语言的版本时,ASDF 版本管理器可确保每个项目都有所需的环境。 这在需要 Erlang 运行时的 Eli

Read More

使用 Erlang 和 Elixir的成功公司

Erlang 是一种受信任且稳定的语言,用于在主要系统中运行核心程序,由 Ericsson 发明。Erlang(和 Elixir)被许多领域的许多行业使用,包括金融科技、安全、区块链和物联网。 公司之所以选择 Erlang 和 Elixir,是因为可以轻松编写可部署在分布式网络中的容错和可扩展程序。Erlang 和 Elixir 都是函数式语言,它们可以使

Read More

使用 Rebar3 构建您的第一个 Erlang 应用程序

Rebar3 是 Erlang 的构建工具和包管理工具。借助 [Rebar3](http://www.rebar3.org/)及其[Hex](https://hex.pm/)插件,创建和发布您的 Erlang 包非常简单。让我们做一个简单的“hello world”包,尝试一下吧! ## 下载 Rebar3 在此处下载最新版本:http://www.re

Read More

使用 Redbug 跟踪 Erlang

在过去的一年半里,我一直在全职使用 Erlang 进行编程。当涉及到复杂的分布式应用程序时,我认为没有任何其他语言或框架可以击败它。就我而言,它最大的优点是能够跟踪代码和消息的执行,甚至可以跨集群中的节点。 常规的代码单步调试对于简单的程序非常有用,但要让代码在具有多核的不同机器上每秒执行数千个任务是不可能的。在 Erlang 中进行跟踪可以让您查看在哪些

Read More

使用rebar生成releases和upgrades

在我对 rebar 的实验中,我制作了一个简单的示例应用程序来测试upgrades和releases。本文将引导您使用 rebar 创建应用程序、正确布局、打包和部署它,以及创建和安装新版本而无需停机。 本文随附的代码位于[github.com/RJ/erlang_rebar_example_project](https://github.com/RJ/e

Read More

停止 Erlang VM 的 10 种方法

您是否有一个不再需要的 Erlang VM 并且您不知道如何处理它?不用担心,我的朋友,这只是给你的清单!系好你的安全带,进入你的旧冰箱……**我们会撞坏东西的**! ## 好的方法 有几种方法可以很好地关闭 Erlang VM…… ### 1. q/0, c:q/0, init:stop/0 正如[文档](https://erldocs.com/c

Read More

再探Erlang JIT

这篇文章是初识Erlang JIT的后续文章,更深入地挖掘了实现细节。 虽然用机器代码(汇编程序)编写东西给了你很大的自由,但它的代价是必须自己发明几乎所有东西,而且没有聪明的编译器可以帮助你发现错误。例如,如果您以某种方式调用一个函数并且该函数与预期不一致,那么充其量您会使操作系统进程崩溃,或者最坏的情况是花费数小时追逐一个[heisenbug](htt

Read More

初识Erlang JIT

现在我们已经了解了[BEAM](http://blog.erlang.org/a-brief-BEAM-primer/)和[解释器](http://blog.erlang.org/a-closer-look-at-the-interpreter/),我们将探索 OTP 24 中最令人兴奋的新增功能之一:即时编译器,或简称为“JIT”。 如果你和我一样,“J

Read More

在Erlang 中初步应用TDD

在FutureLearn MOOC 关于 [Erlang的课程](https://www.futurelearn.com/courses/functional-programming-erlang/)中担任导师时,我提出了一个人们喜欢的想法。事实上,这是我在教授 Erlang 时向人们介绍模式匹配的方式。这是一种编写测试的方法,让您可以自然地从中提取代码……

Read More

在Erlang应用程序中查找内存泄漏

作为用 Erlang 编写的网络模拟器的一部分,我通常会遇到很多关于由于对非常大的代码库维护不当而导致的性能和内存泄漏的问题。我们在一个 Linux 机器上启动了近 250 多个 Erlang 节点来模拟大约 500 到 1000 多个电信节点。 通过静态检查代码来查找内存泄漏是一项非常困难的任务。相信我,我发现在运行时本身很容易找到内存泄漏。 > 什么

Read More

将 Erlang 和 Elixir 安装到 Apple Silicon Mac 的完美步骤

在本文中,我将展示使用 Homebrew 和 asdf 从头开始将 Erlang 和 Elixir 安装到 Apple Silicon Mac 的完美步骤。 ## 1.升级macOS(如果是CPU芯片是M1) 对于 M1 Pro/Max,您可以跳过此步骤。 如果CPU芯片是 M1,预装的 macOS 是 Big Sur。 因此,首先,您需要将 macO

Read More

消息传递(Message passing)的注意事项

消息传递一直是 Erlang 的核心,虽然有合理的文档记录,但我们避免了过多的细节,以便在实现时给我们更多的自由。不过,没有什么能阻止我们在博客文章中描述它,所以让我们仔细看看吧! Erlang 进程通过相互发送信号来相互通信 (不要与 Unix 信号混淆)。有许多不同的类型, 消息只是最常见的。实际上,涉及多个进程的所有事情都在内部使用信号:例如,该li

Read More

重写 Playdar:从C++ 到 Erlang,编程效率提升

我以前听说过很多编程轶事声称,当您使用 Erlang 而不是 \[C++/其他语言\] 编写时,可以节省多少行代码。我很高兴地告诉大家,我现在有第一手经验和一些数据可以分享。 我最初是用 C++ 编写 Playdar(使用 Boost 和 Asio 库),从今年 2 月开始。我很幸运能与一些经验丰富的开发人员一起工作,是他们帮助我熟悉了 C++。直到几个月

Read More