编程——最初只是研究数学的要做的工作。现在已经成为一项大众游戏。原来数学工作者在计算机上进行的编程工作——已经成为没有多少人会去做的“低层“工作。而对于数学工作者或内核编程人员来说,做现在这种普遍的编程工作没有什么吸引力。
计算机的发明也就是为了研究数学。
简单地说:就是先有0,然后1,然后0+1,1+1, 。。。直至无穷。
既然通过计算机可以很好的,非常简单地,精确地描述数学。那么,可以用这种方法来描述文字(或者语言)吗?
可以,它就是逻辑,它不仅是数学的语言,还是语言的语言。
遗憾的是,现在的程序员好像已经失去这种能力了。本质上是简单的东西,为什么不去做好它呢?
请看用逻辑描述一个语言会有多么简单:
Exp::=n|x|E+E|E-E|E*E|E/E|
Boo::=true|false|!B|B&B|(B||B)|E<E
好了,这就是一个语言。可以想象它就是一个c语言的子集。
Exp——表达式 Boo——布尔值
n——数字
x——文字(变量)
!, & ,||——分别对应c语言中!, &&, ||
E>E可以由!(E<E)表达。
c语言中!= 对应 !(==), 而==表示逻辑相等(产生布尔值),=表示赋值。 以上描述就是一个语言,可以作为我们的一个核心语言。 有了语言,还要组装语言以产生程序,这就要靠逻辑规则了。 所有程序的严格证明必须要靠一定的逻辑规则,而不是简单的测试。 所以,今后的内核开发方法强调程序证明,而不仅仅是测试。