2012-10-15 25 views
8

Jak w urządzeniach Haskell zaimplementowano elementy niskiego poziomu, takie jak gniazda, przewody i plik IO? Sądzę, że te metody IO nie są natywne w Haskell, ale Haskell szybko owija bibliotekę niskiego poziomu C, prawda?Haskell i akcje niskiego poziomu IO

Odpowiedz

9

Gniazda, przewody i pliki są zaimplementowane w jądrze; aby użyć ich z programu użytkownika, musisz call into the kernel. Jeśli uważasz jądro za bibliotekę, to tak, I/O jest koniecznie implementowane przez niskopoziomową bibliotekę C/asemblera.

W praktyce implementacje Haskella, takie jak GHC, będą używać wrapperów biblioteki C wokół wywołań systemowych. Zobacz np. the GHC RTS commentary, który opisuje bity C, które składają się na rdzeń dowolnego programu Haskell skompilowanego z GHC. W razie wątpliwości skonsultuj się z source code.

4

"szybko się zawija" nie zawsze jest najlepszym opisem tutaj.

  1. Czasami jest zawijany w tym sensie, że zawija się paczkę (np. Wxcore zawija wx).
    To jest najbliżej "szybkiego owijania", o którym wspomniałeś, , ale myślę, że byłoby lepiej nazwać go cienkim zawijaniem, ponieważ Nie sądzę, że jest tak proste, jak wszystko.
  2. Czasami jest owinięty jak tapicerka owija krzesło (np. WxHaskell otula wx).
    Nazwałbym to "zbudowany wokół".
  3. Czasami jest owinięty jak samochód owija silnik (np. Reaktywne bananowe okłady wx).
    Nazwałbym to "zastosowaniami", a jeśli spojrzeć na to, widać, że jest w nim silnik, , ale to nie wygląda na silnik, a ty używasz go zupełnie inaczej.
  4. Czasami jest on zawijany jak samochody ciężarowe owija pociąg towarowy (np. Wątki haskell zawijają wątki systemu operacyjnego). Nazwałbym to "reimplemented". (Haskell może wykorzystywać wątki OS, ale nici „native” Haskell są znacznie lżejsze.)

Można argumentować, że ponieważ układ Runtime GHC jest napisany w C i system operacyjny został prawdopodobnie napisany w języku C, Haskell jest owinąć wokół C, ale to tak, jakby powiedzieć, że samochód Spyker C8 owija silnik Audi V8. Spyker może się zdenerwować, jeśli nazwiesz ich piękne C8 pudełkiem z Audi. Podczas jazdy samochodem korzystasz z silnika, ale nie bezpośrednio. Niektórzy ludzie lubią podkręcać swój samochód, tak jak niektórzy lubią podkręcać procesor, ale nie musisz tego robić, chyba że chcesz. Niektórzy mówią, że powinieneś wiedzieć, jak działa silnik, jeśli chcesz zrozumieć swój samochód.

Jeśli możesz wybaczyć odniesienia do Formuły 1, głównie Haskell "zawija" C jak Torro Rosso owija Ferrari, ale od czasu do czasu wygląda jak Maclaren owija mercedesa. (Zanim powolutkujesz Torro Rosso, porównaj to z Fordem.)

+1

To chyba najbardziej zabawna rzecz, którą przeczytałem dzisiaj. Dziękuję Ci. – MathematicalOrchid

+0

Czy to źle, jeśli w ogóle nie rozumiem tych analogii? – Cubic

+1

@Cubic Policja na analogię cię aresztuje, tak. Jeśli potrafisz precyzyjnie określić, co jest nieprzejrzyste, mogę wyjaśnić, co mam na myśli, a wydasz wyrok w zawieszeniu. – AndrewC

Powiązane problemy