Haskell und Low-Level-IO-Aktionen

8

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?

    
Cartesius00 15.10.2012, 12:06
quelle

2 Antworten

9

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 .

    
Fred Foo 15.10.2012, 12:33
quelle
4

"schnell verpackt" ist hier nicht immer die beste Beschreibung.

  1. Manchmal ist es in dem Sinne verpackt, dass Sie ein Paket umhüllen (zB wxcore wraps wx).
    Dies kommt der von Ihnen erwähnten "schnellen Umhüllung" am nächsten, aber ich denke, es wäre besser dünn Wrapping genannt, weil Ich denke nicht, dass es so einfach ist wie all das.
  2. Manchmal ist es wie ein Polster gewickelt, das einen Stuhl umwickelt (zB wxHaskell umhüllt wx).
    Ich würde das "gebaut herum" nennen.
  3. Manchmal ist es eingewickelt, wie ein Auto einen Motor umwickelt (zB reaktive Bananenverpackungen wx).
    Ich würde das "benutzen" nennen, und wenn man es anschaut, sieht man, dass da ein Motor drin ist, aber es sieht nicht wie ein Motor aus, und Sie verwenden es sehr unterschiedlich.
  4. Manchmal ist es eingewickelt, wie Lastwagen einen Güterzug umhüllen (z. B. Haskells Fäden wickeln OS-Fäden). Ich würde das "reimplementiert" nennen. (Haskell kann OS-Threads verwenden, aber Haskells 'native' Threads sind viel leichter.)

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.)

    
AndrewC 15.10.2012 15:43
quelle

Tags und Links