Actions Haskell et IO de bas niveau

Comment les fonctionnalités de bas niveau comme les sockets, les pipes et les fichiers IO sont-elles implémentées dans Haskell? Je suppose que ces méthodes IO ne sont pas natives dans Haskell, mais Haskell ajoute rapidement une bibliothèque de bas niveau C, n’est-ce pas?

Les sockets, les pipes et les fichiers sont implémentés dans le kernel; pour les utiliser depuis un programme utilisateur, vous devez appeler le kernel . Si vous considérez le kernel comme une bibliothèque, alors oui, les E / S sont nécessairement implémentées par une bibliothèque C / assembler de bas niveau.

En pratique, les implémentations Haskell telles que GHC utiliseront les wrappers de la bibliothèque C autour des appels système. Voir, par exemple, le commentaire RTC GHC , qui décrit les bits de C qui constituent le cœur de tout programme Haskell compilé avec GHC. En cas de doute, consultez le code source .

“wraps rapides” n’est pas toujours la meilleure description ici.

  1. Parfois, il est enveloppé dans le sens où vous encapsulez une plot (par exemple, wxcore wraps wx).
    C’est ce qui se rapproche le plus du «fast wrapping» que vous avez mentionné, mais je pense qu’il serait préférable de l’appeler «wrapping» car je ne pense pas que cela soit aussi simple que cela.
  2. Parfois, il est enroulé comme un rembourrage qui enveloppe une chaise (par exemple, wxHaskell enveloppe wx).
    J’appellerais cela “construit autour”.
  3. Parfois, il est enveloppé comme une voiture qui enveloppe un moteur (par exemple, des enveloppes de banane réactives wx).
    J’appellerais ceci “uses”, et si vous le regardez, vous pouvez voir qu’il y a un moteur, mais il ne ressemble pas à un moteur et vous l’utilisez très différemment.
  4. Parfois, ils sont emballés comme des camions enveloppant un train de marchandises (par exemple, les fils de haskell enveloppent les threads du système d’exploitation). J’appellerais cela “réimplémenté”. (Haskell peut utiliser des threads OS, mais les threads «natifs» de Haskell sont beaucoup plus légers.)

Vous pourriez dire que parce que le système d’exécution de GHC est écrit en C et que votre OS est probablement écrit en C, Haskell est une enveloppe autour de C, mais cela revient à dire qu’une voiture Spyker C8 enveloppe un moteur Audi V8. Spyker pourrait être contrarié si vous appeliez leur belle C8 une boîte avec une Audi. Lorsque vous conduisez votre voiture, vous utilisez un moteur, mais pas directement. Certaines personnes aiment peaufiner leur voiture, comme certaines personnes aiment overclocker leur processeur, mais vous n’avez pas à le faire, sauf si vous le souhaitez. Certaines personnes disent que vous devez savoir comment fonctionne le moteur si vous voulez comprendre votre voiture.

Si vous pouvez pardonner aux références de la Formule 1, Haskell “enveloppe” principalement C comme un Torro Rosso encapsule une Ferrari, mais de temps en temps c’est comme un Maclaren qui enveloppe une Mercedes. (Avant d’appeler un Torro Rosso lent, comparez-le à un Ford.)