Haskell:程序员的未来利器(1)--初识Haskell

来源:互联网 发布:pkpm施工软件 编辑:程序博客网 时间:2024/04/30 03:57

   学习Haskell有很长时间了,也做了几个很小的项目,觉得我们真的可以从它的身上学到很多的东西,发现网上关于Haskell的中文资料很少,于是就想把自己的一些认识和想法写下来,和大家探讨学习。更希望能让很多不知道和不了解Haskell的程序员们认识、学习这个语言。

   语言对于程序员就像是拿在手上的兵刃,只要用起来得心应手,匕首也可能比大刀好使。但与武侠小说中大侠们专于一种兵刃不同,很多程序员和我一样,喜欢学习新的语言,虽不要求自己刀枪剑戟十八般武器样样精通,但是带尖的要会一种,带刃的也要会一种,过程式语言要学一种,面向对象的也要会一种,静态的要学,动态的也要学。只有知道了不同类型语言的核心优势,才能选择真正适合应用的语言。

   这两年语言的发展也说明了这样一点,在做一个项目一个应用的时候,已不再是C++或是Java一统天下,而是对于不同的组件、不同的模块使用与各自情况相适应的语言。核心算法可能对运行效率要求高,那可以使用CC++实现,而前端、通信等对效率要求不高或是语言本身效率影响较小的模块则可以使用动态语言实现。通过语言的互操作,在不太影响运行效率的前提下大幅度提高开发效率。

   那么在经历了面向过程到面向对象、从静态到动态的发展后,未来的语言会是什么样呢?IT界的发展一向变化莫测,最好的技术不一定能得到广泛应用,所以谁也不敢保证未来的语言一定是什么样,但我们依然可以从一些与大众语言有着巨大差异的语言中猜测一下未来语言的发展方向。而Haskell就是这样一个异类,我相信,Haskell即使不会成为以后流行的语言,它的很多特性也将发扬光大,所以,即使不能在大的项目中使用Haskell,其中招式学得一二,也必会长进不少,大有裨益。就像武侠小说里,真正的大侠总是学一些“旁门左道”的功夫。

   Haskell语言虽然听起来很陌生,但它的年龄比JavaPython都要大,Haskell的最初设计目的就是要统一函数式语言。在Haskell之前,函数式语言种类繁多而又具有差不多的特性,于是一伙都拿过PhD的家伙组成了一个组委会,来设计一个包含不同函数式语言主要特性的纯函数式语言。此后的十多年里,Haskell成了一个语言实验平台,不断有新的特性加进来,也有一些被实践证明并不实用的特性被剔除,直到Haskell98标准制定后才稳定下来。这也是我认为Haskell可以影响未来语言的原因之一,它的很多特性是经过实践证明的,不是哪一个人头脑发热一时想出来的。有人把今天的Haskell比作20年前的Smalltalk,它可能不会成为一个流行的大众语言,但它的许多特性可能会影响一大批语言,甚至会像Smalltalk那样影响到未来的编程模式。那么Haskell主要有那些值得我们学习的特性呢?Haskell实在是有着太多与众不同的特性了,别说是常见的CC++这些过程式和OO语言,就是与LISP这样的(自称的)函数式语言也有着极大不同,HaskellPureFunctional(纯函数式的),基于Lambda演算,没有变量,没有赋值操作,当然也就没有循环,函数就是数学定义的函数,没有副作用。那它有什么呢?它有高阶函数,有惰性求值(lazyevaluation),有强大的类型系统,有模式匹配,有currying,有闭包,有Monad,有Arrow,....总之,它有着无比强大的抽象能力,它更能适应未来的并行计算、分布式计算等。

   我将在以后的文章中解释探讨这些特性,希望通过这些探讨,让大家认识Haskell,甚至能喜欢上它。如果你现在就想了解这些东西,直接访问Haskell的主页www.haskell.org就可以了,那里有所有你需要的资源。