瑞星卡卡安全论坛技术交流区系统软件 【原创】从机理欣赏语言1

1   1  /  1  页   跳转

【原创】从机理欣赏语言1

【原创】从机理欣赏语言1

就编程语言而言,它的机理决定了它的语法,决定了它的编码结构,决定了它的编程思想。所谓机制,其实也可以简单的理解为一种语言的文化。学习和体味一种语言的时候,实际上就是了解其文化的过程。

    从打孔机时代,到4位8位机器,甚至是当时的巨型机,一个程序就是一个过程。从早期的汇编语言发展到Fortran语言,再到BASIC语言。因为没有堆栈,所以自然也就没有函数,自然也就需要经常使用goto语句。Goto语句的唯一作用就是使得代码从一个区域跳到另一个区域。
在8位机6502的CPU中,引入了基本的堆栈。随之而来的,便是子程序(此时的子程序仅为模块内调用的子程序)的引入。子程序是什么呢?说到底,就是子代码块。在笔者所知道的一些语言当中,子程序和函数的不同主要有以下几点:子程序是可以视作可直接插入调用处的代码块,它的值传递是双向的;函数并不完全能视作可直接插入调用处的代码块,面向过程语言的值传递是单向的,面向对象语言的值传递还可以实现双向值传递。

[补充]
一般教科书上对函数值传递,认为是虚实结合,笔者并不同意这样的说法。除引用外,对于所有数据类型的传递,函数的运作机制是等同的。也就是说,你传入的整型也好,浮点型也好,是自定义的结构也好,实参的值都是不能被改变的——因此,它的参数是单向传递的。就是对于地址的传递,在操作中,依然没有改变传入地址参数的值。引用在函数的运作中有另一套的处理机制,简单的说,对于引用参数的处理,是一个“传入——运算——复制”的过程。显然,它只比原有的函数参数增加了一个复制的过程,这也就是所谓的双向传递。

在16位时代,堆栈是独立的,其空间不受限制了。此时,堆栈可以存储参数,因此子程序的作用得到了扩充。从Pascal开始,到C语言,终于引入的函数的概念。当函数调用的时候,将调用处地址,函数入口地址,参数等一一压入堆栈,执行和返回的时候将再数据一一取出。这时候,从人的理解角度,数据和操作终于实现了分离。
后来,面向对象语言的引入了类。类实际上就是数据和操作的捆绑。

无论是通过什么方式去实现,模块化其实一直贯穿程序设计的产生和发展,因此把复杂分解为若干个简单问题的集合的思维一直延续到了现在。
最后编辑2007-02-24 11:32:25
分享到:
gototop
 

gototop
 
1   1  /  1  页   跳转
页面顶部
Powered by Discuz!NT