F#-nach-JavaScript-Compiler: Fable 3 führt Plug-ins (wieder) ein

Das Tool zum Übersetzen der funktionalen Programmiersprache F# in JavaScript ist zudem nun ein reines .NET-Tool ohne npm-Abhängigkeiten.

In Pocket speichern vorlesen Druckansicht 2 Kommentare lesen
Lesezeit: 3 Min.

Der Fable-Compiler zum Übertragen von F#-Code nach JavaScript ist in Version 3 erschienen. Das Release mit dem Beinamen Nagareyama erscheint nun als einheitliches .NET-Tool ohne Abhängigkeit zu weiteren Werkzeugen und soll dabei rückwärtskompatibel arbeiten. Neu ist zudem die Möglichkeit, Plug-ins zu entwickeln beziehungsweise zu verwenden.

Fable und F# - ein kurzer Überblick

Fable ist ein Compiler zum Übersetzen von F#-Code in JavaScript, der 2017 in Version 1.0 erschienen ist. Die ursprüngliche Architektur koppelte das seinerzeit noch als .NET Core SDK geführte offene .NET mit einer Node-Anwendung. Eine wesentliche Rolle spielt der JavaScript-Compiler Babel, und das Projekt Fable trägt nicht zufällig einen ähnlichen Namen.

F# ist eine statische typisierte Functional-first-Programmiersprache von Microsoft. Sie ermöglicht neben dem bevorzugten funktionalen auch das objektorientierte Entwickeln von Anwendungen. Die starke Typisierung steht in starkem Kontrast zu JavaScript. Üblicherweise können Entwicklerinnen und Entwickler auf Typangaben verzichten, da F# in der Lage ist, sie über Typ-Inferenz zu ermitteln. Im November ist F# 5.0 erschienen, das den Fokus auf interaktives Entwickeln von Code setzt.

Fable 3 lässt sich als reines .NET-Tool direkt über den Befehl dotnet tool install fable installieren. Zum Kompilieren eines Projekts im Verzeichnis src dient anschließend dotnet fable src, und beim Aufruf von dotnet fable watch src läuft Fable im Beobachtungsmodus.

Im aktuellen Release entfallen die Abhängigkeiten ins JavaScript-Universum und das Bereitstellen des Projekts über den JavaScript-Paketmanager npm. Fable 3 benötigt vor allem die Dependencies zu Babel nicht mehr. Der Blogbeitrag zum neuen Tooling hebt dabei aber die Bedeutung hervor, die der JavaScript-Compiler für die Entstehungsgeschichte von Fable gehabt habe: "Babel hat Fable erst möglich gemacht, und der Name wird dem Babel-Team immer Tribut zollen."

Nach wie vor lässt sich Babel in den Arbeitsablauf integrieren: Wer Webpack verwendet, kann dafür den babel-loader weiter einbinden. Fable nutzt im aktuellen Release auch keinen spezifischen Bundler mehr, aber der Blogbeitrag zur Veröffentlichung betont, dass Webpack weiterhin eine gute Wahl sei. Das Loslösen von JavaScript und der damit verbundene Wegfall der Interprozesskommunikation bringt laut dem Fable-Team offenbar einen deutlichen Performancegewinn.

Zwar konnte bereits Fable 1.0 Plug-ins einbinden, aber die Architektur hatte wohl so deutliche Schwächen, dass das Team die Funktion in Fable 2 entfernt hatte. Fable 3 führt nun ein neu entwickeltes System zum Einbinden von Plug-ins ein.

Die wichtigste Motivation für das Einbinden externer Plug-ins ist das Zusammenspiel mit JavaScript-Werkzeugen, die spezielle Art von Code erwarten beziehungsweise benötigen. Ein erstes Plug-in dient dem Erstellen von React Function Components aus F# heraus.

Empfohlener redaktioneller Inhalt

Mit Ihrer Zustimmmung wird hier ein externes YouTube-Video (Google Ireland Limited) geladen.

Ich bin damit einverstanden, dass mir externe Inhalte angezeigt werden. Damit können personenbezogene Daten an Drittplattformen (Google Ireland Limited) übermittelt werden. Mehr dazu in unserer Datenschutzerklärung.

Eine weitere wichtige Neuerung findet unter der Haube statt: Fable nutzt das Konzept der sogenannten Witnesses zum Auflösen von Statically Resolved Type Parameters (SRTP). Über die Witnesses gibt der F#-Compiler (nicht Fable) zusätzlich Informationen über die Auflösung der Typen preis, die Fable und andere Cross-Compiler nutzen können.

Weitere Details zu den neuen Funktionen von Fable 3, das wohl eher zufällig fast genau zehn Jahre nach dem Rollenspiel Fable III erschienen ist, lassen sich dem Fable-Blog entnehmen.

(rme)