Haskell (Русский)

From ArchWiki
Jump to navigation Jump to search

Haskell — чистый функциональный язык программирования общего назначения.

Установка

Компилятор

Чтобы собрать исходный код Haskell в машинный код, необходимо установить компилятор. Доступно несколько реализаций, но наиболее используемая (которая теперь фактически является стандартом) - это GHC (Glasgow Haskell Compiler). Он доступен в официальных репозиториях как ghc.

Вы можете попробовать его, создав следующий файл:

Main.hs
main = putStrLn "Hello, World"

и запустив:

$ ghc -dynamic Main.hs
$ ./Main 
Hello, World

Проблемы со связыванием

Начиная с версии 8.0.2-1, пакет ghc больше не устанавливает статически связываемые версии библиотек GHC по умолчанию, как и пакеты haskell-* в community. Поэтому для успешного связывания необходимо указывать GHC флаг -dynamic, так как по умолчанию оно статическое. Для Cabal необходима следующая конфигурация:

cabal configure --disable-library-vanilla --enable-shared --enable-executable-dynamic --ghc-options=-dynamic
  • --disable-library-vanilla подавляет создание статически связываемых библиотек (если Ваш проект содержит библиотеку).
  • --enable-shared позволяет создавать разделяемые библиотеки (если Ваш проект содержит библиотеку).
  • --enable-executable-dynamic позволяет использовать динамическое связывание для исполняемых файлов (если Ваш проект содержит исполняемые файлы).
  • --ghc-options=-dynamic добавляет флаг -dynamic к каждому вызову GHC (если, например, у пакета нетривиальный Setup.hs).

Также можно установить эти флаги в ~/.cabal/config, чтобы они применялись к каждому проекту по умолчанию:

~/.cabal/config
library-vanilla: False
shared: True
executable-dynamic: True
program-default-options
  ghc-options:
    -dynamic

Учтите, что если Вы использовали gchup для установки cabal, вносить эти изменения в ~/.cabal/config нельзя. Это может привести к таким ошибкам, как dieVerbatim: user error (cabal: '/home/user/.ghcup/bin/ghc'.

Динамическое связывание используется для большинства модулей Haskell, доступных через pacman и некоторых пакетов в AUR. Поскольку GHC не предоставляет ABI совместимость между релизами компилятора, статическое связывание часто является предпочтительным решением для разработки вне системы пакетов.

Примечание: В контексте этой статьи статическое связывание не означает генерацию полностью статических бинарных файлов ELF. Только код на Haskell будет статически связан в один бинарный файл ELF, который может быть динамически связан с другими системными библиотеками, такими как glibc.

Статическое связывание

Сборка статически связанных пакетов с помощью Cabal (без использования разделяемых библиотек)

Средства разработки Haskell

Управление пакетами Haskell

Плюсы / минусы различных методов

Репозиторий ArchHaskell

cabal-install

Подготовка и $PATH

Установка пакетов user-wide

Песочницы

Удаление пакетов

stack

Смотрите также