Haskell: различия между версиями

Материал из ALT Linux Wiki
Нет описания правки
(не показаны 4 промежуточные версии этого же участника)
Строка 1: Строка 1:
[[category:haskell]]
[[category:haskell]]
{{Шаблон:ОбновляемаяСтатья}}
Небольшие заметки по <code>Haskell/GHC</code> в Сизифе


Вот некоторые заметки по работе с Haskell/GHC.
== Вводные термины ==


Сейчас упакованы старые версии библиотек и старая версия компилятора. Для чего-то этого достаточно, для чего-то может быть недостаточно.
'''Haskell''' - чистый функциональный язык программирования общего назначения.


К счастью, использование нужных Вам при программировании, несовместимых друг с другом версий библиотек осуществляется несложным образом при помощи современного {{cmd|cabal}}, поддерживающего sandboxes. (Про смену компилятора тут речь не идёт.)
'''GHC''' - на данный момент основной и самый продвинутый компилятор <code>Haskell</code>.


==современный {{pkg|cabal}}==
'''cabal''' - менеджер пакетов для <code>Haskell</code>. Так же называется расширение файлов с метаинформацией о пакете. Непосредственно запускаемую программу <code>cabal</code> для большей ясности будем называть <code>cabal-install</code> (по имени пакета)


(TODO: современный {{pkg|cabal}} упаковать в Sisyphus.)
= Текущее состояние дел =


Можно, чтобы при сборке и установке пакетов {{cmd|cabal}}-ом не пересобиралась куча пакетов-зависимостей (и не ждать больше), сначала в систему поставить некоторый набор из Sisyphus. (Хотя это будет означать, что будут использованы не самые свежие их версии. Но всё равно разрешённые, конечно.) Например:
В Sisyphus собрана достаточно актуальная (на 2025 год) версия компилятора GHC - 9.6.7 и cabal-install 3.14.2.0


# apt-get install ghc7.6.1-cabal-install ghc7.6.1 ghc7.6.1-darcs ghc7.6.1-language-c ghc7.6.1-happy ghc7.6.1-alex
Это два определяющих инфраструктуру пакета, их сборка происходит в режиме бутстрапа (см. статью [[Haskell/GHC]])


Теперь устанавливаем пользователю новую версию {{cmd|cabal-install}} (с поддержкой sandboxes):
= Версионирование GHC =


$ cabal update
Политика наименования пакетов с <code>GHC</code> следующая:
$ cabal install cabal-install


Один из способов поместить установленный пользователю {{cmd|cabal}}-ом исполняемый файл (в данном случае, сам {{cmd|cabal}}) в PATH:
В версии X.Y.Z число X.Y будем называть мажором, а Z - релизом.


$ ln -s ~/.cabal/bin/cabal ~/bin/ -v
В Сизифе может быть произвольное число мажорных релизов компилятора, причём установленных в системе параллельно (они в общем никак никому не мешают, только возможны периодические FTBFS на этапе создания документации. ).


После этого нужно, чтобы shell не вызывал старый "закешированный" cabal (можно по-простому заново зайти).
Основной пакет с компилятором именуется следующим образом: <code>ghc{мажор}</code>, т.е. для <code>GHC</code> 9.6.6 пакет будет называться <code>ghc9.6</code> (так же и gear репозиторий)


Другой способ -- получить сразу все подконтрольные {{cmd|cabal}}-у программы: добавлять в PATH {{path|~/.cabal/bin/cabal}}. Простой пример из конца {{path|~/.bash_profile}}:
= Сборка пакетов =


