Как я понимаю, GHC (компилятор Glorious Glasgow Haskell) компилирует Haskell в «Core», а затем компилирует это Core в машинный код. Будет ли вообще целесообразно распространять программы Haskell в качестве ядра GHC, как если бы это был «байт-код»? Будет ли какая-либо польза от такого распределения? Почему или почему нет?GHC Core как «байт-код»?
ответ
Это не было бы практично; GHC Core не переносится. Например, на 32-битной машине 64-разрядная арифметика скомпилирована до вызовов внешних функций в Core, но на 64-битной машине она использует собственную арифметику машинного слова.
Что еще более важно, GHC не может на самом деле читать Core; он может распечатать его в нескольких форматах, но нет реального кода для чтения любого из этих форматов. Я не уверен, будет ли какое-либо серьезное препятствие для этого, но это была документально зафиксированная ситуация в течение многих лет , поэтому я не ожидал, что поддержка появится в ближайшее время.
Ядро также довольно близко к Haskell в целом; неясно, что вы купили бы от распространения кода в этой форме. Время, затрачиваемое на то, чтобы превратить Haskell в Core, обычно будет меньше времени, необходимого для того, чтобы делать что-то вроде ссылки на финальную программу, поэтому обычно это не сэкономит во время компиляции вообще.
Кроме того, для Core, чем исходный код Haskell, делается меньше проверок (хотя я думаю, что -dcore-lint
смягчит это), а песочница будет эффективно (есть безопасный Haskell, но без безопасного ядра). Конечно, эти недостатки не применяются, если источнику байт-кода доверяют.
В основном, GHC Core - очень простой промежуточный язык компилятора, в отличие от портативных форматов байт-кода, предназначенных для этой цели, таких как байт-код Python и JVM.
В качестве примечания стороны GHC имеет, имеет интерпретатор байт-кода, используемый GHCi. Используемый там байт-код также не переносится, поэтому нет никаких преимуществ, которые я могу представить по сравнению с машинным кодом, который GHC производит при нормальной работе.
- 1. Как читать это «доказательство» GHC Core?
- 2. Трубопровод GHC: Core, STG - AST или текст?
- 3. Затмение/Javac разный байткод
- 4. ghc: не удалось загрузить пакет `snap-core-0.9.4.1 '
- 5. статический метод отсутствует в байткод
- 6. Локальные переменные в Java байткод
- 7. Как сканировать байткод с гидролокатором сканером
- 8. `obj.f (нуль)` в Java байткод
- 9. Java байткод iconst_0 iadd последовательность
- 10. Генерация байткод из .class Ошиб.файла
- 11. Использование GHC API для компиляции источников Haskell в CORE и CORE в двоичную
- 12. Как использовать GHC MultiParamTypeClass
- 13. Как изменить путь ghc?
- 14. Как я могу помочь SpecConstr в GHC?
- 15. Компиляция в ядре GHC
- 16. Как установить GHC в Cygwin или указать Cygwin на GHC?
- 17. Оптимизация GHC
- 18. Как я могу разобрать ядро GHC?
- 19. LuaJIT: составление байткод в формат объекта
- 20. Добавление параметра для работы в Java Байткод
- 21. попробуйте с ресурсами ввести недостижимый байткод
- 22. ASM байткод приборы для записи методы/выход
- 23. Java байткод: два для цикла на onmethodExit
- 24. Parser Dex файл для байткод retrive
- 25. Как связать модули в ghc?
- 26. Использование библиотеки GHC как библиотеки
- 27. Как удалить старые версии GHC?
- 28. как же байткод представляет собой еще один класс
- 29. символов в GHC
- 30. Список расширений GHC