Albert Lee论函数式和Haskell

39 views
Skip to first unread message

Hamo

unread,
Oct 19, 2009, 10:29:12 PM10/19/09
to TopLanguage邮件列表
题目我起得有点大....但内容真的很深刻...


---------- Forwarded message ----------
From: Albert Lee <hanzh...@gmail.com>
Date: 2009/10/19
Subject: Re: 祝鹏哥,有个小问题,关于Haskell的
To: Hamo <ham...@gmail.com>


技术的发展是一个连续的过程,预测未来先要看过去,理出发展的脉络,未来就清楚了.

什么样的技术流行,大公司的推动固然是重要的因素,但是大公司为什么会选择某种技术推动呢?
也是要符合视察国内和当时当地的各种因素.否则违背市场和技术的基本规律,大公司就是再大的力度也会被市场抛弃.

从基本面上看:

1. 业务逻辑会越来越复杂,程序的可验证性将变得越来越困难越来越重要.这一点FP具有坚实的理论基础,在未来会更加显出优势.

2. 计算能力提高的极限. 单个cpu的速度发展会遇到瓶颈,要进一步提高处理能力,只能走并行,多核的方向.
这不是说单个核的不能更快,而是因为受到散热,功耗等经济性因素的限制,Intel 等厂商不会往那个方向走了.
因此要提高计算能力,软件上的努力更加重要.
要进行多核的开发,传统上的多线程技术, 以及STM,纯函数式等都是可以选择的,另外还有GPU上的计算.
而纯函数式语言,天生的特点:无副作用,数据流,等都自然的适合并行多核的开发.
对于多核的开发来说,写出来不难,难的是调试,和程序正确性的验证.在这一点上多线程的方式是比不上纯函数式的.

3. 从语言特性的流行与发展看,函数式的思路和特性已经慢慢的完成了普及工作.OO出现后,也是从实验室和少数发烧友慢慢普及到普通的开发者的.现在FP从实验室和大学里面已经2,30年了,目前已经渗透到
Python, Ruby, C# 等语言中.微软也推出了 F#,
在VS2010里面将成为和C#一样等级的语言.这些都表明了市场对于这种技术的准备工作在慢慢进行.

4. Haskell 不一定会火,但它代表的一种编程理念将会逐步深入人心,它替代不了现在的"主流",但至少可以独当一面了.最终的主流获胜者很可能是一种具有良好语法,混合了OO与FP的语言,目前看来
C# 和 F# , 以及Java领域的 scala 等 有这些特色.
个人较为看好 C# .

5. FP 的理念与 Unix 的基本理念有些相通之处,尤其与 shell 的管道,命令组合 很像.
通过函数组合,高阶函数,纯函数这些,将一个个小的功能组合起来,产生成倍的能力.这种理念,无论从微观的代码,到宏观的系统架构,都是值得借鉴思考的.


2009/10/17 Hamo <ham...@gmail.com>
>
> 祝鹏哥,你好。我有个小问题,关于Haskell的...
> 5年前,你说python会火,python果然火了,我觉得,与google等大公司的支持是分不开的,比如Java,.net等,都是要有大公司支持才会火的。像D语言,虽然理念不错,但是没有公司支持,依旧是现在这种不死不活的状态。对于Haskell,你为什么觉得它会火呢?就我所知,它现在似乎还没有哪个大公司支持..你觉得,是什么吸引了你让你觉得它会火呢?在理念上,或者在实践上它有什么优点呢?
>
> --
> Name:白杨
> Nick Name:Hamo
> Website:http://hamobai.com/
> Blog: http://blog.hamobai.com/


--
Name:白杨
Nick Name:Hamo
Website:http://hamobai.com/
Blog: http://blog.hamobai.com/

Jianshi Huang

unread,
Oct 20, 2009, 12:46:46 AM10/20/09
to pon...@googlegroups.com
2009/10/20 Hamo <ham...@gmail.com>:
> 1. 业务逻辑会越来越复杂,程序的可验证性将变得越来越困难越来越重要.这一点FP具有坚实的理论基础,在未来会更加显出优势.
>

恩,今年ICFP上谈论得最多的就是如何程序验证。

