8

ソケット、パイプ、ファイル IO などの低レベルのものは、Haskell でどのように実装されていますか? これらの IO メソッドは Haskell ではネイティブではないと思いますが、Haskell は低レベルの C ライブラリをすぐにラップしますよね?

4

2 に答える 2

9

ソケット、パイプ、およびファイルはカーネルに実装されています。ユーザー空間プログラムからそれらを使用するには、カーネルを呼び出す必要があります。カーネルをライブラリと見なす場合、はい、I/O は必然的に低レベルの C/アセンブラ ライブラリによって実装されます。

実際には、GHC などの Haskell 実装は、システム コールの周りに C ライブラリのラッパーを使用します。たとえば、 GHCでコンパイルされたHaskellプログラムのコアを構成するCのビットについて説明しているGHC RTS解説を参照してください。疑問がある場合は、ソース コードを参照してください。

于 2012-10-15T12:33:49.550 に答える
4

ここでは、「すばやくラップする」という表現が常に最適であるとは限りません。

  1. パーセルをラップするという意味でラップされることもあります (たとえば、wxcore は wx をラップします)。
    おっしゃる「サッと巻く」に一番近いのですが、そこまで単純ではないと思うので、薄巻と言ったほうがいいと思います。
  2. 家具製造販売業が椅子を包むように包まれることもあります (例: wxHaskell は wx を包む)。
    私はこれを「ビルドアラウンド」と呼んでいます。
  3. 車がエンジンを包むように包むこともあります (例: リアクティブ バナナ ラップ wx)。
    これを「使用」と呼びます。これを見るとエンジンが入っていることがわかりますが、エンジンのようには見えず、使い方が大きく異なります。
  4. トラックが貨物列車を包むように包むこともあります (例えば、haskell のスレッドが OS スレッドを包む)。私はこれを「再実装」と呼んでいます。(Haskell は OS スレッドを使用できますが、Haskell の「ネイティブ」スレッドははるかに軽量です。)

GHC のランタイム システムは C で記述されており、OS はおそらく C で記述されているため、Haskell は C のラッパーであると主張できますが、それは Spyker C8 車が Audi V8 エンジンをラップしていると言っているようなものです。彼らの素敵な C8 をアウディが入った箱と呼ぶと、スパイカーは動揺するかもしれません。車を運転しているときは、エンジンを使用していますが、直接ではありません。CPU をオーバークロックするのが好きな人がいるのと同じように、自分の車を微調整するのが好きな人もいますが、必要でない限り、そうする必要はありません。自分の車を理解したいなら、エンジンの仕組みを知るべきだと言う人もいます。

フォーミュラ1の言及を許すことができれば、主にハスケルはトロロッソがフェラーリを包むようにCを「包む」が、時にはマクラーレンがメルセデスを包むようになる. (トロロッソを遅いと呼ぶ前に、フォードと比較してください。)

于 2012-10-15T15:43:42.440 に答える