这是 Stackoverflow 中一篇答案的粗略翻译,原文地址 http://stackoverflow.com/a/2302230/296473已失效。
-
没有人听说过它。没有人会使用他们根本不知道的东西。
-
不够流行。人们认为最流行的语言就是最好的语言,因为如果它不好的话,它就不会流行。实际上这根本不成立。最流行的语言最流行,仅此而已。Haskell 不流行是因为它不流行。这就是 Haskell 里经常用到的「递归」。不管来自命令式编程世界的人们怎么说,递归在现实世界中非常常见。
-
它不一样。人们总是害怕新事物。
-
它很难。人们认为 Haskell 难学难用。这显然和第三点有关。Haskell 里充斥着一些高深晦涩的术语,如「单子就是自函子范畴中的独异点,有什么问题吗?」(译注:这句话真难译 :-( )。普通人可理解不了这个。
-
有风险。大多数公司不想第一个吃螃蟹。Haskell 的用户太少了,所以很少有用户愿意尝试它。(看吧,又是递归。)
-
招不到程序员。首先,按第二点,会 Haskell 的人很少。然后,大多数人相信第四点,所以找不到愿意学习的程序员。使用一门招不到程序员的编程语言风险太大了。(好吧,我们回到第五点了。)
-
库。这可能是最重要的一点,所以我多说一些。
A. 质量。有很多库,可是质量参差不齐。大多数 Haskell 库(Hackage)是个人的业余项目,文档欠缺。有些不完整,有些已经不再能用,有些在特定情况下会出错。
B. 多个不兼容的库。你能够使用 Haskell 连接到数据库。但问题是,存在一堆这样的库,让人很难分辨出哪些是被支持的库,哪些在几年前就已经烂掉了。而且,在 Haskell 中连接数据库也不像开个 ODBC 连接那样简单。针对每种数据库,每个库都用不同的后端。在数据库支持的广泛性上 Haskell 做得不错,连新出现的 Mongo 或者 Cassandra 数据库都支持。开源可能没有给予 Haskell 以深度,但给予了其以广度。
C. Windows。几乎所有重要的库(比如加密、二进制数据文件格式、网络协议、数据压缩、连接数据库等)是 C 语言库的包装。它们在 Windows 上编译不了。因为 Windows 是市场上最大的目标平台,这是个大问题。
-
效率无法预测。由于对 Haskell 缺乏了解,很多人甚至都不知道这一点。很多人直接就认为「Haskell 效率低下」。这不对。事实是,很难预测一个 Haskell 程序的效率。微妙的、没有明显关联的不同有时可能导致效率的巨大差异。(译注:蝴蝶效应啊?)
-
正确性。大多数公司对正确性并不重视。它们不在意质量。它们只要尽可能迅速地把代码扔出去赚大把大把的钞票就好了。如果代码有 bug 的话,它们就向客户卖补丁。把代码写对没用;重要的是快速把代码写出来。Haskell 会用优美的解来回馈那些坐下来深入分析问题的人。大多数公司不喜欢这样;他们只要尽可能快地把产品搞出来,以后再修正它,如果还有以后的话。
的确有少数地方正确性很重要。这些地方基本上要么是级别甚高的安全系统,要么是金融系统。(译注:交集不为空?)就我所知,Haskell 在这些领域还是比较流行的。
最后说两点:
-
我还记得不是太久前人们还叫嚷着「C++ 是给菜鸟的玩具!你应该用像 C 这样真正的编程语言。」现在再看看有多少大型 C++ 程序?
-
人们总是在说 Lisp 是「下一个里程碑性语言」。他们说了多久?已经 40 年了?Lisp 比几乎所有主流编程语言都要老。现在看看有多少大型 Lisp 程序?
我不知道 Haskell 的命运终将如何。我觉得,Haskell 好的思想会被像 C# 或者 F#、OCaml 这样的杂交语言偷取。人们依旧不会使用 Haskell。它太不一样了。
不管怎么说,关于为什么业界不用 Haskell,见以上观点。它太罕见、太不流行、太奇特,库也不完善。大约就是这样。
后记:
也许,照耀大地的永远是在众恒星中普普通通的太阳,人们永远不会知道在宇宙的某个角落里曾经诞生过一颗绝美无比的小星星。这个世界是不完美的,否则如果它是完善的,缺少了不完美,它还完美吗?这个世界是不公平的,流星划过苍穹,带给多少人希望,而它自己却身殒,不留下一点痕迹。