> 2. 计算能力提高的极限. 单个cpu的速度发展会遇到瓶颈,要进一步提高处理能力,只能走并行,多核的方向.
> 这不是说单个核的不能更快,而是因为受到散热,功耗等经济性因素的限制,Intel 等厂商不会往那个方向走了.
> 因此要提高计算能力,软件上的努力更加重要.
> 要进行多核的开发,传统上的多线程技术, 以及STM,纯函数式等都是可以选择的,另外还有GPU上的计算.
> 而纯函数式语言,天生的特点:无副作用,数据流,等都自然的适合并行多核的开发.
> 对于多核的开发来说,写出来不难,难的是调试,和程序正确性的验证.在这一点上多线程的方式是比不上纯函数式的.
>

纯函数式和多线程,STM不在一个概念范围。

> 3. 从语言特性的流行与发展看,函数式的思路和特性已经慢慢的完成了普及工作.OO出现后,也是从实验室和少数发烧友慢慢普及到普通的开发者的.现在FP从实验室和大学里面已经2,30年了,目前已经渗透到
> Python, Ruby, C# 等语言中.微软也推出了 F#,
> 在VS2010里面将成为和C#一样等级的语言.这些都表明了市场对于这种技术的准备工作在慢慢进行.
>

我觉得 C# 里的 LINQ 可以算是函数式语言的应用了。

> 4. Haskell 不一定会火,但它代表的一种编程理念将会逐步深入人心,它替代不了现在的"主流",但至少可以独当一面了.最终的主流获胜者很可能是一种具有良好语法,混合了OO与FP的语言,目前看来
> C# 和 F# , 以及Java领域的 scala 等 有这些特色.
> 个人较为看好 C# .
>

为什么不直接用 Haskell?

> 5. FP 的理念与 Unix 的基本理念有些相通之处,尤其与 shell 的管道,命令组合 很像.
> 通过函数组合,高阶函数,纯函数这些,将一个个小的功能组合起来,产生成倍的能力.这种理念,无论从微观的代码,到宏观的系统架构,都是值得借鉴思考的.
>

的确,用FP能写出更模块化的程序。


--
黄 澗石 (Jianshi Huang)
http://huangjs.net/

geben...@gmail.com

unread,
Oct 20, 2009, 1:01:56 AM10/20/09
to TopLanguage
> 为什么不直接用 Haskell?

我以前google到F#的创始人don syme在haskell maillist的发言. 他本来想把haskell整到.net中的, 可是因
为haskell的lazy evaluation跟.net framework不兼容,并且.net 的类库都是OO的, 跟haskell也很难
配合. 最后选择了ocaml.

Jianshi Huang

unread,
Oct 20, 2009, 1:03:57 AM10/20/09
to pon...@googlegroups.com
2009/10/20 geben...@gmail.com <geben...@gmail.com>:

我的意思是,为什么要抱着 .net, 直接用 haskell 好了,有GHC那么好的平台。

Jeffrey Zhao

unread,
Oct 20, 2009, 1:10:01 AM10/20/09
to pon...@googlegroups.com
方便各种语言和类库的无缝集成吧,就好比现在许多语言都在往CLR和JVM上靠。


Jeffrey Zhao
Blog: http://www.cnblogs.com/JeffreyZhao
Twitter: http://twitter.com/jeffz_cn

--------------------------------------------------
From: "Jianshi Huang" <jiansh...@gmail.com>
Sent: Tuesday, October 20, 2009 1:03 PM
To: <pon...@googlegroups.com>
Subject: [TL] Re: Albert Lee论函数式和Haskell

Albert Lee

unread,
Oct 20, 2009, 1:29:17 AM10/20/09
to TopLanguage

On Oct 20, 1:03 pm, Jianshi Huang <jianshi.hu...@gmail.com> wrote:
> 2009/10/20 gebenxi...@gmail.com <gebenxi...@gmail.com>:


>
> >> 为什么不直接用 Haskell?
>
> > 我以前google到F#的创始人don syme在haskell maillist的发言. 他本来想把haskell整到.net中的, 可是因
> > 为haskell的lazy evaluation跟.net framework不兼容,并且.net 的类库都是OO的, 跟haskell也很难
> > 配合. 最后选择了ocaml.
>
> 我的意思是,为什么要抱着 .net, 直接用 haskell 好了,有GHC那么好的平台。
>
> --


