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
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.
"szybko się zawija" nie zawsze jest najlepszym opisem tutaj.
- 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. - Czasami jest owinięty jak tapicerka owija krzesło (np. WxHaskell otula wx).
Nazwałbym to "zbudowany wokół". - 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. - 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. HDF5 for Python: interfejsy wysokiego poziomu i niskiego poziomu. h5py
- 2. Haskell IO Testowanie
- 3. kolejność wykonywania Haskell IO
- 4. Memoizing IO Obliczenia Haskell
- 5. Symulowanie niskiego poziomu naładowania baterii dla iPhone'ów
- 6. Haskell monada: IO [Double] do [IO Double]
- 7. Dobra biblioteka niskiego poziomu dla .Net
- 8. Haskell IO - rękojeść zamknięta
- 9. Haskell Extensible IO Exceptions?
- 10. Przypadek użycia dla niskiego poziomu os.open, os.fdopen i przyjaciół?
- 11. Uruchamianie Haskell HXT poza IO?
- 12. Jak poprawić wydajność Haskell IO?
- 13. Konwertuj [IO Int] na IO [Int] w Haskell?
- 14. Wywołanie sieci IO z poziomu haskeline
- 15. Lisp bez Garbage Collectora do programowania niskiego poziomu
- 16. Jakie jest twoje ulubione narzędzie do profilowania niskiego poziomu?
- 17. Wystąpił nieobsługiwany błąd niskiego poziomu. Dzienniki aplikacji mogą mieć dane
- 18. Jakie są ulubione triki optymalizacji kodu niskiego poziomu?
- 19. Jak analizować problemy niskiego poziomu OSGi podczas wykonywania testu tycho?
- 20. Problem z "Looping" IO w Haskell
- 21. Haskell ReaderT Env IO płyta montażowa
- 22. Haskell: łowienie niski poziom wyjątki IO
- 23. Haskell: obsługa wyjątków w monadach bez IO
- 24. Jak połączyć dwa ciągi (IO) w Haskell?
- 25. Funkcja Haskell typu: IO String-> String
- 26. Deskryptor niskiego poziomu integralności do średniego/wysokiego poziomu integralności ochrony przewodów
- 27. Firefox Addon Development - Używanie interfejsu niskiego poziomu lub innego niż SDK
- 28. W jaki sposób niedowidzenie usterki rozruchu klamki i innych środowisk niskiego poziomu
- 29. Dowody poziomu otwartego typu w Haskell/Idris
- 30. Trzecie prawo monolityczne i IO?
To chyba najbardziej zabawna rzecz, którą przeczytałem dzisiaj. Dziękuję Ci. – MathematicalOrchid
Czy to źle, jeśli w ogóle nie rozumiem tych analogii? – Cubic
@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