先看代码:
a();
b();
c();
假设a, b, c分别是我要做的三件事。一般的特别是新生程序员喜欢这么写程序。因为他们不知道顺序结构的特征,不知道怎么处理这样的东西。
这里面有很多的问题。
第一个问题就是,比如,如果这三个方法都更新了某一个状态,如果任何一个点出异常怎么办?内存的状态一致性就被破坏了。这个在数据库叫数据的完整性。完整性包括三个要素:正确性,有效性,相容性。刚开始的程序员都不知道这个,都以为好东西只是数据库才有的东西,没想到内存也有吧。
但是有。
第二,a, b, c不是同等地位的。比如,如果a失败,那么b就做不了啦;如果b失败,c就做不了了。试想如果你且个调用了100个方法的过程......是不是?所以说语义很重要,语义很重要。形式化的手段往往跟你要的语义相差十万八千里。要了解你的问题域,还要了解你的程序。
要构建强壮的程序,必须要了解顺序代码,在冯诺依曼体系下。在数据流体系下没这个问题,因为它就没有顺序执行的概念,它就没有执行的概念,它只有计算的概念。在那种环境下,它能犯的错只能是计算意义上的错,不可能有状态上与执行顺序上的问题。在函数式语言下,根据需要,所有的程序都会得到执行。
为什么会有人喜欢FP呢?这就是原因。
计算是一种哲学,执行是另一种。执行你需要TAKE CARE OF A LOT OF THINGS,而计算你只需要TAKE CARE OF FORMULAS。
为什么我不考虑一下erLang呢?
多好的语言啊!