一种软件理论分析的胡思乱想
2012-04-14 21:59
218 查看
软件从某种意义上说,就是以各种程序设计语言记载、并运行在遍布全球的计算基础设施上的人类思想。人类社会文明程度越高,对软件的依赖越大。人类的思想异化为软件,但我们自身却迷失在软件所营造的异度空间中。
软件的逻辑就是以言行事的逻辑,软件程序操控着人造世界,我们就生活在其中。从语言学视角对软件进行分析,有助于我们脱离细节的牵绊,从纯理论看待这个极其复杂的怪物。我们可以借用语言学的语法、语义和语用,把这三个因素表征为三维的坐标系。
(1)语义维度
我们可以把各类计算模型安排在语义维度上,数学家和计算机科学家已经构造出五花八门的计算理论,比如自动机、图灵机、冯诺曼机、函数式模型、逻辑式模型、并发模型、项重写等等。有许多模型是图灵等价的。
(2)语法维度
驱动着语法进展的是抽象的力量,抽象带来的语法糖虽然并没有增加计算模型的能力,但它大大提高了描述程序的效率、安全性和可读性。计算模型中控制、数据都可以进行抽象。抽象的基本手段是命名和参数化。历史上的结构化程序设计、面向对象程序设计是两次巨大的抽象语法维度的进展。
(3)语用维度
计算机语言语用一方面是语义、语法在计算机上实现范畴。另一方面就是软件以言行事的范畴,通过I/O操控外部世界。计算理论认为I/O是非本质的副作用的东西,但这却是人类为什么需要软件的原因。
一、程序设计语言中的概念构造,可以比喻为这个理论三维空间中的点。
例如类型构造,一般被认为是语法维度的东西。但是通过类型理论中curry-howard同态,却揭示出类型与逻辑的联系,由此丰富了语义模型。为了支持类型,语用维度必须在纯代码的基础上添加元语言信息。
例如纯函数程序语言,以lambda演算作为语义模型。人们在函数程序语言中引入了continuation、monad等概念。这些构造有语法的形态,但也有语用上的内涵——I/O副作用,由此为函数程序操控世界打开了一扇门。
二、底层的元语言编程行为,可以比喻为这个理论三维空间中的变换。
传统的过程式程序设计的编译、解释,高级语言和低级语言的语义模型是一样的,主要属于语法维度的变换。但是函数程序语言、逻辑程序语言的处理,除了语法维度的变换,还多了语义模型的变换。由此导致在语用维度上,函数程序和逻辑程序的运行时间系统比过程式语言复杂,运行效率也有下降。
程序员封装函数库的API设计,某种意义就是语言的设计。而极端者如DSL领域专用语言,就是从外部领域的语用内容直接向语法-语义平面的投射。
lisp之所以被称为可编程的程序设计语言,在于在语法维度上增加对理论三维空间变换的变换,使其元语言编程能力极为强大。lisp的宏用作DSL设计,就是on lisp中鼓吹的自底向上的编程方式。
软件的逻辑就是以言行事的逻辑,软件程序操控着人造世界,我们就生活在其中。从语言学视角对软件进行分析,有助于我们脱离细节的牵绊,从纯理论看待这个极其复杂的怪物。我们可以借用语言学的语法、语义和语用,把这三个因素表征为三维的坐标系。
(1)语义维度
我们可以把各类计算模型安排在语义维度上,数学家和计算机科学家已经构造出五花八门的计算理论,比如自动机、图灵机、冯诺曼机、函数式模型、逻辑式模型、并发模型、项重写等等。有许多模型是图灵等价的。
(2)语法维度
驱动着语法进展的是抽象的力量,抽象带来的语法糖虽然并没有增加计算模型的能力,但它大大提高了描述程序的效率、安全性和可读性。计算模型中控制、数据都可以进行抽象。抽象的基本手段是命名和参数化。历史上的结构化程序设计、面向对象程序设计是两次巨大的抽象语法维度的进展。
(3)语用维度
计算机语言语用一方面是语义、语法在计算机上实现范畴。另一方面就是软件以言行事的范畴,通过I/O操控外部世界。计算理论认为I/O是非本质的副作用的东西,但这却是人类为什么需要软件的原因。
一、程序设计语言中的概念构造,可以比喻为这个理论三维空间中的点。
例如类型构造,一般被认为是语法维度的东西。但是通过类型理论中curry-howard同态,却揭示出类型与逻辑的联系,由此丰富了语义模型。为了支持类型,语用维度必须在纯代码的基础上添加元语言信息。
例如纯函数程序语言,以lambda演算作为语义模型。人们在函数程序语言中引入了continuation、monad等概念。这些构造有语法的形态,但也有语用上的内涵——I/O副作用,由此为函数程序操控世界打开了一扇门。
二、底层的元语言编程行为,可以比喻为这个理论三维空间中的变换。
传统的过程式程序设计的编译、解释,高级语言和低级语言的语义模型是一样的,主要属于语法维度的变换。但是函数程序语言、逻辑程序语言的处理,除了语法维度的变换,还多了语义模型的变换。由此导致在语用维度上,函数程序和逻辑程序的运行时间系统比过程式语言复杂,运行效率也有下降。
程序员封装函数库的API设计,某种意义就是语言的设计。而极端者如DSL领域专用语言,就是从外部领域的语用内容直接向语法-语义平面的投射。
lisp之所以被称为可编程的程序设计语言,在于在语法维度上增加对理论三维空间变换的变换,使其元语言编程能力极为强大。lisp的宏用作DSL设计,就是on lisp中鼓吹的自底向上的编程方式。
相关文章推荐
- 一种基于SPC的软件过程质量分析方法 推荐
- 项目管理理论与实践(2)——软件需求分析
- 结构化分析方法是一种自下而上逐步求精的分析方法【软件项目管理】
- 【软件项目管理】用例分析方法采用一种面向对象的情景分析方法
- 软件工程——理论、方法与实践 之 面相对象分析
- ARM软件访问硬件的核心理论(2.1)---S3C6410 时钟分析
- [循证理论与实践] meta分析系列之二: meta分析的软件
- [循证理论与实践] Meta分析系列之五:贝叶斯 Meta 分析与 WinBUGS 软件
- 软件项目管理理论及实例分析
- ARM软件访问硬件的核心理论(2.1)---S3C6410 时钟分析
- 项目管理理论与实践(2)——软件需求分析
- 仪表销售管理软件需求分析
- 多版本软件构建策略分析
- seci-log 开源日志分析软件发布了
- 软件项目需求分析的20条法则
- HEVC官方软件HM源代码简单分析-解码器TAppDecoder
- 团队作业week2-软件分析和用户需求调查
- 如何做软件需求分析(个人工作经验总结)
- 可能引起「We Were Unable to Load Disqus」错误的一种情况分析
- H.264官方软件JM源代码简单分析-编码器lencod