Как используются поля Портативность, Стабильность и Сопровождение модуля Haddock?

Во множестве документации по модулям, созданной Haddock (например, Prelude), в правом верхнем углу можно увидеть небольшое поле, содержащее информацию о переносимости, стабильности и сопровождающем:

Пример окна информации о пакете

От просмотра исходного кода до таких модулей и экспериментов я подтвердил, что эта информация генерируется из строк, подобных следующим в описании модуля:

-- Maintainer  :  [email protected]
-- Stability   :  stable
-- Portability :  portable

В этом есть несколько странностей:

  • Поля только работают в таком порядке — любые поля, расположенные не по порядку, просто рассматриваются как часть самого описания модуля. И это несмотря на то, что порядок в исходном файле противоположный порядку в сгенерированной документации!

  • Мне не удалось найти какую-либо официальную документацию по этим полям. Существует свойство пакета Cabal с именем stability, примеры значений которого соответствуют значениям, которые я видел в эквивалентных полях пикши, но кроме этого я ничего не нашел.

Итак: Как эти поля предназначены для использования и задокументированы ли они где-нибудь?

В частности, я хотел бы знать:

  • Полный список часто используемых значений для Portability и Stability. На этой странице HaskellWiki есть список, но я хотел бы знать, откуда этот список .

  • Критерии принятия решения о том, является ли модуль переносимым или непереносимым. В частности, пакет, для которого я хотел бы получить ответы на эти вопросы, acme-strfry, является привязкой FFI к strfry, функции, доступной только в glibc. Является ли пакет непереносимым, потому что он работает только на системах glibc, или переносимым, потому что он не использует никаких расширений языка Haskell? Обычное использование, кажется, подразумевает последнее.

  • Почему в исходном файле требуется определенный порядок полей и почему он противоположен порядку в сгенерированной документации.


person ehird    schedule 26.01.2012    source источник


Ответы (2)


О, я думал, что эти поля были из описания пакета клики. Кажется, они вообще не задокументированы в документах Хэддока. Я нашел это, что на самом деле не отвечает на ваш вопрос, но:

http://trac.haskell.org/haddock/ticket/71

Так что, если это в любом случае свободная форма, почему бы просто не написать «непереносимый (зависит от glibc)»? Я видел даже «портативный (зависит от ghc)», что странно. Мне также интересно, что происходит с модулями, которые были непереносимыми из-за расширения Foo, отличного от Haskell98, после того, как Foo был добавлен в Haskell 2010.

Обратите внимание, что в документации Cabal, на которую вы ссылаетесь, также говорится, что стабильность — это произвольная форма. Конечно, даже если бы пикша или клика определяли допустимые значения, мейнтейнер все равно должен был бы субъективно выбрать одно из них.

О конкретном порядке вам, вероятно, следует просто спросить в списке рассылки пикши или проверить источник и сообщить об ошибке.

PS: strfry — бесценный вклад в сообщество Haskell, но он должен быть чистым и переносимым, вам так не кажется?

person Rafael Caetano    schedule 26.01.2012
comment
Действительно, в настоящее время я использую непереносимый (только glibc), но мне нужна информация о том, будет ли это считаться правильным использованием поля. - person ehird; 26.01.2012
comment
Хотя поля имеют произвольную форму, тот факт, что документация Cabal, страница HaskellWiki и значения, которые я видел, исходят из небольшого набора значений (включая значения, о которых я не ожидал, что кто-то будет думать самостоятельно, например, предварительный) заставляет меня думать, что значения, используемые на практике, исходят из небольшого набора, даже если этот набор официально нигде не записан; было бы неплохо узнать происхождение набора, по крайней мере. Что касается заказа, я, вероятно, скоро проверю источник или спрошу в списке рассылки. - person ehird; 26.01.2012
comment
P.S. Сделать strfry чистым было бы довольно сложно, учитывая зависимость от глобального состояния ГСЧ :) - person ehird; 26.01.2012
comment
К вашему сведению, я обновил документы Haddock, чтобы рассказать об этом сейчас. Иди и проверь это. - person Mateusz Kowalczyk; 26.03.2014

Ах да, одна из самых непонятных и грубых особенностей Хэддока.

Насколько я могу судить, это просто недокументированный взлом. Нет разумной причины, по которой порядок полей должен иметь значение, но он имеет значение. Конкретный выбор форматирования (т.е. в виде специальной формы внутри комментария модуля, а не в виде отдельного блока) тоже не самый лучший. Я предполагаю, что однажды кто-то хотел быстро добавить эту функцию, поэтому они взломали что-то минимальное, но работающее, и остановились на этом. (Не утруждая себя документированием.)

Лично я просто не заморачиваюсь с этими полями вообще. Информация доступна от Cabal, поэтому я не стал дублировать ее и в Haddock. Возможно, когда-нибудь Кабал автоматически передаст эту информацию Хэддоку...

person MathematicalOrchid    schedule 26.01.2012