最近在看一些关于js方面的东东,除了些Ajax的基本应用,还了解了些函数式编程(FP)的东东。虽然以前也玩过几天lisp的,不过因为当时完全对FP的东西没有概念,压根就不知道原来这是List那一族最大的特性之一(另外我知道的还有个是GC,orz...),光注意那些诡异的“表”去了。
总结一下,传统上认为FP的两大特点一个是高阶抽象,一个是惰性求值。这两个词听起来都有点学术化,好像是在搞数学研究。高阶抽象实际上说的是函数的抽象以及分解能力,这个应该很符合程序语言设计中很重要的可组合性的要求。惰性求值当然是为了性能了,实际上现在每次写&&,||这些逻辑运算的时候都要考虑下怎么写会高效一点,不过在函数式编程中用处就更明显了。
FP实际上是个很老的概念,最近逐渐变得火热的一个原因是因为多核处理器的发展。双核出来之后,四核八核跟进得很快,可以预计16、32核应该也不是很遥远的幻想。但是在软件开发里面实际上真正能够发挥这些cores的应用并不多,实际上多线程编程一直都还是件很复杂的事情。尽管每个developer都少都知道点关于create thread/process以及sync同步的技巧,但是那些真正迫切需要多线程的复杂应用里面多线程实际上发挥的作用很有限。主要原因也是在语言和工具一级并没有很好的支持多线程,再加上现在的代码往往还要跟面向对象的封装扯在一起,而OO和FP本身就是属于两种差异很大的编程风格,所以导致对运算过程的分解非常困难,如果再考虑到难以预料的同步问题,通常会直接导致dev放弃使用多线程的方案。函数式编程在这个问题上有先天的优势,高阶抽象,无副作用这些正好是解决问题的良药。也难怪现在各大语言都在FP上面打主意。。。
居然尽然已经有快三个月没有更新blog了,实在惭愧~~