think in fp

Fri 03 August 2012
By KJ

In FP.

函数式编程另类指南是一篇极好的文章. 它追求通俗, 不过即便是这样, 即使非常有经验的程序员, 读起来还是有些吃力.

这里我谈一谈个人的感受

异步

我们在谈论函数式编程的时候, 谈论的较多的是一个概念, closure(中文翻译叫做闭包, 这是一个非常烂的翻译)

我不想具体讨论closure的含义, 我们关注它的作用, 我们能用closure做什么? 我觉得closure最大的用途可能就是编写异步代码了.

我们开始真正的进行异步编程, 应该是从第一个win32程序开始的. 那时候看纯C写的Windows程序, 手动构建一个消息循环, 或许我们并没有意识到, 我们正开始学习异步编程. 最明显的一个概念就是回调

异步编程几乎就是一切高性能编程的基础. 同时, 它对几乎所有的多线程编程说了NO. 我们在编写一个Windows程序的时候第一次弄懂了一个问题: 有好几个窗口, 都会操作一个变量, 请问变量要不要加锁?答案是NO, 当时一个同事说出正确答案: 因为执行顺序是在消息循环里的, 我们没有用多线程, 所以不需要给变量加锁.

如果今天让我再次回答, 那么答案将更加简单: 异步编程不需要加锁, 多线程编程才要加锁.

理论上, 所有的计算机语言都可以进行异步编程. 一些语言不提供多线程库, 则不得不使用异步编程. 比如说: PHP和JavaScript

我相信大量大量的程序员接触的第一门函数式语言是JavaScript, 同时他们第一次进行的异步编程, 也就是ajax调用.

我们看到的一点非常有趣的现象是, 多线程更加符合人们的常规思维模式, 而异步更加高效. 所以在有多线程的情况下, 人们选择多线程. 但是在没有多线程的函数式编程环境里面, 人们很自然的使用异步模式.

函数即代码

这是一个从一开始就困惑人的问题, 这里用问题带出来问题:

早在BASIC时代, 大家知道BASIC 有 READ 和 DATA 两个命令, 那是其实数据是存在程序里面的. 后来程序内部定义的Array也差不多是这个意思.

程序在执行的时候, 程序本身的数据放在哪里? 在DOS时代640K内存限制的年代, 这是一个值得思考的问题. 当然现在也值得思考.

用程序写程序

数据长度溢出, 黑客攻击的常用手段之一, 数据变为可执行代码

OK, 先就这么多

blogroll

social