<pre>
Среди всех мажоров компилятора выделяется один - "стабильный". Он ставится при помощи метапакета [https://packages.altlinux.org/ru/sisyphus/srpms/ghc/ ghc]. Его же и следует (но не обязательно) использовать для сборки пакетов.
export PATH=~/.cabal/bin:"$PATH"


# ...
RPM макросы находятся в <code>rpm-build-haskell</code> (<code>-vendored</code> для статически слинкованных)
# other additions to PATH
export PATH=~/.golang/bin:"$PATH"


# ~/bin should have a priority
См. статьи [[Haskell/RPM]] и [[Haskell/Vendored]]
export PATH=~/bin:"$PATH"
</pre>


===jobs===
= Наименование пакетов =
Заодно можно включить использование многих процессоров, что поддерживается в новом cabal:
<pre>
$ fgrep jobs ~/.cabal/config
-- jobs:
$ subst 's|^-- jobs:$|jobs: $ncpus|' ~/.cabal/config
$ fgrep jobs ~/.cabal/config
jobs: $ncpus
$
</pre>


(Однако в таком режиме при сборке не будут печататься предупреждения компилятора и т.п., потому что параллельно будет идти несколько сборок.)
Запускаемые программы, написанные на <code>Haskell</code>, должны называться просто по апстримному наименованию. Например <code>alex</code> или <code>cabal-install</code>.
 
Библиотеки называются следующим образом: <code>ghc{мажор}-{название_библиотеки}</code>, в случае сборки библиотеки со "стабильным" <code>GHC</code> библиотеку следует называть <code>ghc-{название_библиотеки}</code>
 
= Основные репозитории =
 
* Текущие мажоры GHC:
** [https://git.altlinux.org/gears/g/ghc9.6.git ghc9.6] - стабильный
 
* Метапакет - [https://git.altlinux.org/gears/g/ghc.git ghc]
 
* [https://git.altlinux.org/gears/c/cabal-install.git cabal-install]
 
= Подробнее =
* [[Haskell/GHC]]
 
* [[Haskell/RPM]]
 
* [[Haskell/Vendored]]

Версия от 11:06, 9 июня 2025

50px-Gnome globe current event.png
Данная статья периодически обновляется.
Последнее обновление
11:06 09 июня 2025

Небольшие заметки по Haskell/GHC в Сизифе

Вводные термины

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

GHC - на данный момент основной и самый продвинутый компилятор Haskell.

cabal - менеджер пакетов для Haskell. Так же называется расширение файлов с метаинформацией о пакете. Непосредственно запускаемую программу cabal для большей ясности будем называть cabal-install (по имени пакета)

Текущее состояние дел

В Sisyphus собрана достаточно актуальная (на 2025 год) версия компилятора GHC - 9.6.7 и cabal-install 3.14.2.0

Это два определяющих инфраструктуру пакета, их сборка происходит в режиме бутстрапа (см. статью Haskell/GHC)

Версионирование GHC

Политика наименования пакетов с GHC следующая:

В версии X.Y.Z число X.Y будем называть мажором, а Z - релизом.

В Сизифе может быть произвольное число мажорных релизов компилятора, причём установленных в системе параллельно (они в общем никак никому не мешают, только возможны периодические FTBFS на этапе создания документации. ).

Основной пакет с компилятором именуется следующим образом: ghc{мажор}, т.е. для GHC 9.6.6 пакет будет называться ghc9.6 (так же и gear репозиторий)

Сборка пакетов

Среди всех мажоров компилятора выделяется один - "стабильный". Он ставится при помощи метапакета ghc. Его же и следует (но не обязательно) использовать для сборки пакетов.

RPM макросы находятся в rpm-build-haskell (-vendored для статически слинкованных)

См. статьи Haskell/RPM и Haskell/Vendored

Наименование пакетов

Запускаемые программы, написанные на Haskell, должны называться просто по апстримному наименованию. Например alex или cabal-install.

Библиотеки называются следующим образом: ghc{мажор}-{название_библиотеки}, в случае сборки библиотеки со "стабильным" GHC библиотеку следует называть ghc-{название_библиотеки}

Основные репозитории

  • Текущие мажоры GHC:
  • Метапакет - ghc

Подробнее