Haskell Porting Initiative

Материал из ALT Linux Wiki

Задачи

Получение рабочего транслятора Haskell, что требуется в т.ч. для широко востребованного пакета pandoc.

Состояние проекта

Собран руками Hugs98 версии ноября 2002 года. Далее надо выполнять плавный перекат на более новые версии вплоть до максимальной. Также есть необходимость наладить контакт с авторами статей по бутстрапу GHC и разработчиками, чтобы скоординировать усилия сообщества.

Механизм портирования

Наиболее актуальной реализацией интерпретатора и компилятора языка Haskell является Glasgow Haskell Compiler. В связи с тем, что он написан на самом Haskell - портирование на новые платформы затруднено. Наиболее актуальный вариант - бутстрап с помощью интерпретатора Hugs98, написанного на языке программирования C.

Hugs 98

В работе: nir@

Список проблем:

  • Для успешного конфигурирования сначала необходимо обновить файл config.guess из http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD или с помощью команды cp -at . -- /usr/share/gnu-config/config.sub /usr/share/gnu-config/config.guess, но стоит отметить, что было бы лучше указать архитектуру как e2k* на случай появления e2kv3, e2kv4 и подобных.
  • Hugs98 из стандартной поставки содержит ряд ошибок в коде, которые требуется патчить.

GHC

Портирование GHC представляет собой проект огромной сложности хотя бы потому, что GHC даже минимально доступной версии (0.29) не собирался ни чем кроме GHC. Пользователи и разработчики GHC с каналов #haskell и #ghc отправляют читать популярные статьи:

Сборочные зависимости:

  • alex
  • happy
  • cabal
  • libffi (для целевой платформы)
  • gcc (для целевой платформы)
  • ghc

GHC поддерживает сборку двумя предыдущими минорными релизами. Также, GHC не поддерживает кросс-компиляцию: Опция --build должна быть эквивалентная опции --host.

Сборка GHC 0.29

При сборке старых версий GHC (0.29, 3.x, etc.) существует проблема несовместимости новых вариантов FHS и интерпретаторов с ожиданиями старой сборочной системы.

Сборка GHC 4.08.2

Согласно старым версиям документации GHC - наиболее простым вариантом бутстрапа на новых архитектурах является сборка "unregistered" GHC начиная с версии 4.08.2 ( https://downloads.haskell.org/~ghc/6.0/docs/html/building/sec-porting-ghc.html ), который можно скачать на странице: https://www.haskell.org/ghc/download_ghc_408.html . Также на той же странице присутствуют файлы hc с которых можно начать бутстрап.

На текущий момент для бутстрапа GHC необходимо знать platform ABI, чтобы поправить ассемблерные части в кодогенераторе, написанном на Perl.