PureScript ist eine rein funktionale Programmiersprache, die nach JavaScript kompiliert. Sie wurde ab 2013 von Phil Freeman entwickelt und überträgt Ideen aus Haskell-Befehle (Typklassen, Algebraische Datentypen, Pattern Matching) in die Web-Welt — mit strikter Auswertung und einem expliziten Effektsystem.
Compiler und Build-Tool
purs --version # Compiler-Version anzeigen
purs compile src/*.purs # kompiliert nach output/ (CommonJS-Module)
purs repl # interaktive REPL
purs docs 'Main' # HTML-Dokumentation für ein Modul erzeugen
Der Compiler heißt purs. Als Build-Tool und Paketmanager hat sich Spago etabliert; ältere Projekte nutzten pulp zusammen mit psc-package.
Spago-Befehle
spago init # neues Projekt mit src/ und test/ anlegen
spago install # Abhängigkeiten aus dem Package Set installieren
spago build # Projekt bauen (auch --watch möglich)
spago test # Tests ausführen
spago run # Hauptmodul Main ausführen
spago repl # REPL mit Projekt-Kontext starten
spago bundle # gebündeltes JavaScript für den Browser erzeugen
spago ls packages # verfügbare Pakete anzeigen
Syntax-Highlights
- Starke statische Typisierung mit vollständiger Typinferenz; Typen wie
Int,String,Array,Maybe,Either. - Effekte werden über die
Effect-Monade und Row Polymorphism typisiert — Seiteneffekte sind im Typsystem sichtbar. - Foreign Function Interface (FFI): JavaScript-Funktionen lassen sich mit
foreign importanbinden, PureScript-Code ist umgekehrt aus JS aufrufbar. - UI-Entwicklung mit
Halogenoder React-Bindungen.
Verwandte Grundlagen: Elm-Befehle, TypeScript-Befehle, CoffeeScript-Befehle und ReasonML-Befehle — alle vier sind Alternativen, die zu JavaScript kompilieren.
CoffeeScript ist eine kleine Sprache, die 1:1 zu JavaScript kompiliert — „It's just JavaScript". Jeremy Ashkenas veröffentlichte die erste Version im Dezember 2009; der ursprünglich in Ruby geschriebene Compiler wurde ab Version 0.5 (2010) in CoffeeScript selbst implementiert.
Der coffee-Befehl
coffee -c datei.coffee # kompiliert nach datei.js
coffee -w -c src/ # Watch-Modus: bei Änderung neu kompilieren
coffee -o lib/ -c src/ # Ausgabe-Verzeichnis festlegen
coffee -e "console.log 'Hallo'" # Code direkt ausführen
coffee -i # interaktive REPL starten
coffee datei.coffee # Skript direkt ausführen
cake ist das Makefile-Äquivalent von CoffeeScript: Aufgaben stehen in einer Cakefile und werden mit cake build, cake test usw. aufgerufen.
Syntax-Ideen
- Signifikante Einrückung statt geschweifter Klammern;
#für Kommentare. - Fat Arrow
=>bindetthisautomatisch — ein Vorläufer der modernen JavaScript-Arrow-Functions. - String-Interpolation mit
#{ausdruck}, Existential-Operator?, Comprehensions für Schleifen, Splats für Rest-Parameter. - Klassen mit
classundsuperlange vor ES6.
Über die Rails-Asset-Pipeline und jQuery-Ära war CoffeeScript in den 2010er-Jahren weit verbreitet; TypeScript und modernes JavaScript haben viele seiner Ideen übernommen. Der Ableger LiveScript (2011) erweiterte die Sprache um funktionale Elemente.
Verwandte Grundlagen: JavaScript-Befehle, TypeScript-Befehle und Python-Befehle — CoffeeScript verbindet JS-Targeting mit einrückungsbasierter, lesbarer Syntax.
ReasonML (kurz Reason) ist eine Programmiersprache aus dem OCaml-Befehle-Ökosystem: Sie bietet die volle OCaml-Semantik (Typinferenz, Pattern Matching, Algebraische Datentypen, Unveränderlichkeit) mit einer an JavaScript und C angelehnten Syntax. Entwickelt wurde Reason ab 2015 von Jordan Walke bei Facebook, dem Erfinder von React.
Zwei Zielplattformen
ocaml / dune build # nativer Code über die OCaml-Toolchain
bsb init myapp # BuckleScript-Projekt für JavaScript erzeugen
npm run build # BuckleScript-Kompilierung über package.json
melange build # moderner BuckleScript-Nachfolger (dune/opam)
BuckleScript (von Hongbo Zhang, 2016) kompilierte Reason nach hochwertigem JavaScript und brachte die ReasonReact-Bindungen für React mit. Im Juli 2020 wurde BuckleScript zu ReScript umbenannt und entwickelte sich zu einer eigenen Sprache mit eigener Syntax (.res/.resi). ReasonML existiert weiterhin und wird heute oft mit Melange gebaut, das näher an der OCaml-Semantik bleibt und sich in opam/dune integriert.
Typische Kommandos
bsb -init -theme basic # Projektgerüst mit BuckleScript anlegen
bsb -w # Watch-Modus
bsb -make-world # alles bauen
opam install reason # Reason-Syntax über den OCaml-Paketmanager
esy install # npm-artige Abhängigkeiten für OCaml-Projekte
Verwandte Grundlagen: F#-Befehle (ML-Familie), JavaScript-Befehle und PureScript-Befehle — beide stark typisierten Sprachen, die nach JavaScript kompilieren. Ebenso der Nachfolger ReScript-Befehle (BuckleScript-Nachfolger, eigene Syntax) kompiliert nach JavaScript.
V (auch Vlang) ist eine einfache, schnelle und sichere kompilierte Sprache, die als C-Alternative entwickelt wurde. Der Compiler übersetzt V-Code nach C und kompiliert sich in unter einer Sekunde selbst. Der Compiler-Befehl heißt v, der Paketmanager vpm.
Compiler-Grundbefehle
v programm.v # kompiliert Binary (Standard: mit GC)
v run programm.v # kompiliert und führt direkt aus
v -prod programm.v # produktions-optimierte Version
v build # führt build.vsh Build-Script aus
v test . # führt alle Tests im Ordner aus
v fmt -w datei.v # formatiert den Quellcode
v doctor # prüft die V-Installation
v translate-c datei.c # übersetzt C-Code nach V
v new projekt # neues Projekt-Skelett anlegen
v version # Version anzeigen
vpm — Paketmanager
v install modul # Modul aus vpm installieren
v install --git url # Modul direkt aus Git installieren
v update # V und vpm aktualisieren
v remove modul # Modul entfernen
Besonderheiten
- V-Scripts (
.vsh) ersetzen Bash als plattformübergreifende Build- und Deploy-Skripte. - Eingebauter Formatter und
v doctorfür saubere Umgebungsdiagnose. - Sicherheitsmerkmale: keine Null-Pointer, optionale Speicherverwaltung, einfache C-Interop.
Verwandte Grundlagen: Go-Befehle, Rust-Befehle, C/C++-Befehle, Nim-Befehle.
Nim ist eine konzise, schnelle Systemsprache, die zu C, C++ und JavaScript kompiliert. Sie verbindet die Ausdrucksstärke von Python mit der Performance von C. Der Compiler heißt nim, der Paketmanager nimble.
Compiler-Grundbefehle
nim c programm.nim # kompiliert (Debug, mit Laufzeit-Checks)
nim c -r programm.nim # kompiliert und führt direkt aus
nim c -d:release programm.nim # optimierte Release-Version
nim check programm.nim # nur Syntax- und Typ-Prüfung
nim doc programm.nim # generiert HTML-Dokumentation
nim e skript.nims # führt NimScript direkt aus
Nimble — Paketmanager
nimble init # neues Paket anlegen
nimble install paketname # Paket installieren
nimble search begriff # Pakete durchsuchen
nimble refresh # Paketliste aktualisieren
nimble update # installierte Pakete aktualisieren
nimble check # Paketstruktur prüfen
nimble publish # Paket veröffentlichen
Nimble speichert Pakete standardmäßig unter ~/.nimble. Jedes Paket besitzt eine .nimble-Datei mit Metadaten und Abhängigkeiten. Ein bekanntes Web-Framework ist Jester, für Frontend-Anwendungen Karax.
Besonderheiten
- Kompiliert zu C/C++/JS — ein Quellcode, mehrere Zielplattformen.
- Automatische Speicherverwaltung (GC), optional ARC/ORC ohne Garbage Collector.
- Metaprogrammierung über Makros und
template/macro.
Verwandte Grundlagen: Rust-Befehle, Go-Befehle, Crystal-Befehle, V-Befehle.