Warum transpilieren wir Haskell in JavaScript?

Hallo Habr! Heute werden wir erklären, warum wir ein Frontend in Haskell schreiben und es in JavaScript kompilieren. Im Allgemeinen wird dieser Prozess als Transpilation bezeichnet:







Bei der Transpilation wird ein X-Programm in ein äquivalentes Y-Programm konvertiert. Im Gegensatz zur Kompilierung befinden sich X und Y ungefähr auf derselben Abstraktionsebene.







Warum ist Transpilation erforderlich?



Im Allgemeinen gibt es zwei Hauptzwecke der Transpilation:







  1. . , , . , , . - "" (deshugaring) . Babel, JS , . , , . , Python 2.x Python 3 2to3.
  2. , / . , JS ( ) WASM ( ), , . , , . , , ( ), . , (, SourceMap JS).


:







  • -, JS:



        — TypeScript — JavaScript , .

        — CoffeeScript — JS , Python Haskell.

        — Elm — ( Haskell), - , The Elm Architecture (TEA). 

        — PureScript — Haskell- .

        — ClojureScript — Clojure (, , ) - .
  • :



        — Bluespec — , Haskell, Verilog.

        — Clash — , Haskell , VHDL, Verilog SystemVerilog.

        — Verilator — , Verilog C++ SystemC.
  • (, 16- Intel 8086 8- Intel 8080).


JS?



, JS. , :







  • JS -.
  • , , , , ..
  • , - , .
  • . , - . , . - .
  • , , JSON . , , , .
  • API . , , , . , API, API , - . , . , API.
  • , , . . — "" , . , , .


JS



- :







  • .
  • Haskell.
  • Haskell.
  • .


Typeable - Haskell - Reflex (FRP). Haskell JavaScript GHCJS.







TypeScript JS - , , Haskell, .







Reflex Elm PureScript - , . , Reflex - "". Elm Reflex .









JS, :









, :







  • JS .
  • , . , .
  • JS.


:








All Articles