Spec-Zone.ru › Haskell 8

7.10. Генераторы кода GHC

GHC поддерживает несколько генераторов кода для различных платформ. Это часть компилятора, ответственная за преобразование последнего промежуточного представления, используемого GHC (форма, называемая Cmm, представляющая собой простой язык, похожий на C), в исполняемый код. Ниже описаны поддерживаемые GHC бэкэнды.

7.10.1. Генератор кода для родной платформы (-fasm)

По умолчанию GHC использует бэкэнд для генерации кода для родной платформы, компилируя Cmm до ассемблерного кода. Это самый быстрый бэкэнд и, как правило, генерирует код с хорошей производительностью. Он обеспечивает лучшую поддержку компиляции динамических библиотек. Выберите его с помощью флага -fasm.

7.10.2. Генератор кода LLVM (-fllvm)

Это альтернативный бэкэнд, использующий компилятор LLVM, для генерации исполняемого кода. Как правило, он генерирует код с такой же производительностью, что и генератор кода для родной платформы, но в некоторых случаях может генерировать гораздо более быстрый код, особенно для кода с числовыми вычислениями, массивами и пакетами, такими как vector. Однако это приводит к значительному увеличению времени компиляции. Выберите бэкэнд LLVM с помощью флага -fllvm.

Для работы генератора кода LLVM необходимо установить и иметь LLVM на вашей PATH. В частности, GHC должен иметь возможность вызывать инструменты opt и llc. Кроме того, если вы работаете под Mac OS X с LLVM 3.0 или выше, вам также потребуется доступный компилятор Clang C на вашей PATH.

Примечание

Обратите внимание, что этот релиз GHC ожидает версию LLVM в серии 9.

Для установки LLVM и Clang:

  • Linux: Используйте ваш инструмент управления пакетами.
  • Mac OS X: Clang включен по умолчанию на последних версиях OS X, когда установлен Xcode (с версии 10.6 и выше). LLVM не включен. Для использования генератора кода на основе LLVM вам следует установить менеджер пакетов Homebrew для OS X. В качестве альтернативы вы можете скачать двоичные файлы LLVM и Clang с здесь.
  • Windows: Вы должны скачать двоичные файлы LLVM и clang с здесь.

7.10.3. Генератор кода C (-fvia-C)

-fvia-C

Использовать генератор кода C. Поддерживается только в незарегистрированных сборках GHC.

Это самый старый генератор кода в GHC и, как правило, больше не включается, так как устарел примерно с GHC 7.0. Выберите его с помощью флага -fvia-C.

Генератор кода C поддерживается только при компиляции GHC в режиме без регистрации, когда GHC генерирует «портабельный» C-код в качестве выходных данных для облегчения переноса самого GHC на новую платформу. Этот режим, однако, генерирует гораздо более медленный код, поэтому вряд ли ваша версия GHC была скомпилирована таким образом. Если это так, то генератор кода для родной платформы, вероятно, недоступен. Вы можете проверить эту информацию, вызвав ghc --info (см. --info).

7.10.4. Компиляция без регистрации

Термин «без регистрации» на самом деле означает «компиляция через базовый C», отключая некоторые платформенно-специфические приёмы, которые GHC обычно использует, чтобы ускорить программы. При компиляции без регистрации GHC просто генерирует C-файл, который компилируется с помощью gcc.

При построении GHC в режиме без регистрации доступны только генераторы кода LLVM и C. Генератор кода для родной платформы недоступен. LLVM обычно обеспечивает существенное преимущество в производительности по сравнению с бэкэндом C в режиме без регистрации.

Компиляция без регистрации может быть полезна при переносе GHC на новую машину, поскольку она уменьшает необходимые инструменты до gcc, as, и ld и ничего больше, а также объём платформенно-специфического кода, который нужно написать для запуска компиляции без регистрации, обычно довольно невелик.

Компиляцию без регистрации нельзя выбрать во время компиляции; вам необходимо скомпилировать GHC с соответствующими параметрами. Обратитесь к Руководству по сборке GHC для получения подробностей.

Вы можете проверить, является ли ваш GHC незарегистрированным, вызвав ghc --info (см. --info).

© 2002–2007 The University Court of the University of Glasgow. All rights reserved.
Licensed under the Glasgow Haskell Compiler License.
https://downloads.haskell.org/~ghc/8.10.2/docs/html/users_guide/codegens.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API