这是个鸡生蛋蛋生鸡的问题, 没有足够多的应用库和使用者.
我们可以迎难而上去用GHC, "主流" 用户没那么容易接受.
因此我才认为它会继续小众下去,并不断给大众提供新思路和方向的探索.

Jianshi Huang

unread,
Oct 20, 2009, 2:17:29 AM10/20/09
to pon...@googlegroups.com
2009/10/20 Albert Lee <hanzh...@gmail.com>:

> 这是个鸡生蛋蛋生鸡的问题, 没有足够多的应用库和使用者.
> 我们可以迎难而上去用GHC, "主流" 用户没那么容易接受.
> 因此我才认为它会继续小众下去,并不断给大众提供新思路和方向的探索.

有什么关系,最终出来的程序,不看你到底跑在哪个平台上。何况有 C 的 FFI,是个更通用的接口。

而且前面说了, Haskell 的 lazy evaluation 和 .net 集成格格不入,也意味着就算是 .net
上的纯FP语言,互相调用也是相当的麻烦,何况还要将类型系统撮合在一起。换句话说,F#之类的不管从效率上还是特性上,都无法和 native
的FP语言相比。

Jeffrey Zhao

unread,
Oct 20, 2009, 2:24:53 AM10/20/09
to pon...@googlegroups.com
我觉得也没啥做不了的了,要实现都是可以的了,只是看愿意不愿意,有的时候只是编译器方便不方便的问题。

.NET上也有IronScheme,F#以OCaml做底子,也没发现啥效率和特性上的缺失,不是吗?JVM上也有Jaskell,我觉得其实只是没人去做CLR上的Haskell而已。

Haskell的Lazy Evaluation,我用C#也能很丑陋地表现出来,这不也说明这个“功能”是满足的吗?

--------------------------------------------------
From: "Jianshi Huang" <jiansh...@gmail.com>

Sent: Tuesday, October 20, 2009 2:17 PM


To: <pon...@googlegroups.com>
Subject: [TL] Re: Albert Lee论函数式和Haskell

> 2009/10/20 Albert Lee <hanzh...@gmail.com>:

Jianshi Huang

unread,
Oct 20, 2009, 2:33:07 AM10/20/09
to pon...@googlegroups.com
2009/10/20 Jeffrey Zhao <je...@live.com>:

>
> 我觉得也没啥做不了的了,要实现都是可以的了,只是看愿意不愿意,有的时候只是编译器方便不方便的问题。
>
> .NET上也有IronScheme,F#以OCaml做底子,也没发现啥效率和特性上的缺失,不是吗?JVM上也有Jaskell,我觉得其实只是没人去做CLR上的Haskell而已。
>
> Haskell的Lazy Evaluation,我用C#也能很丑陋地表现出来,这不也说明这个“功能”是满足的吗?
>

我的意思是,要既无缝集成,比如Haskell 中调用C#定义的函数,又能保留特性,是很困难的。如果考虑到 lazy eval,则至少需要
C# 能支持纯函数的申明,或者把责任完全扔给程序员。不过这也未必不好。

还有,haskell type 到 .net type 的映射该怎么处理?处理得不好影响交互,或者限制未来改进实现的可能。总之,弊远远大于利。

Jeffrey Zhao

unread,
Oct 20, 2009, 2:40:49 AM10/20/09
to pon...@googlegroups.com
嗯嗯,我觉得语言集成和类库使用上的疑问,可能比语言实现本身的问题要大得多,如果只是实现一个语言和一套类库,不管现有类库复用,应该也不算困难。

就像你说的,对Haskell来说,.NET类库里现有的方法到底IO不IO?从“表面”上这是根本看不出来的,像Haskell这种严格区分pure不pure的语言,可能是个大麻烦,最终可能的确的确要“把责任完全扔给程序员”。

我比较感兴趣JVM平台上的Jaskell是怎么一回事,我也是刚听说,但是丝毫不了解,而这个语言的确也不如Clojure,Groovy,Scala那样红火……

--------------------------------------------------
From: "Jianshi Huang" <jiansh...@gmail.com>

Sent: Tuesday, October 20, 2009 2:33 PM

