Earl is an Emacs Lisp library for communicating with Erlang nodes, that provides an Erlang-like process concurrency abstraction. In other words, it is full rewrite of the library part of Distel, differing in the following ways:
-
Processes run generator functions defined via the
generatorpackage, meaning they do not have to be manually written in trampolined style.This makes
receiveexpressions easier to write since thesaved-varsargument becomes unnecessary. -
Pattern matching for
receiveexpressions usespcasepatterns, instead of a bespoke syntax. -
Processes are not backed by Emacs buffers.
Therefore, the main Emacs Lisp execution context can be an implicit process, meaning it is possible to use
receiveeverywhere instead of only in functions passed tospawn. -
Works with newer Erlang/OTP releases (at least 25 and 26).
-
Modernized code base (e.g. uses lexical binding).
Some features of the Distel extended Erlang editing mode are planned:
- Expression evaluation
- Completion-at-point function
- Xref backend
- Eldoc documentation function
- Reloading modified modules
Everything else, such as debugger and profiler integration, is out of scope, with the intention that the public API should allow for those things to be implemented separately.