---------- 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/
恩,今年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/
我以前google到F#的创始人don syme在haskell maillist的发言. 他本来想把haskell整到.net中的, 可是因
为haskell的lazy evaluation跟.net framework不兼容,并且.net 的类库都是OO的, 跟haskell也很难
配合. 最后选择了ocaml.
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
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, "主流" 用户没那么容易接受.
因此我才认为它会继续小众下去,并不断给大众提供新思路和方向的探索.
有什么关系,最终出来的程序,不看你到底跑在哪个平台上。何况有 C 的 FFI,是个更通用的接口。
而且前面说了, Haskell 的 lazy evaluation 和 .net 集成格格不入,也意味着就算是 .net
上的纯FP语言,互相调用也是相当的麻烦,何况还要将类型系统撮合在一起。换句话说,F#之类的不管从效率上还是特性上,都无法和 native
的FP语言相比。
.NET上也有IronScheme,F#以OCaml做底子,也没发现啥效率和特性上的缺失,不是吗?JVM上也有Jaskell,我觉得其实只是没人去做CLR上的Haskell而已。
Haskell的Lazy Evaluation,我用C#也能很丑陋地表现出来,这不也说明这个“功能”是满足的吗?
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 2:17 PM
To: <pon...@googlegroups.com>
Subject: [TL] Re: Albert Lee论函数式和Haskell
> 2009/10/20 Albert Lee <hanzh...@gmail.com>:
我的意思是,要既无缝集成,比如Haskell 中调用C#定义的函数,又能保留特性,是很困难的。如果考虑到 lazy eval,则至少需要
C# 能支持纯函数的申明,或者把责任完全扔给程序员。不过这也未必不好。
还有,haskell type 到 .net type 的映射该怎么处理?处理得不好影响交互,或者限制未来改进实现的可能。总之,弊远远大于利。
就像你说的,对Haskell来说,.NET类库里现有的方法到底IO不IO?从“表面”上这是根本看不出来的,像Haskell这种严格区分pure不pure的语言,可能是个大麻烦,最终可能的确的确要“把责任完全扔给程序员”。
我比较感兴趣JVM平台上的Jaskell是怎么一回事,我也是刚听说,但是丝毫不了解,而这个语言的确也不如Clojure,Groovy,Scala那样红火……
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 2:33 PM
语言这东西要发展,有时候还是得看机遇的,不是“语言特性”这一个方面决定的。
Jeffrey Zhao
Blog: http://www.cnblogs.com/JeffreyZhao
Twitter: http://twitter.com/jeffz_cn
--------------------------------------------------
From: "久远" <d3dc...@gmail.com>
Sent: Tuesday, October 20, 2009 3:08 PM
To: "TopLanguage" <pon...@googlegroups.com>
Subject: [TL] Re: Albert Lee论函数式和Haskell
> 我听说,只有三种编程语言有机会成为主流,接近机器思维的,或者接近普通人思维的,或者前两者折中的。其它类型的语言,除非有什么特别的机遇,大概会一
> 直小众下去吧。
嗯嗯,我觉得语言集成和类库使用上的疑问,可能比语言实现本身的问题要大得多,如果只是实现一个语言和一套类库,不管现有类库复用,应该也不算困难。
就像你说的,对Haskell来说,.NET类库里现有的方法到底IO不IO?从“表面”上这是根本看不出来的,像Haskell这种严格区分pure不pure的语言,可能是个大麻烦,最终可能的确的确要“把责任完全扔给程序员”。
我比较感兴趣JVM平台上的Jaskell是怎么一回事,我也是刚听说,但是丝毫不了解,而这个语言的确也不如Clojure,Groovy,Scala那样红火……
一个语言再好, 可如果没有库的支持, 就不会有人去用. 谁受得了不停的去写那些很通用的代码? 主流语言中都有很庞大的库.
一个偷懒的办法是想办法重用已有语言的库, 就像F#那样可以无缝的使用.NET中的巨型类库.
对于语言的设计者来说, 发明优美的语法很快乐, 写库就是体力活了.
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>
GHC 的库已经够多了吧,期待 6.12,性能可以好好得再提升一截。
2009/10/20 geben...@gmail.com <geben...@gmail.com>:
--