Die Verbindung von Fortran und WebAssembly
- Fortran ist eine alte Programmiersprache, die erstmals 1957 erschien und älter ist als die Programmiersprache C, die Intel-4004-CPU und der IBM-System/360-Mainframe.
- Fortran wird in wissenschaftlichen und technischen Anwendungen für rechenintensive Aufgaben eingesetzt, und manche halten es bei numerischen Berechnungen für effizienter als C.
- Dieser Blogbeitrag erklärt, wie sich bestehender Fortran-Code zu WebAssembly kompilieren lässt, damit er im Webbrowser ausgeführt werden kann.
Worin besteht das Problem?
- Es gibt verschiedene Möglichkeiten, Fortran zu WebAssembly zu kompilieren, aber keine unterstützt alle Funktionen vollständig.
- Jede Methode hat Nachteile und ist keine einfache Plug-and-Play-Lösung.
Compiler-Zusammenfassung
- Bei LLVM-basierten Fortran-Compilern gab es einige Veränderungen.
- Das Dienstprogramm
f2c wandelt Fortran 77 in C-Code um, ist aber mit modernem Fortran-Code nicht kompatibel.
- Der Compiler LFortran unterstützt inzwischen viele Funktionen, dennoch können bei einigen Projekten weiterhin Probleme auftreten.
- Dragonegg ist ein Plug-in für GCC, das LLVM-IR erzeugt, benötigt aber alte Versionen von GCC und LLVM.
- Classic Flang unterstützt keine 32-Bit-Ausgabe, und LLVM Flang erzeugt derzeit standardmäßig keine WebAssembly-Ausgabe.
WebAssembly mit LLVM Flang bauen und verwenden
- Der LLVM-Flang-Quellcode muss angepasst werden, um ein WebAssembly-Target zu implementieren.
- Dabei lassen sich das modulare Design von LLVM, das Flang-Frontend und das WebAssembly-Backend nutzen.
Fortran-Subroutinen aus C aufrufen
- Es wird nochmals gezeigt, wie man eine Fortran-Subroutine als Teil eines C-Programms kompiliert und linkt.
Zurück zu LLVM Flang
- Mit dem LLVM-Flang-Compiler lassen sich Fortran-Subroutinen kompilieren, doch da das WebAssembly-Target noch nicht implementiert ist, müssen Patches auf den Quellcode angewendet werden.
Fortran-Routinen aus JavaScript aufrufen
- Mit Emscripten lassen sich Fortran-Objekte linken und direkt aus JavaScript aufrufen.
Fortran-Runtime-Bibliothek: der Weg zu "Hello, World!"
- Es werden die Probleme beschrieben, die beim Versuch auftreten, ein "Hello, World!"-Programm in Fortran zu bauen.
- Die LLVM-Fortran-Runtime-Bibliothek muss für WebAssembly kompiliert werden.
Meinung von GN⁺
- Dieser Artikel zeigt den Versuch, traditionelle Sprachen wie Fortran mit moderner Webtechnologie zu integrieren. Solche Ansätze können nützlich sein, um bestehende und bewährte Bibliotheken für numerische Berechnungen ins Web zu bringen.
- Der Prozess, Fortran zu WebAssembly zu kompilieren, verdeutlicht die Herausforderungen bei der Portierung bestehender Codebasen auf neue Plattformen. Besonders Probleme rund um Cross-Compiling sind auch bei der Portierung auf andere Sprachen oder Plattformen ein wichtiger Aspekt.
- Die Technik ist zwar interessant, doch numerische Berechnungen mit hohen Performance-Anforderungen tatsächlich im Web auszuführen, hat weiterhin praktische Grenzen. WebAssembly erreicht möglicherweise noch nicht die Leistung traditioneller nativer Anwendungen.
- Die Entwicklung von LLVM Flang ist sehr aktiv, und diese Entwicklungsarbeit dürfte sich positiv auf die Fortran-Community auswirken. Die im Artikel genannten Probleme zeigen jedoch, dass weiterhin Aufgaben offen sind.
- Der Artikel bietet nützliche Informationen für Entwickler, die Fortran mit Webtechnologien integrieren möchten, und kann besonders für diejenigen hilfreich sein, die webbasierte Werkzeuge für numerische Analyse oder wissenschaftliches Rechnen in Betracht ziehen.
1 Kommentare
Hacker-News-Kommentare
George hat sich mit Fortran beschäftigt, als er am WebR-Projekt mitarbeitete, um R im Webbrowser auszuführen
f2c, das Fortran in C umwandelt, konnte aber durch einen Patch für LLVM Flang mit einem echten Fortran-Compiler gebaut werdenErfahrung aus der Arbeit an einem FORTRAN-Compiler bei Xilinx vor 20 Jahren
f2c.heine Definition namensbarfenthieltEmpfehlung,
f18mit den neuesten Quellen des LLVM-Projekts zu bauenLob für die Erklärweise über den Ansatz des „einfachsten nichttrivialen Beispiels“
Hinweis auf mangelndes Wissen über WebAssembly-Entwicklung
Frage, ob es in JavaScript ein „produktionsreifes“ Ökosystem für lineare Algebra gibt
Meinung, dass es interessant wäre zu sehen, ob heute noch Fortran-78-Code lauffähig wäre, der 1981/82 geschrieben wurde, falls er aufbewahrt worden wäre
Es wird als seltsam bezeichnet, dass LFortran nicht öfter erwähnt wird
Hinweis auf Informationen zur Nutzung von Fortran in .NET und Java
Geteilte Erfahrung aus der Arbeit daran, TensorFlow für den Browser zu kompilieren