• Stars
    star
    704
  • Rank 64,316 (Top 2 %)
  • Language
  • Created about 9 years ago
  • Updated over 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Languages, and about languages, on the BEAM

Languages, and about languages, on the BEAM

Contents

Overview

This document is intended to list (a) languages implemented to run on the BEAM, the Erlang virtual machine, and (b) documents (articles & presentations) about the hows and whys of writing languages to run on the BEAM.

For the moment, and for want of a better name, I call such languages “BEAM languages” (although I have heard that there are other Erlang VMs, …).

I would like the document to be comprehensive, or at least “representative”. If I have missed a BEAM language, some noteworthy discussion about a BEAM language, or documentation about implementing languages targetting the BEAM, please let me know through the usual channels (issues, forks, PRs, tweets, emails, etc.).

Thank you.

34 Languages on the BEAM

First Erlang itself, then the 5 Lisp-influenced languages, then the 15 statically-typed languages, then the 13 others. Including Erlang, that’s 34 languages in all.

erlang itself

lisps

clojerl (2015+)

clojerl - Clojure for the Erlang VM

joxa (2011+)

Differences Between Joxa and LFE
Joxa: A Full Featured Lisp on the Erlang VM

kapok (2015-2018)

lfe (2008+)

‘the concurrent schemer’ (2013-2014)

statically-typed languages

alpaca (2016+)

caramel (2020?+)

An Erlang backend to the OCaml compiler

cuneiform (2013+)

elchemy (2017+)

An Elm syntax front-end for Elixir (i.e., converts Elm-style input language into Elixir source code).

eml (2012)

“eml - Erlang flavored by Some ML”

fez (2017+)

fez - fsharp to core erlang compiler experiment

fika (2020)

A statically typed functional programming language for the web

gleam (2016+)

gleam - “A statically typed language for the Erlang VM”

hamler (2020)

Haskell-style functional programming language running on Erlang VM.

haskerl et al. (1993-2014)

The Haskerl Index
http://www.dcs.gla.ac.uk/~partain/haskerl.html
Yhc/Erlang/Proof of concept
https://wiki.haskell.org/Yhc/Erlang/Proof_of_concept

idris-erlang (2014-17)

This is an Idris package (therefore requiring Haskell and Idris) which compiles Idris source code into erlang source code.

idris2-erlang (2020+)

An Erlang code generator for Idris 2 (eg compiles Idris 2 programs to Erlang source code or to BEAM).

purerl (2016+)

Erlang backend for PureScript

Introducing PureScript Erlang
http://nwolverson.uk/devlog/2016/08/01/introducing-purescript-erlang.html

rufus (2018+)

“A general-purpose programming language for the BEAM”

There’s website source, but no website. Some docs, eg here:

Looks like it’s implemented in erlang too!

sesterl (2020+)

A “Session-Typed Erlang”, an ML-inspired statically-typed Erlang

etc

efene (2009+)

elixir (2011+)

ephp (2013+)

An erlang interpreter for PHP

Presumably as used by Bragful — “A resilient and scalable PHP”.

erl2 (2012)

Announcement and ensuing discussion on erlang-questions
http://erlang.org/pipermail/erlang-questions/2012-February/064687.html
“A Few Improvements to Erlang” (EUC 2012)
http://www.erlang-factory.com/conference/ErlangUserConference2012/speakers/joearmstrong
A blog post about the above presentation in Chinese
http://www.cnblogs.com/me-sa/archive/2012/06/06/2538941.html

erlog (2008-2018)

Backtracking in Erlang, part 1 - control

erlyjs (2008-2013)

The original repo (on Google Code) no longer exists, but there are several forks, e.g.:

A couple of blog posts from 2008 (the second is by the original developer of erlyjs):

ErlyJS: JavaScript on Erlang
http://ajaxian.com/archives/erlyjs-javascript-on-erlang
ErlyJS - translating Javascript to Erlang
http://rsaccon.blogspot.co.uk/2008/02/erlyjs-translating-javascript-to-erlang.html

ffe: Forth-flavoured Erlang (2014-2016)

interfix (2015)

luerl (2012+)

OTPCL (2017+)

Open Telecom Platform Command Language: “a scripting language designed to integrate with and extend applications written in BEAM-based languages”

reia (-2012)

template_compiler (2016-)

This compiler is a complete rewrite of the Erlang Django (ErlyDTL) template language fork used in Zotonic. In contrast with ErlyDTL the template_compiler generates small Erlang modules which are shared between different templates and sites.

xerl (2013)

Five web articles in 2013 starting with:

Xerl: empty modules (2013/01/30)
http://ninenines.eu/articles/xerl-0.1-empty-modules/

About Languages

Implementing languages on the BEAM (4)

(video)

Implementing languages on the BEAM (3)

(video)

Efene and the BEAM Community

(slides & video)

How BEAMs are made

Slides with link to github repo

Eric Merritt, Erlang and distributed systems expert, gives his views on BEAM languages, Hindley–Milner type systems and new technologies

(article/interview, with links to podcast & video)

Create Your Own Language: How to implement a language on top of Erlang Virtual Machine (BEAM)

(slides)

Implementing Languages on the BEAM (2)

(slides & video)

Implementing Languages on the BEAM (1)

(video)

Erlang, LFE, Joxa and Elixir: Established and Emerging Languages in the Erlang Ecosystem

(slides)

About the BEAM

The BEAM Book

A description of the Erlang Runtime System ERTS and the virtual Machine BEAM https://github.com/happi/theBeamBook

The BEAM Toolbox

A list of tools and libraries that are useful for BEAM languages like efene, erlang, LFE and Elixir projects. http://efene.org/toolbox.html

Erlang and Types

These first two papers are linked from Philip Wadler’s erlang page: http://homepages.inf.ed.ac.uk/wadler/topics/erlang.html

A practical subtyping system for Erlang (1997)

(paper)

The great type hope (2002)

(slides)

Pure Type System for Erlang (2014+)

Gradualizer: A Gradual Type System for Erlang (2018+)

A gradual typing system and static code analysis tool for Erlang.

The type system is based on “Gradual Typing for Functional Languages” (Siek & Taha, 2006) (see doc/GTLC.hs):

ErlT - experimental erlang dialect (2021)

Facebook’s abandoned project to add first-class support for static typing to erlang. Github repo archived and read-only.

Bidirectional typing for Erlang (2021)

Erlang Type Checker Prototype Based on Bidirectional Typechecking.