Comparison of Compile-to-JavaScript Languages
— 265 Words — 2 min
Human Readable JavaScript
Gleam
Website: gleam.run
Playground: tour.gleam.run
gleam new my-app
Add target = "javascript"
to gleam.toml
pub fn add(num1, num2) {
num1 + num2
}
export function add(num1, num2) {
return num1 + num2;
}
Pros
- Very clean JavaScript output
ReScript
Website: rescript-lang.org
Playground: rescript-lang.org/try
let add = (num1, num2) =>
num1 + num2
function add(num1, num2) {
return num1 + num2 | 0;
}
export {
add ,
}
PureScript
Website: purescript.org
Playground: try.purescript.org
purs init
module Add where
import Prelude
add :: Int -> Int -> Int
add num1 num2 =
num1 + num2
var add = function (num1) {
return function (num2) {
return num1 + num2 | 0;
};
};
export {
add
};
Elm
Website: elm-lang.org
Playground: ellie-app.com
module Add exposing (..)
add : Int -> Int -> Int
add num1 num2 =
num1 + num2
var $author$project$Add$add = F2(
function (num1, num2) {
return num1 + num2;
});
Gren
Website: gren-lang.org
OCaml
Website: ocaml.org
Playground: melange.re/v5.0.0/playground
let add num1 num2 =
num1 + num2
function add(num1, num2) {
return num1 + num2 | 0;
}
export {
add,
}
Alternatives:
F#
Website: fable.io
Playground: fable.io/repl
let add num1 num2 =
num1 + num2
export function add(num1, num2) {
return num1 + num2;
}
Scala
Website: scala-js.org
Playgrounds:
def add(num1: Int, num2: Int): Int = {
return num1 + num2
}
todo
V Lang
Website: vlang.io
Playground: play.vlang.io
Docs: docs.vlang.io/debugging#javascript-backend
From play.vlang.io/p/88b5d16294:
fn add(num1 int, num2 int) int {
return num1 + num2
}
function main__add(num1, num2) {
try {
return new int( num1.valueOf() + num2.valueOf());
} catch (e) {
if (e instanceof ReturnException) { return e.val; }
throw e;
}
}
Lean
Website: lean-lang.org
[!WARNING] Does currently not work: https://github.com/leanprover/lean4/issues/398
brew install elan
elan default leanprover/lean4:stable
Idris
Docs: docs.idris-lang.org/en/latest/reference/codegen.html#javascript
def add (num1 : Nat) (num2 : Nat) : Nat :=
num1 + num2
Agda
Website: wiki.portal.chalmers.se/agda/pmwiki.php
Docs: agda.readthedocs.io/en/v2.5.2/tools/compilers.html#javascript-backend
Koka
Website: koka-lang.github.io
Docs: koka-lang.github.io/koka/doc/book
koka --target=js koka/add.kk
fun add( num1 : int, num2 : int )
num1 + num2
todo
WASM
Rust
Website: rust-lang.org
Haskell
Website: haskell.org
Futhark
Website: futhark-lang.org
Docs: futhark.readthedocs.io/en/latest/js-api
Luau
Website: luau.org
Playground: luau.org/demo
If you have any comments, thoughts, or other feedback feel free to write me @AdrianSieber. Thanks for your help! 😊