PS Welchen Transpiler würdest du empfehlen?
Das kommt ganz auf den Zweck an, den man verfolgt: Will man einfach mit neuen JavaScript-Features experimentieren, dann reicht meist schon ein moderner Browser ohne Transpiler. kangax' Kompatibilitätstabelle liefert da übrigens eine bessere Übersicht als http://caniuse.com/.
Für Experimente mit brandneuen oder Transpiler-spezfischen Sprachfeatures eignen sich die jeweiligen Spielwiesen recht gut: https://babeljs.io/repl/ https://www.typescriptlang.org/play/index.html
Das ist auch der einfachste Einstieg, den man mit Transpilern machen kann.
Für den Einsatz im Produktivbetrieb muss man weitere Fragen für sich beantworten:
- Will ich den Compiler bloß als Kompatibilitätsschicht?
- Oder möchte ich auch nicht-standard Features nutzen − JSX zum Beispiel? Einige Transpiler definieren ihre eigenen JS-Dialekte.
- Will ich vielleicht sogar in einer völlig anderen Programmiersprache entwickeln?
- Habe ich bereits eine Buildchain, in die der Transpiler integriert werden muss? Grunt, Gulp, npm-Scripts, Webpack?
Alle mir bekannten Transpiler lassen sich ohne viel Aufsehens in die oben genannten Buildsysteme integrieren, aber es ist definitiv hilfreich auch das Kommandozeilen-Interface bedienen zu können. Wenn man noch keine Erfahrungen mit einem dieser Systeme gemacht hat, dann ist Webpack2 vermutlich der einfachste Einstieg.
Babel ist eher konservativ, standardkonform - kann aber modular erweitert werden und erlaubt sozusagen eigene JavaScript-Dialekte zusammenzuschustern. Es eignet sich hervorragend als Kompatibilitätsschicht, kann aber unhandlich werden, sobald man vom Standard abweichende Features nutzen will.
TypeScript ist deutlich voreingenommener und definiert eine reichhaltige Supermenge von JavaScript. Als Kompatibilitätsschicht definitiv auch geeignet, aber darauf beschränkt, würde man viel Potenzial vergeuden. TypeScript hat eine außerordentlich gute Editor-Integration und ermöglicht zum Beispiel intelligente Autovervollständigung und Fehlersuche. Außerdem ist TypeScript die primäre Programmiersprache, in der Angular2-Apps geschrieben werden.
Emscripten wäre ein Beispiel für einen Transpiler, der nicht JavaScript oder einen Dialekt als Eingabe nimmt, sondern C/C++. Das Ausgabeformat ist auch nicht direkt JavaScript, sondern eine optimierte Teilmenge ASM.js bzw. WebAssembly. Letztere sind speziell als Compiler-Ziele vor dem Hintergrund besserer Performance entwickelt worden. Emscripten eignet sich also vor allem für Performance-kritische und rechenintensive Anwendungen wie 3D-Spiele oder Simulationen.
Malt man eine Linie zwischen highlevel und lowlevel Sprachen, befände sich Elm vermutlich am anderen Ende von C/C++. Das ist (meiner sehr subjektiven Meinung nach) JavaScript, wie es aussähe, wenn wir es heute neu machen könnten ohne Rücksicht auf Abwärtskompatibilität − eine highlevel Architektursprache zum Bau komplexer Anwendungen.
Babel und TypeScript wären etwas, mit dem man jederzeit anfangen kann. Emscripten füllt eine Nische für Performance-kritische Anwendungen. Elm erfordert das Lernen einer völlig neuen Programmiersprache und ist etwas, das man eher mittel- bis langfristig anstreben könnte.