|
|
1
77
(这当然是一个重复的问题,但我现在找不到。) 你学习它是为了学习纯粹的函数式编程,这迫使你以完全不同的方式做很多事情。你会有一种新的思维方式。无状态编程?编程没有效果?一切都懒惰?有类型推理的疯狂类型系统?Monads到底是什么?你的思想会被反复的吹捧,但最终你会从函数式编程中获得新的视角/技术,而这些在没有全面的haskell的情况下是很难接受的。 尝试具体化的问题是,试图告诉一个非哈斯克尔的人他们将从哈斯克尔中学到什么,就像试图向一个盲人解释颜色“绿色”。 |
|
|
2
41
几年前,我们系的一个漂亮女孩决定兼职学习计算机科学。许多人惊讶地发现其中一门入门课程是使用haskell作为编程语言来教授的!虽然我没有haskell的经验,但我有一些Lisp和其他函数式编程语言的背景,能够帮助她进行练习。 不,这个故事没有一个好结局:她辍学了,嫁给了别人,我好久没见她了。但我认为,这则轶事表明,当你最不期待知识时,知识是如何有用的。 从更实际的角度来说:您可能已经注意到几年前CPU速度已经达到了极限,现在从计算机中获得更多性能的最实际方法是安装多个CPU。现在它是这样发生的,大多数,如果不是所有的编程语言,你知道基本上是单一的任务,并服从于 Von Neumann bottleneck . 一个明显的解决方案是并行编程,但是如果程序的并行部分最终共享状态(即内存),那将是非常痛苦的,而且这种情况最常见。 事实证明,函数式编程是一种风格,它允许您在很大程度上规避共享状态的并行编程问题。不同的是,用fp样式编写“自然”线程安全且适合并行处理的程序相当容易。根据语言、编译器和硬件的不同,您甚至可以发现(正如我最近所做的那样)您的程序的某些部分是并行运行的,而从来没有进行过任何明确的并行编码。 我经常出错,但我的猜测是,随着并行编程变得越来越重要和困难,函数式编程将成为未来热门的编程范例之一。haskell可能不是首选语言——我个人最喜欢的语言是clojure语言——但不妨看看一种或多种fp语言。 |
|
|
3
15
如果你只想写3D游戏引擎,那么学习哈斯克尔也许没什么意义。 如果你想成为一个全面的程序员,能够在多个范例中编程,而你目前只知道C语言,那么它是值得一看的。 每当你学习一种新的非常不同的语言时,它会让你更容易地学习下一种语言,因为你不仅要记住新的语法,还需要学习不同的编程思维方式。如果你尝试了一种新的语言,并且看到了一些新的功能,如果你能用你已经知道的语言把它与另一个功能联系起来,你就会更快地理解它。你了解的语言越多,这个新功能就越有可能与你以前见过的类似。 工具箱中有许多工具也很方便。有些问题用一种语言比另一种语言解决得更好。如果您有5种非常不同的语言类型,那么您可以为每个问题选择最好的一种。如果你只知道两种或三种非常相似的语言,那么有些问题很容易解决,但另一些问题可能比你使用的语言更难解决。 |
|
|
4
9
如果你喜欢3D编程,你可能会对题为 The Next Mainstream Programming Languages: A Game Developer's Perspective 作者蒂姆·斯威尼(TimSweeney),是“虚幻引擎”的EPIC和技术总监的创始人。他谈到这个问题 multiple times 他显然很看重哈斯克尔。 |
|
|
5
6
你可以得到很多东西,主要是你思考事物的方式。例如,注意到最小语言是什么很有趣。如果你学习了sicp(同样的概念也适用于haskell),你会注意到你根本不需要循环语法。您不需要任何在大型结构上工作的预定义函数。如果给你一个cons构造器/解构器,或者定义一个构造器的方法,以及递归函数的能力,你可以定义几乎所有你需要的东西。你可以自己定义其他的一切——这是一个有趣的练习。这只是冰山一角。
例如,在一个更实际的层面上,几周前我在做OCAML作业,并抱怨说:“为什么这个$%$
你可以在ICFP竞赛中找到许多很好的例子;真正让我吃惊的是 this entry 在 this contest . 他们在Haskell内部创建了一种新的语言来解决他们的问题。 |
|
|
6
2
学习一门功能性语言将是一个很大的变化,从你习惯了什么。 所以是的,你可能会学到一些有用的东西;) |
|
|
8
1
像haskell这样的函数语言是一种不同的思考问题的方式。它们对于学习和教学数据结构和算法很有用,因为它们简化了这类问题。 如果您使用C++中的STL,它的功能概念类似于Haskell和其他语言,因此在Haskell有一个基础将有助于理解STL是如何工作的。 如果您使用xsl:t来转换XML,那么它的设计就非常实用。 |