Jak rozumiem, GHC (Glorious Glasgow Haskell Compiler) kompiluje Haskella do "Core", a następnie kompiluje ten Core do kodu maszynowego. Czy rozpowszechnianie programów Haskell jako GHC Core byłoby całkowicie praktyczne, tak jakby były "bajtodami"? Czy będzie jakaś korzyść z takiej dystrybucji? Dlaczego lub dlaczego nie?GHC Core jako "kod bajtowy"?
Odpowiedz
To nie byłoby praktyczne; GHC Core nie jest przenośny. Na przykład na maszynie 32-bitowej 64-bitowa arytmetyczna jest kompilowana do wywołań funkcji obcych w rdzeniu, ale na maszynie 64-bitowej używa natywnej arytmetyki maszynowej.
Co ważniejsze, GHC nie może faktycznie przeczytać Rdzeń; może wydrukować go w kilku formatach, ale nie ma rzeczywistego kodu, który odczytałby któryś z tych formatów. Nie jestem pewien, czy byłaby jakaś poważna przeszkoda, ale jest to udokumentowana sytuacja od wielu lat , więc nie spodziewałbym się, że wsparcie pojawi się w najbliższym czasie.
Rdzeń jest również bardzo zbliżony do Haskella w ogóle; nie jest jasne, co można kupić za dystrybucję kodu w tym formularzu. Czas potrzebny na przekształcenie Haskella w Rdzeń jest zwykle krótszy niż czas potrzebny na połączenie końcowego programu, więc zazwyczaj nie oszczędziłoby to w ogóle czasu kompilacji.
Ponadto, mniej sprawdzania jest wykonywane dla kodu źródłowego niż kodu źródłowego Haskella (chociaż myślę, że -dcore-lint
złagodziłoby to), a jego efektywne działanie byłoby trudne (jest Safe Haskell, ale nie ma Safe Core). Oczywiście te wady nie mają zastosowania, jeśli źródło kodu bajtowego jest zaufane.
Zasadniczo GHC Core jest bardzo pośrednim językiem kompilatora, w przeciwieństwie do przenośnych formatów bajtowych zaprojektowanych do tego celu, takich jak kod bajtowy Python i JVM.
Na marginesie, GHC ma ma interpreter kodu bajtowego, jak używane przez GHCi. Użyty tam kod bajtowy jest również nieprzenośny, więc nie ma żadnych korzyści, jakie mogę wymyślić w porównaniu do kodu maszynowego, jaki GHC wytwarza podczas normalnej pracy.
- 1. Kod bajtowy wykrywający język Python
- 2. Jak sprawdzić kod bajtowy Pythona?
- 3. Rurociąg GHC: Core, STG - ASTs lub tekst?
- 4. Ghc: częściowo skompilować kod Haskella?
- 5. Dlaczego setuptools muszą pisać kod bajtowy?
- 6. powolny kod bajtowy z ogona rekurencji
- 7. Demontaż Java JIT skompilowany natywny kod bajtowy
- 8. Złamany kod z rolami w GHC 7.8
- 9. Jak emitować i wykonywać kod bajtowy Java w czasie wykonywania?
- 10. Jak sprawdzić kod bajtowy java wygenerowany przez Clojure z rep?
- 11. Czy jest jakiś sposób programowo wygenerować kod bajtowy Pythona?
- 12. Zinterpretować coś i uruchomić wygenerowany kod bajtowy w Javie?
- 13. Czy dynamicznie generowany kod bajtowy java wymaga jakiejkolwiek optymalizacji?
- 14. Dlaczego kod bajtowy java "zapisz" często następuje po "załadowaniu"?
- 15. Sprawdź, czy kod bajtowy Java zawiera symbole debugowania
- 16. Co oznacza pozbawiony JAR (nie kod bajtowy dla metod)?
- 17. Używanie opcji -with-rtsopts ghc jako pragma
- 18. Dlaczego ten kod, który został sprawdzony w GHC 7.10, nie zawiera już sprawdzania w GHC 8.0.1?
- 19. GHC API - Jak dynamicznie ładować kod Haskella ze skompilowanego modułu za pomocą GHC 7.2?
- 20. Skompiluj kod lua, przechowuj kod bajtowy, a następnie załaduj i uruchom go
- 21. Konwersja bajtowy ciąg w Javie
- 22. Jak napisać kod niezależny od platformy w Haskell (ghc)?
- 23. GHC 7.10 generuje wolniejszy kod niż starsze wersje
- 24. Gdzie jest kod źródłowy rozszerzenia języka GHC: "Strzałki"?
- 25. Podłączanie do systemu GHC
- 26. Koszt GHC TypeLits
- 27. Jak ustawić kod bajtowy Kotlina w projekcie Gradle na Java 8?
- 28. Opis wyjścia zespołu GHC
- 29. Kod wykonawczy zapisany jako lista
- 30. Coercible z GHC 7,10