注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Silence的博客

大师只有一个

 
 
 

日志

 
 

函数式语言介绍[转载]  

2010-07-20 14:14:35|  分类: 技术 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
出处:http://hi.baidu.com/soulmachine/blog/item/60c477270b023802908f9dc8.html
 
想要学习新语言,我一般遵循一下原则进行筛选:

         1.能带来思想的革新,如果一门语言与自己已经掌握的语言有太大重叠甚至是一个体系的,没有学习的价值。目前编程语言我认为大体就是三类:命令式(别跟我说面向对象,它只不过是命令式的包装),函数式,逻辑式。

        命令式的语言相信很多人都学了一把了,C,C++,Java,C#,我就较系统的学了这一把,其他浅尝辄止的语言就不提了。函数式以前摸过Scheme后就再也没派上用场,逻辑式似乎只有一种Prolog,我记得还专门买过清华的一本烂书《人工智能(AI)编程语言(面向对象语言)》,全部翻译的是VisualProlog官网的资料,词不达意还残缺不全,顺序混乱,而且那个VisualProlog个人版每次编译都跳出烦人的对话框,界面丑陋,令人失望。目前函数式编程理论成熟,逻辑式编程理论似乎有缺陷,而且工业上那一吨的专家系统都是CommonLisp写的(注意,我可没有提Scheme),而且CommonLisp在人工智能领域外也大有作为,有很多成功的商业案例,Prolog就似乎只能在人工智能这一角混了。

         再加上《程序员》杂志上说的函数式在并发方面的好处,以及函数式语言一般抽象能力很强,正好用来写写人工智能的东东,于是我决定重新学习一门函数式语言了。

         2. 语言要有一个大的社区,最好已经经过了ANSI或ISO标准化。这样优势很明显,社区大,就人多,人多就力量大。有标准,劲都往一处使,就会有一吨的库出来供你用。这一原则对于较新的语言不适用,更别提标准了,通过了标准的都不是新技术新思想了。不过可以从tiobe的排名上大致看出某个语言的社区规模,免得学了某个语言后才发现找不到编译器。

            最早的函数式语言当然是Lisp,现在有两个分支:Common lisp和Scheme。Common lisp是一个庞大的语言,支持多种编程范式,Scheme是Commonlisp的子集,二者都是ANSI标准。Scheme由于语言核心很小,多用在教育领域,CommonLisp多用来写专家系统,也可以构造大型软件。
        最纯的函数式语言是Haskell,完全没有副作用,有一个Hakell98标准,但还不是ANSI或ISO标准,算是一个社区标准吧。
        ML也是一种跟Lisp差不多老的语言,现在有StandardML,Caml和微软的F#三个常见变种。
        Lisp 和Scheme 在tiobe的排名还不错,又老又壮,ML 和Haskell比Lisp家族都要年轻,用的人明显少了很多,社区也比较小。erlang和ocaml排名都很后。

         3.是否有好的开发环境。虽然新语言一般都不具备这一点,但如果有一个好的IDE,会觉得正式很多,学起来也有底气。

         Common Lisp 有个LispWorks个人版(40多M)还可以称得上是IDE,但有很多限制,还有个Cusp的eclipse插件。Scheme最好的估计是PLTScheme(12M多)了,连语法高亮都没有,还有个SchemeWay的Eclipse插件,也有个Netbeans插件,都很简陋。Haskell有个免费的VisualHeskell的Visualstudio(60多M)的插件,很不错,至于简陋的编辑器一大把,也有个eclipseFP的eclipse插件。

         4.是否有相关资料和出版的书籍。新语言一般没有很多书,但至少得有一两本吧,否则就显得太势单力薄了。

          在amazon上搜索了一下,Haskell 有一本2007年新出的《Programming inHaskell》,Common Lisp只有2005年的书,Scheme只有2003年的书,OCaml有一本2006年11月出的《PracticalOCaml》,最后是F#有2007年新出版的两本书《Foundations ofF#》和《Expert F#》,erlang今年也有新书。

                            
       经过在tiobe和amzon的形势分析,有这几个候选:CommonLisp ,Haskell,OCaml,erlang。

       CommonLisp,Ocaml,erlang都是多范式的,都支持命令式,面向对象和函数方式。如果函数式语言支持这三种编程范式,我还不如用已经熟悉的Ruby呢,社区比上面三个至少大一个数量级。只有Haskell是纯FP语言,号称是最优雅的FP语言。对了,在ICFP上Haskell还是2004,2005,2006连续三年的冠军。

        Haskell能强迫你用函数式编程,用其他语言你不知不决就会用命令式的习惯来编程。Haskell在第一条和第三条占优势,在第二条大大输给CommonLisp(lisp毕竟是最早的函数式语言,历史悠久,又经过标准化,不过我现在就是要学新思想嘛,可以不介意),第四条跟CommonLisp平手。Oaml ,erlang在第一条和第三条跟CommonLisp平手,第四条略有优势,因为都有新书,第二条就大大劣势了,基本上败的很惨。第一条是最重要的,因为毕竟是新技术,后三条只是用于参考。理所当然我选择了Haskell。

      《程序语言设计--实践之路》里有一句多函数式编程的总结和展望:“看来在未来的年代里,我们很可能看到函数式语言使用的显著增长,特别是纯函数式语言”。
       纯函数式语言现在看来只有Haskell,看来是不得不学它了。

  评论这张
 
阅读(630)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017