没一句正经的业余程序员

奔跑在云计算大道上的软件民科

导航

一种软件理论分析的胡思乱想

        软件从某种意义上说,就是以各种程序设计语言记载、并运行在遍布全球的计算基础设施上的人类思想。人类社会文明程度越高,对软件的依赖越大。人类的思想异化为软件,但我们自身却迷失在软件所营造的异度空间中。

        软件的逻辑就是以言行事的逻辑,软件程序操控着人造世界,我们就生活在其中。从语言学视角对软件进行分析,有助于我们脱离细节的牵绊,从纯理论看待这个极其复杂的怪物。我们可以借用语言学的语法、语义和语用,把这三个因素表征为三维的坐标系。
      (1)语义维度
        我们可以把各类计算模型安排在语义维度上,数学家和计算机科学家已经构造出五花八门的计算理论,比如自动机、图灵机、冯诺曼机、函数式模型、逻辑式模型、并发模型、项重写等等。有许多模型是图灵等价的。
       (2)语法维度
        驱动着语法进展的是抽象的力量,抽象带来的语法糖虽然并没有增加计算模型的能力,但它大大提高了描述程序的效率、安全性和可读性。计算模型中控制、数据都可以进行抽象。抽象的基本手段是命名和参数化。历史上的结构化程序设计、面向对象程序设计是两次巨大的抽象语法维度的进展。
        (3)语用维度
         计算机语言语用一方面是语义、语法在计算机上实现范畴。另一方面就是软件以言行事的范畴,通过I/O操控外部世界。计算理论认为I/O是非本质的副作用的东西,但这却是人类为什么需要软件的原因。

        一、程序设计语言中的概念构造,可以比喻为这个理论三维空间中的点。
       例如类型构造,一般被认为是语法维度的东西。但是通过类型理论中curry-howard同态,却揭示出类型与逻辑的联系,由此丰富了语义模型。为了支持类型,语用维度必须在纯代码的基础上添加元语言信息。
      例如纯函数程序语言,以lambda演算作为语义模型。人们在函数程序语言中引入了continuation、monad等概念。这些构造有语法的形态,但也有语用上的内涵——I/O副作用,由此为函数程序操控世界打开了一扇门。

      二、底层的元语言编程行为,可以比喻为这个理论三维空间中的变换。
      传统的过程式程序设计的编译、解释,高级语言和低级语言的语义模型是一样的,主要属于语法维度的变换。但是函数程序语言、逻辑程序语言的处理,除了语法维度的变换,还多了语义模型的变换。由此导致在语用维度上,函数程序和逻辑程序的运行时间系统比过程式语言复杂,运行效率也有下降。
      程序员封装函数库的API设计,某种意义就是语言的设计。而极端者如DSL领域专用语言,就是从外部领域的语用内容直接向语法-语义平面的投射。
     lisp之所以被称为可编程的程序设计语言,在于在语法维度上增加对理论三维空间变换的变换,使其元语言编程能力极为强大。lisp的宏用作DSL设计,就是on lisp中鼓吹的自底向上的编程方式。

posted on 2012-04-14 21:59  没一句正经的业余程序员  阅读(1942)  评论(0编辑  收藏  举报