久远

unread,
Oct 20, 2009, 3:08:55 AM10/20/09
to TopLanguage
我听说,只有三种编程语言有机会成为主流,接近机器思维的,或者接近普通人思维的,或者前两者折中的。其它类型的语言,除非有什么特别的机遇,大概会一
直小众下去吧。

Jeffrey Zhao

unread,
Oct 20, 2009, 3:12:27 AM10/20/09
to pon...@googlegroups.com
我觉得这三种编程语言已经覆盖了所有语言了吧……

语言这东西要发展,有时候还是得看机遇的,不是“语言特性”这一个方面决定的。

--------------------------------------------------
From: "久远" <d3dc...@gmail.com>
Sent: Tuesday, October 20, 2009 3:08 PM
To: "TopLanguage" <pon...@googlegroups.com>


Subject: [TL] Re: Albert Lee论函数式和Haskell

> 我听说,只有三种编程语言有机会成为主流,接近机器思维的,或者接近普通人思维的,或者前两者折中的。其它类型的语言,除非有什么特别的机遇,大概会一
> 直小众下去吧。

Tinyfool

unread,
Oct 20, 2009, 3:17:10 AM10/20/09
to pon...@googlegroups.com
这是对编程语言进行分类的最常见一种方法,呵呵。当然你是可以设计一个跳出这三者之外的语言,没有大的意外的话,那确实也不会流行起来,哈哈。

2009/10/20 Jeffrey Zhao <je...@live.com>



--
Tinyfool的开发日记 http://www.tinydust.net/dev/
代码中国网 http://www.codechina.org
myTwitter: http://twitter.com/tinyfool

up duan

unread,
Oct 20, 2009, 3:19:51 AM10/20/09
to pon...@googlegroups.com


2009/10/20 Jeffrey Zhao <je...@live.com>


嗯嗯,我觉得语言集成和类库使用上的疑问,可能比语言实现本身的问题要大得多,如果只是实现一个语言和一套类库,不管现有类库复用,应该也不算困难。

就像你说的,对Haskell来说,.NET类库里现有的方法到底IO不IO?从“表面”上这是根本看不出来的,像Haskell这种严格区分pure不pure的语言,可能是个大麻烦,最终可能的确的确要“把责任完全扔给程序员”。

我比较感兴趣JVM平台上的Jaskell是怎么一回事,我也是刚听说,但是丝毫不了解,而这个语言的确也不如Clojure,Groovy,Scala那样红火……

我记得Jaskell是ajoo的脚本语言吧 。

geben...@gmail.com

unread,
Oct 20, 2009, 3:24:32 AM10/20/09
to TopLanguage
连don syme都搞不定haskell for .NET, 那么估计难度极大.

一个语言再好, 可如果没有库的支持, 就不会有人去用. 谁受得了不停的去写那些很通用的代码? 主流语言中都有很庞大的库.

一个偷懒的办法是想办法重用已有语言的库, 就像F#那样可以无缝的使用.NET中的巨型类库.

对于语言的设计者来说, 发明优美的语法很快乐, 写库就是体力活了.

geben...@gmail.com

unread,
Oct 20, 2009, 3:28:25 AM10/20/09
to TopLanguage
haskell不属于这三种类型, 所以很难流行开来.


On 10月20日, 下午3时12分, "Jeffrey Zhao" <je...@live.com> wrote:
> 我觉得这三种编程语言已经覆盖了所有语言了吧……
>
> 语言这东西要发展,有时候还是得看机遇的,不是“语言特性”这一个方面决定的。
>
> Jeffrey Zhao
> Blog:http://www.cnblogs.com/JeffreyZhao
> Twitter:http://twitter.com/jeffz_cn
>
> --------------------------------------------------

> From: "久远" <d3dco...@gmail.com>

Jianshi Huang

unread,
Oct 20, 2009, 3:36:29 AM10/20/09
to pon...@googlegroups.com
同样 Lisp 也是,不过也好,就当作是自己的秘密武器吧。

GHC 的库已经够多了吧,期待 6.12,性能可以好好得再提升一截。


2009/10/20 geben...@gmail.com <geben...@gmail.com>:

--

Reply all
Reply to author
Forward
0 new messages