├── .gitignore └── README.org /.gitignore: -------------------------------------------------------------------------------- 1 | *~ 2 | 3 | -------------------------------------------------------------------------------- /README.org: -------------------------------------------------------------------------------- 1 | * Languages, and about languages, on the BEAM 2 | 3 | ** Contents :TOC: 4 | - [[#languages-and-about-languages-on-the-beam][Languages, and about languages, on the BEAM]] 5 | - [[#overview][Overview]] 6 | - [[#34-languages-on-the-beam][34 Languages on the BEAM]] 7 | - [[#about-languages][About Languages]] 8 | - [[#about-the-beam][About the BEAM]] 9 | - [[#erlang-and-types][Erlang and Types]] 10 | 11 | ** Overview 12 | 13 | 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. 14 | 15 | 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, ...). 16 | 17 | 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.). 18 | 19 | Thank you. 20 | 21 | ** 34 Languages on the BEAM 22 | 23 | First Erlang itself, 24 | then the 5 [[#lisps][Lisp-influenced]] languages, 25 | then the 15 [[#statically-typed-languages][statically-typed]] languages, 26 | then the 13 [[#etc][others]]. Including Erlang, 27 | that's 34 languages in all. 28 | 29 | *** erlang itself 30 | 31 | - http://www.erlang.org/ 32 | - https://github.com/erlang/otp 33 | 34 | *** lisps 35 | **** clojerl (2015+) 36 | 37 | clojerl - Clojure for the Erlang VM 38 | 39 | - http://clojerl.org/ 40 | - http://try.clojerl.online/ 41 | - https://github.com/clojerl/clojerl 42 | 43 | **** joxa (2011+) 44 | 45 | - http://joxa.org/ 46 | - https://github.com/joxa/joxa 47 | - https://joxa.readthedocs.org/ 48 | 49 | ***** Differences Between Joxa and LFE 50 | 51 | - Eric Merritt 52 | - 2012/02/21 53 | - http://blog.ericbmerritt.com/2012/02/21/differences-between-joxa-and-lfe.html 54 | 55 | ***** Joxa: A Full Featured Lisp on the Erlang VM 56 | 57 | - Eric Merritt 58 | - 2012/08/22 59 | - https://vimeo.com/49116180 60 | 61 | **** kapok (2015-2018) 62 | 63 | - https://github.com/kapok-lang/kapok 64 | 65 | **** lfe (2008+) 66 | 67 | - http://lfe.io/ 68 | - https://github.com/rvirding/lfe 69 | 70 | **** 'the concurrent schemer' (2013-2014) 71 | 72 | - http://the-concurrent-schemer.github.io/scm-doc/ 73 | - https://github.com/the-concurrent-schemer/scm 74 | 75 | *** statically-typed languages 76 | **** alpaca (2016+) 77 | 78 | - https://github.com/alpaca-lang/alpaca 79 | 80 | **** caramel (2020?+) 81 | 82 | An Erlang backend to the OCaml compiler 83 | 84 | - https://caramel.run/ 85 | - https://github.com/AbstractMachinesLab/caramel 86 | 87 | **** cuneiform (2013+) 88 | 89 | - https://cuneiform-lang.org 90 | - https://github.com/joergen7/cuneiform 91 | - https://en.wikipedia.org/wiki/Cuneiform_(programming_language) 92 | 93 | **** elchemy (2017+) 94 | 95 | An Elm syntax front-end for Elixir (i.e., converts Elm-style input language into Elixir source code). 96 | 97 | - https://wende.github.io/elchemy/ 98 | - https://github.com/wende/elchemy 99 | 100 | **** eml (2012) 101 | 102 | "eml - Erlang flavored by Some ML" 103 | 104 | - https://github.com/etnt/eml 105 | 106 | **** fez (2017+) 107 | 108 | fez - fsharp to core erlang compiler experiment 109 | 110 | - https://github.com/kjnilsson/fez 111 | 112 | **** fika (2020) 113 | 114 | A statically typed functional programming language for the web 115 | 116 | - https://github.com/fika-lang/fika 117 | 118 | **** gleam (2016+) 119 | 120 | gleam - "A statically typed language for the Erlang VM" 121 | 122 | - https://gleam.run 123 | - https://github.com/gleam-lang/gleam 124 | 125 | **** hamler (2020) 126 | 127 | Haskell-style functional programming language running on Erlang VM. 128 | 129 | - https://github.com/hamler-lang/hamler 130 | - https://hamler-lang.org/ 131 | 132 | **** haskerl et al. (1993-2014) 133 | 134 | - https://github.com/etnt/Haskerl 135 | 136 | - The Haskerl Index :: 137 | http://www.dcs.gla.ac.uk/~partain/haskerl.html 138 | 139 | - Yhc/Erlang/Proof of concept :: 140 | https://wiki.haskell.org/Yhc/Erlang/Proof_of_concept 141 | 142 | **** idris-erlang (2014-17) 143 | 144 | - https://github.com/lenary/idris-erlang 145 | 146 | This is an Idris package (therefore requiring Haskell and Idris) which compiles Idris source code into erlang source code. 147 | 148 | **** idris2-erlang (2020+) 149 | 150 | An Erlang code generator for Idris 2 (eg compiles Idris 2 programs to Erlang source code or to BEAM). 151 | 152 | - https://github.com/chrrasmussen/Idris2-Erlang 153 | 154 | **** purerl (2016+) 155 | 156 | Erlang backend for PureScript 157 | 158 | - https://github.com/purerl/purerl 159 | - https://purerl.fun/ 160 | 161 | - Introducing PureScript Erlang :: 162 | http://nwolverson.uk/devlog/2016/08/01/introducing-purescript-erlang.html 163 | 164 | **** rufus (2018+) 165 | 166 | "A general-purpose programming language for the BEAM" 167 | 168 | - https://github.com/rufus-lang/rufus 169 | 170 | There's website source, but no website. Some docs, eg here: 171 | 172 | - https://github.com/rufus-lang/rufus/blob/main/rufus-lang.org/public/doc/spec.md 173 | 174 | Looks like it's implemented in erlang too! 175 | 176 | **** sesterl (2020+) 177 | 178 | A "Session-Typed Erlang", an ML-inspired statically-typed Erlang 179 | 180 | - https://github.com/gfngfn/Sesterl 181 | 182 | - [[https://github.com/gfngfn/the_sesterl_book][The Sesterl Book]] 183 | - [[https://blog.michallepicki.com/notes-on-using-sesterl.html][Notes on using Sesterl]] 184 | - [[https://github.com/gfngfn/game_tianjiupai][Sample game reference based on Elm and Sesterl]] 185 | 186 | *** etc 187 | **** efene (2009+) 188 | 189 | - http://efene.org/ 190 | - https://github.com/efene/efene 191 | 192 | **** elixir (2011+) 193 | 194 | - http://elixir-lang.org/ 195 | - https://github.com/elixir-lang/elixir 196 | 197 | **** ephp (2013+) 198 | 199 | An erlang interpreter for PHP 200 | 201 | - https://github.com/bragful/ephp 202 | 203 | Presumably as used by [[https://bragful.com][Bragful]] --- "A resilient and scalable PHP". 204 | 205 | **** erl2 (2012) 206 | 207 | - https://github.com/joearms/erl2 208 | 209 | - Announcement and ensuing discussion on erlang-questions :: 210 | http://erlang.org/pipermail/erlang-questions/2012-February/064687.html 211 | 212 | - "A Few Improvements to Erlang" (EUC 2012) :: 213 | http://www.erlang-factory.com/conference/ErlangUserConference2012/speakers/joearmstrong 214 | 215 | - A blog post about the above presentation in Chinese :: 216 | http://www.cnblogs.com/me-sa/archive/2012/06/06/2538941.html 217 | 218 | **** erlog (2008-2018) 219 | 220 | - https://github.com/rvirding/erlog 221 | 222 | ***** Backtracking in Erlang, part 1 - control 223 | 224 | - Robert Virding 225 | - 2009/03/18 226 | - http://rvirding.blogspot.co.uk/2009/03/backtracking-in-erlang-part-1-control.html 227 | 228 | **** erlyjs (2008-2013) 229 | 230 | The original repo (on Google Code) no longer exists, but there are several forks, e.g.: 231 | 232 | - https://github.com/KlausTrainer/erlyjs 233 | 234 | A couple of blog posts from 2008 (the second is by the original developer of erlyjs): 235 | 236 | - ErlyJS: JavaScript on Erlang :: 237 | http://ajaxian.com/archives/erlyjs-javascript-on-erlang 238 | 239 | - ErlyJS - translating Javascript to Erlang :: 240 | http://rsaccon.blogspot.co.uk/2008/02/erlyjs-translating-javascript-to-erlang.html 241 | 242 | **** ffe: Forth-flavoured Erlang (2014-2016) 243 | 244 | - https://github.com/tonyrog/ffe 245 | 246 | **** interfix (2015) 247 | 248 | - https://github.com/marianoguerra/interfix 249 | 250 | **** luerl (2012+) 251 | 252 | - https://github.com/rvirding/luerl 253 | 254 | **** OTPCL (2017+) 255 | 256 | Open Telecom Platform Command Language: "a scripting language designed to integrate with and extend applications written in BEAM-based languages" 257 | 258 | - https://otpcl.github.io/ 259 | - https://github.com/otpcl/otpcl 260 | 261 | **** reia (-2012) 262 | 263 | - http://reia-lang.org/ 264 | - https://github.com/tarcieri/reia 265 | 266 | **** template_compiler (2016-) 267 | 268 | This compiler is a complete rewrite of the Erlang Django (ErlyDTL) template language fork used in Zotonic. In contrast with ErlyDTL 269 | the template_compiler generates small Erlang modules which are shared between different templates and sites. 270 | 271 | - https://github.com/zotonic/template_compiler 272 | - https://test.zotonic.com/page/1352/templates 273 | 274 | **** xerl (2013) 275 | 276 | - https://github.com/extend/xerl 277 | 278 | Five web articles in 2013 starting with: 279 | 280 | - Xerl: empty modules (2013/01/30) :: 281 | http://ninenines.eu/articles/xerl-0.1-empty-modules/ 282 | 283 | ** About Languages 284 | 285 | *** Implementing languages on the BEAM (4) 286 | 287 | (video) 288 | - Robert Virding & Mariano Guerra 289 | - 2018/05/17 (Erlang Solutions Webinar) 290 | - https://www.youtube.com/watch?v=0MTiqI9v-ck 291 | 292 | *** Implementing languages on the BEAM (3) 293 | 294 | (video) 295 | - Robert Virding & Mariano Guerra 296 | - 2018/03/06 (CodeBEAM SF) 297 | - https://www.youtube.com/watch?v=lkAbwmn5Rv8 298 | 299 | *** Efene and the BEAM Community 300 | 301 | (slides & video) 302 | - Mariano Guerra 303 | - 2017/06/06 (EUC) 304 | - http://www.erlang-factory.com/euc2017/mariano-guerra 305 | 306 | *** How BEAMs are made 307 | 308 | Slides with link to github repo 309 | 310 | - Mariano Guerra 311 | - 2016/10 (BEAM BA Meetup) 312 | - http://marianoguerra.org/talks/beamba-buenos-aires-meetup/#/how-beams-are-made 313 | 314 | *** Eric Merritt, Erlang and distributed systems expert, gives his views on BEAM languages, Hindley–Milner type systems and new technologies 315 | 316 | (article/interview, with links to podcast & video) 317 | 318 | - Federico Carrone 319 | - 2015/08/11 320 | - https://medium.com/this-is-not-a-monad-tutorial/eric-merritt-erlang-and-distributed-systems-expert-gives-his-views-on-beam-languages-hindley-a09b15f53a2f 321 | 322 | *** Create Your Own Language: How to implement a language on top of Erlang Virtual Machine (BEAM) 323 | 324 | (slides) 325 | - Hamidreza Soleimani 326 | - 2015/08/06 327 | - https://www.slideshare.net/hamidreza-s/create-your-own-language 328 | 329 | *** Implementing Languages on the BEAM (2) 330 | 331 | (slides & video) 332 | - Robert Virding 333 | - 2014/11/04 (Codemesh 2014) 334 | - http://www.codemesh.io/codemesh2014/robert-virding 335 | 336 | *** Implementing Languages on the BEAM (1) 337 | 338 | (video) 339 | - Robert Virding 340 | - 2014/10/29 (London Erlang UG) 341 | - https://www.youtube.com/watch?v=qm0mbQbc9Kc 342 | 343 | *** Erlang, LFE, Joxa and Elixir: Established and Emerging Languages in the Erlang Ecosystem 344 | 345 | (slides) 346 | - Brian Troutwine 347 | - 2014/07/23 348 | - http://www.slideshare.net/BrianTroutwine1/erlang-lfe-elixir-and-joxa-oscon-2014 349 | 350 | ** About the BEAM 351 | 352 | *** The BEAM Book 353 | 354 | A description of the Erlang Runtime System ERTS and the virtual Machine BEAM 355 | https://github.com/happi/theBeamBook 356 | 357 | *** The BEAM Toolbox 358 | 359 | A list of tools and libraries that are useful for BEAM languages like efene, erlang, LFE and Elixir projects. 360 | http://efene.org/toolbox.html 361 | 362 | ** Erlang and Types 363 | 364 | These first two papers are linked from Philip Wadler's erlang page: http://homepages.inf.ed.ac.uk/wadler/topics/erlang.html 365 | 366 | *** A practical subtyping system for Erlang (1997) 367 | 368 | (paper) 369 | - Simon Marlow & Philip Wadler 370 | - 1997 371 | - http://homepages.inf.ed.ac.uk/wadler/papers/erlang/erlang.pdf 372 | 373 | *** The great type hope (2002) 374 | 375 | (slides) 376 | - Philip Wadler 377 | - 2002 378 | - http://homepages.inf.ed.ac.uk/wadler/papers/erlang/erlang-slides.pdf 379 | 380 | *** Pure Type System for Erlang (2014+) 381 | 382 | - Namdak Tonpa 383 | - 2013 384 | - Paper: http://aip.scitation.org/doi/pdf/10.1063/1.5045439 385 | - Code: https://github.com/groupoid/pure 386 | 387 | *** Gradualizer: A Gradual Type System for Erlang (2018+) 388 | 389 | A gradual typing system and static code analysis tool for Erlang. 390 | 391 | - https://github.com/josefs/Gradualizer 392 | 393 | The type system is based on "Gradual Typing for Functional Languages" (Siek & Taha, 2006) (see doc/GTLC.hs): 394 | 395 | - http://scheme2006.cs.uchicago.edu/13-siek.pdf. 396 | 397 | *** ErlT - experimental erlang dialect (2021) 398 | 399 | Facebook's abandoned project to add first-class support for static typing to erlang. Github repo archived and read-only. 400 | 401 | - https://github.com/WhatsApp/erlt 402 | 403 | *** Bidirectional typing for Erlang (2021) 404 | 405 | Erlang Type Checker Prototype Based on Bidirectional Typechecking. 406 | 407 | - Nithin Vadukkumchery Rajendrakumar, Annette Bieniusa 408 | - Paper: https://dl.acm.org/doi/10.1145/3471871.3472966 409 | - Video: https://youtube.com/watch?v=MAerjPQUKQQ 410 | - Code: https://github.com/vrnithinkumar/ETC 411 | --------------------------------------------------------------------------------