为什么某些最新版本的 ghc 不被“推荐”?

fla*_*vio 6 haskell ghc

为什么同时有这么多“活跃”版本的 ghc?我相信有一些技术原因,但无法弄清楚到底是什么..

ghcup 显示 ghc 的 11 个版本,其中之一被标记为推荐版本。我找不到一些解释为什么推荐该版本,你......

我只是想理解为什么不推荐最后一个版本,以及为什么不只有一个版本与该语言和库的多个版本兼容。我假设这是一个很难解决的问题,但无法弄清楚为什么。

请注意:我现在使用 haskell 一段时间了,但无论如何都不是专家。

lef*_*out 7

别太担心它。这并不是说不推荐其他版本,主要是 GHCUP 试图让初学者更容易地选择一个不太可能出现问题的版本。

\n

为什么不推荐最新的呢?\xe2\x80\x93 两个原因:

\n
    \n
  • 有时,新的 GHC 版本确实(故意)破坏现有代码,毕竟它是一个研究编译器,而不仅仅是固定语言标准的实现。这通常涉及初学者不太可能直接接触的语言的相当高级的角落,但它很可能导致与她尝试使用的库不兼容。最终(希望)该库将被修补以与较新的编译器一起使用,但这可能需要一些时间。
  • \n
  • 即使是 Haskell 中设计良好的程序(例如 GHC)也并非没有错误,显然这些错误在具有全新功能的版本中更常见。较旧的主要版本将通过次要版本中引入的错误修复来很大程度上消除其错误,因此使用早于最新版本的主要版本 1 或 2 的最新次要版本通常是最安全的。
  • \n
\n

当然,您仍然希望GHCUP 中提供较新的版本,既允许访问最闪亮的新功能,又使库开发人员可以确保其软件包面向未来。

\n

为什么不推荐一款更老的呢?\xe2\x80\x93 这应该是很明显的:

\n
    \n
  • 随着时间的推移,编译器在优化等方面确实会变得更好。
  • \n
  • 旧的做事方式有时已经过时了。例如,历史上Monad没有Functor超类,这可能会导致尴尬的道德重复约束等等。显然,初学者不应该面对这个问题。
  • \n
\n

同样,这并不意味着旧版本不应该可用。它们保存在 GHCUP 中,这样就可以编译那些不适用于较新编译器的遗留代码(并希望开发它来改变这一点!),并且还允许库开发人员检查他们的包是否仍然与新的编译器兼容。旧编译器。

\n