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! 😊