User:Valsaven/Haskell (Русский)
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 совместимость между релизами компилятора, статическое связывание часто является предпочтительным решением для разработки вне системы пакетов.