2012-10-15 16 views
8

Come sono implementati elementi di basso livello come socket, pipe e file IO in Haskell? Immagino che questi metodi IO non siano nativi in ​​Haskell, ma Haskell racchiude rapidamente una libreria C di basso livello, giusto?Haskell e azioni IO di basso livello

risposta

9

Socket, pipe e file sono implementati nel kernel; per utilizzarli da un programma di spazio utente, è necessario call into the kernel. Se si considera il kernel come una libreria, allora sì, l'I/O è necessariamente implementato da una libreria C/assembler di basso livello.

In pratica, le implementazioni Haskell come GHC useranno i wrapper della libreria C attorno alle chiamate di sistema. Vedi per es. il GHC RTS commentary, che descrive i bit di C che costituiscono il nucleo di qualsiasi programma Haskell compilato con GHC. In caso di dubbi, consultare lo source code.

4

"wrapping rapidi" non è sempre la descrizione migliore qui.

  1. A volte è avvolto nel senso che si avvolge un pacco (ad es. Wxcore avvolge wx).
    Questo è il più vicino all '"involucro veloce" che hai menzionato, ma penso che sarebbe meglio definirlo come involucro sottile perché Non penso sia così semplice come tutto ciò.
  2. A volte è avvolto come un rivestimento avvolge una sedia (ad es. WxHaskell avvolge wx).
    Chiamerei questo "costruito intorno".
  3. A volte è avvolto come un'auto avvolge un motore (ad es. Involucri di banana reattiva wx).
    Chiamerei questo "uso", e se lo guardi puoi vedere che c'è un motore, ma non sembra un motore, e lo usi in modo molto diverso.
  4. A volte è avvolto come un camion che avvolge un treno merci (ad es. I thread di haskell avvolgono i thread del sistema operativo). Lo chiamerei "reimplementato". (Haskell può utilizzare le discussioni OS, ma le discussioni 'indigene' di Haskell sono molto più leggero.)

Si potrebbe obiettare che, poiché il sistema di runtime del GHC è scritto in C e il sistema operativo è stato probabilmente scritto in C, Haskell è un wrapper around C, ma è come dire che un'auto Spyker C8 avvolge un motore Audi V8. Spyker potrebbe essere arrabbiato se tu chiamassi il loro adorabile C8 una scatola con un'Audi in esso. Quando guidi la tua auto stai usando un motore, ma non direttamente. Ad alcune persone piace modificare la propria macchina, proprio come ad alcune persone piace overcloccare la CPU, ma non è necessario a meno che non lo si voglia. Alcuni dicono che dovresti sapere come funziona il motore se vuoi capire la tua auto.

Se si può perdonare i riferimenti di Formula 1, principalmente Haskell "avvolge" C come un Torro Rosso avvolge una Ferrari, ma a volte è come un Maclaren avvolge una Mercedes. (Prima di chiamare un Torro Rosso lento, confrontalo con una Ford.)

+1

Questa è probabilmente la cosa più divertente che ho letto oggi. Grazie. – MathematicalOrchid

+0

È male se non capisco affatto queste analogie? – Cubic

+1

@Cubic L'analogo della polizia ti arresterà, sì. Se riesci a individuare ciò che è opaco, forse posso spiegare cosa intendo in un modo migliore, e te la caverai con una frase sospesa. – AndrewC