Frage

Sagen Sie, ich habe ein Haskell-Programm oder eine Bibliothek, die ich für Nicht-Haskellers, potenzielle C-Programmierer, zugänglich machen möchte. Kann ich es mit GHC mit C kompilieren und dann als C -Quelle verteilen?

Wenn dies möglich ist, kann jemand ein minimales Beispiel geben? (zB ein Makefile)

Ist es möglich, GHC zu verwenden, um automatisch zu bestimmen, welche Compiler -Flaggen und -Headers und benötigten sie dann in einen einzelnen Ordner bündeln?

Grundsätzlich bin ich daran interessiert, Teile von Programmen in C und Haskell schreiben zu können und es dann als Tarball zu verteilen, ohne dass das Ziel jedoch die Installation von GHC und Cabal benötigt.

War es hilfreich?

Lösung

Ich bin daran interessiert, Teile von Programmen in C und Haskell zu schreiben und sie dann als Tarball zu verteilen, ohne dass das Ziel von GHC und Cabal installiert werden muss.

Sie bitten um eine Menge Infrastruktur, die Sie wahrscheinlich nicht finden werden. Erinnere dich daran Jedes Haskell-Programm, auch wenn es mit C zusammengestellt wird, hängt fast sicher von einem großen, komplexen Laufzeitsystem ab für seinen korrekten Betrieb. Zumindest muss dieses Laufzeitsystem die Müllsammlung und die faule Bewertung unterstützen. Sie haben also mehr als nur ein Übersetzungsproblem.

Ich schlage vor, dass Sie dieses Problem als Software-Verteilungsproblem angehen. Stellen Sie anstelle eines Tarballs ein Paket für Ihre bevorzugte Vertriebsplattform (Debian, Red Hat, Installshield, was auch immer) an. Um die Bemühungen anderer Menschen wiederzuverwenden, würde ich persönlich etwas anstreben, das nach Cabal prüft, Cabal bei Bedarf installiert und dann den Rest Ihrer Benutzer installiert.

Andere Tipps

Sie können dies mit tun JHC. Es ist ein vollständiger Programmoptimierungs -Compiler, der auf C zusammenfasst. Es hat jedoch nicht alle ausgefallenen Erweiterungen, die GHC unterstützt.

Selbst wenn Sie könnten, würde ich es nicht "C Quelle" nennen. GHC kann C als Teil seines Kompilierungssystems verwenden, aber der generierte C -Code ist nicht einmal lesbar. Selbst wenn es gelesen und verstanden werden könnte, würde es keinen Sinn machen, es zu ändern, da es auf keinen Fall (abgesehen davon, die Änderungen in Haskell zu verbergen), um Änderungen von C-Hackern in zukünftige Versionen Ihres Programms aufzunehmen.

Der Begriff "Quelle" bezeichnet den Code, der von einem Menschen verfasst und zum Generieren des Programms verwendet wird. In diesem Fall ist das der Haskell. C Erzeugt von einem Compiler ist kein "Quellcode", sondern eine Zwischendarstellung.

Sie können nicht mit GHC dorthin gelangen. Selbst wenn es über C zusammengestellt wird, verlässt sich GHC darauf, die resultierende Versammlung zu den Segmenten, ein riesiges Laufzeitsystem und viel Gepäck zu manipulieren.

Auf der anderen Seite haben Sie möglicherweise ein besseres Glück, wenn das, was Sie wollen, durch etwas begrenztere Feature -Satz von John Meachams JHC -Compiler unterstützt wird, was jedoch eine ziemlich kompakte C -Ausgabe erzeugt.

Ich weiß, dass dies ein alter Beitrag ist, aber ich wollte immer noch erwähnen AJHC. AJHC hat JHC mit den Plänen, neue Funktionen hinzuzufügen und später die Updates zurück zu JHC zu bringen.

Sagen Sie, ich habe ein Haskell-Programm oder eine Bibliothek, die ich für Nicht-Haskellers, potenzielle C-Programmierer, zugänglich machen möchte. Kann ich es mit GHC mit C kompilieren und dann als C -Quelle verteilen?

Sie können sich mit C zusammenstellen, aber das resultierende C ist nicht menschlich lesbar. Sie schreiben besser Header -Dateien und verwenden den hervorragenden C -FFI daneben. In jedem Fall scheint das Verteilern des generierten C wie ein Dummkopf -Auftrag zu sein.

Grundsätzlich bin ich daran interessiert, Teile von Programmen in C und Haskell schreiben zu können und es dann als Tarball zu verteilen, ohne dass das Ziel jedoch die Installation von GHC und Cabal benötigt.

Ich kenne keine Lösungen, an denen kein GHC beteiligt ist. Sie müssten zumindest die Haskell -RTs verteilen.

Kann ich es mit GHC mit C kompilieren und dann als C -Quelle verteilen?

Nein, es ist nicht möglich, aber Sie können leicht eine Schnittstelle zwischen Haskell und C erstellen, indem Sie die Fremdenfunktionsschnittstelle (FFI) von Haskell verwenden.

Sie können mehr Beispiel haben hier.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top