Wie werden Low-Level-Sachen wie Sockets, Pipes und File-IO in Haskell implementiert? Ich nehme an, dass diese IO-Methoden in Haskell nicht nativ sind, aber Haskell schließt schnell eine Low-Level-C-Bibliothek ein, stimmt das?
Sockets, Pipes und Dateien sind im Kernel implementiert; Um sie aus einem User-Space-Programm zu verwenden, müssen Sie im Kernel aufrufen . Wenn Sie den Kernel als eine Bibliothek betrachten, dann wird I / O notwendigerweise von einer Low-Level-C / Assembler-Bibliothek implementiert.
In der Praxis verwenden Haskell-Implementierungen wie GHC die Wrapper der C-Bibliothek bei Systemaufrufen. Siehe z.B. der GHC RTS-Kommentar , der die Bits von C beschreibt, die den Kern jedes Haskell-Programms ausmachen kompiliert mit GHC. Wenden Sie sich im Zweifelsfall an den Quellcode .
"schnell verpackt" ist hier nicht immer die beste Beschreibung.
Man könnte argumentieren, dass, weil GHCs Laufzeitsystem in C geschrieben ist und Ihr Betriebssystem wahrscheinlich in C geschrieben wurde, Haskell ein Wrapper um C ist, aber das ist so, als würde ein Spyker C8 ein Audi V8 Motor umhüllen. Spyker könnte sich aufregen, wenn Sie ihren schönen C8 eine Box mit einem Audi darin nennen würden. Wenn Sie mit Ihrem Auto fahren, benutzen Sie einen Motor, aber nicht direkt. Manche Leute mögen es, ihr Auto zu optimieren, so wie manche Leute ihre CPU übertakten, aber Sie müssen es nicht, außer Sie wollen es. Manche Leute sagen, Sie sollten wissen, wie der Motor funktioniert, wenn Sie Ihr Auto verstehen wollen.
Wenn Sie die Formel-1-Referenzen verzeihen können, "wickelt" hauptsächlich Haskell C ein wie ein Torro Rosso einen Ferrari, aber gelegentlich ist es wie ein Maclaren, der einen Mercedes umhüllt. (Bevor Sie einen Torro Rosso langsam rufen, vergleichen Sie es mit einem Ford.)