Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

https://github.com/llaisdy/beam_languages

Languages, and about languages, on the BEAM
https://github.com/llaisdy/beam_languages

Last synced: 16 days ago
JSON representation

Languages, and about languages, on the BEAM

Lists

README

        

* Languages, and about languages, on the BEAM

** Contents :TOC:
- [[#languages-and-about-languages-on-the-beam][Languages, and about languages, on the BEAM]]
- [[#overview][Overview]]
- [[#34-languages-on-the-beam][34 Languages on the BEAM]]
- [[#about-languages][About Languages]]
- [[#about-the-beam][About the BEAM]]
- [[#erlang-and-types][Erlang and Types]]

** 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 [[#lisps][Lisp-influenced]] languages,
then the 15 [[#statically-typed-languages][statically-typed]] languages,
then the 13 [[#etc][others]]. Including Erlang,
that's 34 languages in all.

*** erlang itself

- http://www.erlang.org/
- https://github.com/erlang/otp

*** lisps
**** clojerl (2015+)

clojerl - Clojure for the Erlang VM

- http://clojerl.org/
- http://try.clojerl.online/
- https://github.com/clojerl/clojerl

**** joxa (2011+)

- http://joxa.org/
- https://github.com/joxa/joxa
- https://joxa.readthedocs.org/

***** Differences Between Joxa and LFE

- Eric Merritt
- 2012/02/21
- http://blog.ericbmerritt.com/2012/02/21/differences-between-joxa-and-lfe.html

***** Joxa: A Full Featured Lisp on the Erlang VM

- Eric Merritt
- 2012/08/22
- https://vimeo.com/49116180

**** kapok (2015-2018)

- https://github.com/kapok-lang/kapok

**** lfe (2008+)

- http://lfe.io/
- https://github.com/rvirding/lfe

**** 'the concurrent schemer' (2013-2014)

- http://the-concurrent-schemer.github.io/scm-doc/
- https://github.com/the-concurrent-schemer/scm

*** statically-typed languages
**** alpaca (2016+)

- https://github.com/alpaca-lang/alpaca

**** caramel (2020?+)

An Erlang backend to the OCaml compiler

- https://caramel.run/
- https://github.com/AbstractMachinesLab/caramel

**** cuneiform (2013+)

- https://cuneiform-lang.org
- https://github.com/joergen7/cuneiform
- https://en.wikipedia.org/wiki/Cuneiform_(programming_language)

**** elchemy (2017+)

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

- https://wende.github.io/elchemy/
- https://github.com/wende/elchemy

**** eml (2012)

"eml - Erlang flavored by Some ML"

- https://github.com/etnt/eml

**** fez (2017+)

fez - fsharp to core erlang compiler experiment

- https://github.com/kjnilsson/fez

**** fika (2020)

A statically typed functional programming language for the web

- https://github.com/fika-lang/fika

**** gleam (2016+)

gleam - "A statically typed language for the Erlang VM"

- https://gleam.run
- https://github.com/gleam-lang/gleam

**** hamler (2020)

Haskell-style functional programming language running on Erlang VM.

- https://github.com/hamler-lang/hamler
- https://hamler-lang.org/

**** haskerl et al. (1993-2014)

- https://github.com/etnt/Haskerl

- 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)

- https://github.com/lenary/idris-erlang

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).

- https://github.com/chrrasmussen/Idris2-Erlang

**** purerl (2016+)

Erlang backend for PureScript

- https://github.com/purerl/purerl
- https://purerl.fun/

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

**** rufus (2018+)

"A general-purpose programming language for the BEAM"

- https://github.com/rufus-lang/rufus

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

- https://github.com/rufus-lang/rufus/blob/main/rufus-lang.org/public/doc/spec.md

Looks like it's implemented in erlang too!

**** sesterl (2020+)

A "Session-Typed Erlang", an ML-inspired statically-typed Erlang

- https://github.com/gfngfn/Sesterl

- [[https://github.com/gfngfn/the_sesterl_book][The Sesterl Book]]
- [[https://blog.michallepicki.com/notes-on-using-sesterl.html][Notes on using Sesterl]]
- [[https://github.com/gfngfn/game_tianjiupai][Sample game reference based on Elm and Sesterl]]

*** etc
**** efene (2009+)

- http://efene.org/
- https://github.com/efene/efene

**** elixir (2011+)

- http://elixir-lang.org/
- https://github.com/elixir-lang/elixir

**** ephp (2013+)

An erlang interpreter for PHP

- https://github.com/bragful/ephp

Presumably as used by [[https://bragful.com][Bragful]] --- "A resilient and scalable PHP".

**** erl2 (2012)

- https://github.com/joearms/erl2

- 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)

- https://github.com/rvirding/erlog

***** Backtracking in Erlang, part 1 - control

- Robert Virding
- 2009/03/18
- http://rvirding.blogspot.co.uk/2009/03/backtracking-in-erlang-part-1-control.html

**** erlyjs (2008-2013)

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

- https://github.com/KlausTrainer/erlyjs

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)

- https://github.com/tonyrog/ffe

**** interfix (2015)

- https://github.com/marianoguerra/interfix

**** luerl (2012+)

- https://github.com/rvirding/luerl

**** OTPCL (2017+)

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

- https://otpcl.github.io/
- https://github.com/otpcl/otpcl

**** reia (-2012)

- http://reia-lang.org/
- https://github.com/tarcieri/reia

**** 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.

- https://github.com/zotonic/template_compiler
- https://test.zotonic.com/page/1352/templates

**** xerl (2013)

- https://github.com/extend/xerl

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)
- Robert Virding & Mariano Guerra
- 2018/05/17 (Erlang Solutions Webinar)
- https://www.youtube.com/watch?v=0MTiqI9v-ck

*** Implementing languages on the BEAM (3)

(video)
- Robert Virding & Mariano Guerra
- 2018/03/06 (CodeBEAM SF)
- https://www.youtube.com/watch?v=lkAbwmn5Rv8

*** Efene and the BEAM Community

(slides & video)
- Mariano Guerra
- 2017/06/06 (EUC)
- http://www.erlang-factory.com/euc2017/mariano-guerra

*** How BEAMs are made

Slides with link to github repo

- Mariano Guerra
- 2016/10 (BEAM BA Meetup)
- http://marianoguerra.org/talks/beamba-buenos-aires-meetup/#/how-beams-are-made

*** 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)

- Federico Carrone
- 2015/08/11
- https://medium.com/this-is-not-a-monad-tutorial/eric-merritt-erlang-and-distributed-systems-expert-gives-his-views-on-beam-languages-hindley-a09b15f53a2f

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

(slides)
- Hamidreza Soleimani
- 2015/08/06
- https://www.slideshare.net/hamidreza-s/create-your-own-language

*** Implementing Languages on the BEAM (2)

(slides & video)
- Robert Virding
- 2014/11/04 (Codemesh 2014)
- http://www.codemesh.io/codemesh2014/robert-virding

*** Implementing Languages on the BEAM (1)

(video)
- Robert Virding
- 2014/10/29 (London Erlang UG)
- https://www.youtube.com/watch?v=qm0mbQbc9Kc

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

(slides)
- Brian Troutwine
- 2014/07/23
- http://www.slideshare.net/BrianTroutwine1/erlang-lfe-elixir-and-joxa-oscon-2014

** 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)
- Simon Marlow & Philip Wadler
- 1997
- http://homepages.inf.ed.ac.uk/wadler/papers/erlang/erlang.pdf

*** The great type hope (2002)

(slides)
- Philip Wadler
- 2002
- http://homepages.inf.ed.ac.uk/wadler/papers/erlang/erlang-slides.pdf

*** Pure Type System for Erlang (2014+)

- Namdak Tonpa
- 2013
- Paper: http://aip.scitation.org/doi/pdf/10.1063/1.5045439
- Code: https://github.com/groupoid/pure

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

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

- https://github.com/josefs/Gradualizer

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

- http://scheme2006.cs.uchicago.edu/13-siek.pdf.

*** 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.

- https://github.com/WhatsApp/erlt

*** Bidirectional typing for Erlang (2021)

Erlang Type Checker Prototype Based on Bidirectional Typechecking.

- Nithin Vadukkumchery Rajendrakumar, Annette Bieniusa
- Paper: https://dl.acm.org/doi/10.1145/3471871.3472966
- Video: https://youtube.com/watch?v=MAerjPQUKQQ
- Code: https://github.com/vrnithinkumar/ETC