2009-11-20

程序随笔 - 7

前些日子兴致起来,学了点OCaml,因为不太习惯Haskell的那么pure,或者是太习惯了“printf大法”。OCaml除了impure之外,和Haskell非常相像 -- 可能这也是很多从命令式编程(imperative programming)转到FP的时候,更喜欢OCaml而非Haskell的原因吧。

很巧的是,前几天为一些同事做了关于Linux File I/O programming的培训。我一直在想,如果时间充裕的话(虚拟语气)我应该会聊一些关于 side-effect 之类的东西。讲File I/O的时候我讲了一些关于pipe的东西,而学 Haskell Monad 的时候,我脑子里蹦出来的是两个东西:pipe和Scheme中的continuation。

这几天我断断续续的在想,一个理想中的程序[1]是不是本来就不应该如此直接[2]。突然意识到,像Haskell那样小心翼翼的把pure和impure分隔开简直是个绝妙的想法!硬件设计者或许会在心里痛斥软件设计者的不思进取,因为系统性能的提高很多时候是靠硬件的进步而非软件 -- 软件越来越臃肿,即使是硬件的并发性能提高到令人惊讶的程度,而软件的发展却始终是原地踏步。MSDN Channel 9上Brain Beckman博士有一个长达一个多小时的视频:Don't fear the Monad,深入浅出,相当精彩。无需任何FP背景,只要稍微了解一点编程就能心领神会。

[1] 我也无法描述心中的理想的程序,不过至少应该是简洁、易扩展、高并发吧;

[2] 就像C中可以到处插入printf,添加全局变量等等。

标签:

0 Comments:

发表评论

<< Home