hackage.haskell.org文档约定含义

时间:2012-07-17 16:19:28

标签: haskell haskell-platform

我目前正在阅读http://hackage.haskell.org/packages/archive/containers/latest/doc/html/Data-Set.html#t:Set

以下细节如何表达(对绝对的haskell初学者)?

便携性:便携式(其他哪些是便携性值?)
稳定性:临时性(其他哪个是稳定性值?)
维护者:libraries@haskell.org
安全Haskell:安全(有什么不安全的东西?)

1 个答案:

答案 0 :(得分:18)

这些字段来自包的.cabal文件,该文件列出了包的一些元数据。许多字段可以具有自由格式值,因此开发人员可以决定在该字段中写入什么内容,并且没有固定的“规则”来确定每个字段不得包含的内容。

可移植性:描述包在Haskell编译器之间的可移植性,有时也在操作系统之间。我见过的唯一值是“便携式”和“不可移植”。一个不可移植的包是一个包,它可能依赖于仅存在于GHC编译器中的Haskell语言扩展,并且不适用于UHC之类的任何其他Haskell编译器,或者可能取决于某些系统只存在于UNIX中但在Windows中不起作用的库。

稳定性:指定库的稳定性,包括其可靠性(例如,崩溃的频率),但最重要的是它的API更改频率。我已经看到了“实验”,“临时”和“稳定”的价值观,但可能会有一个更多的列表(Cabal文档中的内容有时无法找到)。当一个包是实验性的时,这意味着它的接口可能在每个版本之间发生变化,因为开发人员还没有决定它应该如何实现,或者因为开发人员只是从某个地方的某个论文实现了一些理论功能,而不是打算维持包裹;他/她只想实现功能,看看是否可能,并将包作为演示发布。当一个包是临时的时,这意味着通用API是稳定的,因此可能会对包修复内部错误并且不添加或删除任何功能。但是,由于它是临时的,当开发人员决定添加新功能或重新构建库时,它可能会在未来发生变化。有了稳定的库,这基本上不会发生; API可能永远不会改变,实现是“坚如磐石”或API的参考实现。

包裹的维护者是负责包裹的个人或团体。该电子邮件指定了如何联系这些维护者。

安全Haskell ”字段是指GHC扩展程序,您可以阅读有关here的更多信息。 unsafe 的模块使用像unsafePerformIO这样的函数,它打破了Haskell的一些基本“规则”,就像参照透明度一样。 不安全模块也可能使用不安全的语言扩展。 安全模块是一个不使用任何不安全功能等的模块,也不会导入任何其他不安全的模块。 可信模块使用不安全的函数(直接可信赖,间接信任),但作者确保模块的公共API隐藏了此功能事实上,从外面看,模块似乎对所有意图和目的都是安全的。这些是“安全Haskell”字段的选项。