1 Punkte von GN⁺ 2024-04-07 | 1 Kommentare | Auf WhatsApp teilen

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

 
GN⁺ 2024-04-07
Hacker-News-Kommentare
  • George hat sich mit Fortran beschäftigt, als er am WebR-Projekt mitarbeitete, um R im Webbrowser auszuführen

    • Der R-Quellcode enthält eine beträchtliche Menge an Fortran-Code
    • Ursprünglich nutzte WebR f2c, das Fortran in C umwandelt, konnte aber durch einen Patch für LLVM Flang mit einem echten Fortran-Compiler gebaut werden
    • George erwähnt es im Blogpost nicht direkt, hofft aber, dass Flang seinen Patch übernimmt oder einen besseren Patch implementiert
    • Wenn solche Patches nicht separat gepflegt werden müssten und unverändertes Flang nach wasm kompilieren könnte, würde das auch anderen Projekten helfen, die Fortran verwenden
  • Erfahrung aus der Arbeit an einem FORTRAN-Compiler bei Xilinx vor 20 Jahren

    • In Erinnerung geblieben ist, dass die Header-Datei f2c.h eine Definition namens barf enthielt
  • Empfehlung, f18 mit den neuesten Quellen des LLVM-Projekts zu bauen

    • Es wird erwähnt, dass sich das LLVM-Projekt schnell bewegt und es Zeitverschwendung ist, Probleme zu debuggen, die bereits gelöst wurden, oder Features zu übersehen, die schon implementiert sind
  • Lob für die Erklärweise über den Ansatz des „einfachsten nichttrivialen Beispiels“

    • Es habe sich viel lernen lassen, ausgehend von dem konkreten Problem „Aufruf von BLAS-Funktionen aus JavaScript“
  • Hinweis auf mangelndes Wissen über WebAssembly-Entwicklung

    • Es wird gefragt, ob WebAssembly Verbraucherinnen und Verbrauchern derzeit überhaupt etwas bieten kann oder ob alles nur die Grundlage für die Zukunft wirklich portabler Programme schafft
    • Es wurde das Gerücht gehört, dass WebAssembly dabei hilft, Netzwerk- und Dateizugriffe einzuschränken, aber es ist unklar, ob das theoretisch ist oder tatsächlich implementiert wurde
  • Frage, ob es in JavaScript ein „produktionsreifes“ Ökosystem für lineare Algebra gibt

    • Beim Googeln stößt man oft auf Portierungen älterer Bibliotheken nach JavaScript, und es wird gefragt, ob dabei etwas übersehen wird
  • 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

    • Erwähnung eines Quellcode-Formatierers für die Programmiersprache Jovial, für den man damals notgedrungen Fortran verwenden musste
  • Es wird als seltsam bezeichnet, dass LFortran nicht öfter erwähnt wird

    • LFortran bietet online großartige und erstaunliche WASM-Beispiele
  • Hinweis auf Informationen zur Nutzung von Fortran in .NET und Java

    • Über zugehörige Links wird gezeigt, dass Fortran in .NET und Java verwendet werden kann
  • Geteilte Erfahrung aus der Arbeit daran, TensorFlow für den Browser zu kompilieren

    • Es wird Dankbarkeit dafür ausgedrückt, dass TensorFlow Eigen nutzte und dadurch populäre in Fortran geschriebene Mathematikbibliotheken wie BLAS und Lapack nicht verwendet wurden, was viel zusätzliche Arbeit erspart habe