编程语言的层次观点—高低层语言与机器控制力

评:

低层语言具有更有效的机器控制力而不是更强的机器控制力。

因为绝大多数高级语言都是图灵完备的。

 

按照我一个朋友的说法,编程语言始终是计算机领域中最本质的东西之一,特别是在计算机工程(而不是科学)领域中,“用什么形式来控制机器”始终是一个核心问题。

 

【基本观点】

1. 编程语言与软件系统一样,处于不同层次。层次越高,对人越友好,控制机器的能力越差;层次越低,控制机器的能力越强。选择开发语言时,根据需要解决的问题选择合适的语言层次,是非常必要的。

 

2. 什么是低层语言?通常对这个问题有很多不同的答案。我个人对于低层语言有以下一些描述:

   1) 直接反映机器行为,而不是人的行为;

   2) 强调对机器的控制能力,兵器能够利用这种控制能力最大限度优化操作;

   3) 存在到机器语言的清晰映射关系;

   4) 能够满足系统编程工作的需求。

    所谓系统编程,在我看来,就是值得为优化性能(这里不仅仅指速度性能)而付出高昂代价的编程工作。有个德国人说得更加直接了当:“所谓系统编程,就是那些CPU时间比程序员的时间更重要的工作。” 显然这不是一个很学术的描述,甚至也不是一个让人感到很愉快的说法,但是确实是一个很好的描述。

 

4. 通用语言(general purpose)。C++, Ada等通用语言,其实是试图摆脱上述的语言分层,希望以单一语言适应各层需求,面对各个应用领域。因此,它们必须立足某一个层次,通过某种形式的抽象提高或者降低自己的层次。比如,C++立足于低层语言C,通过类、模板、继承等机制提高自己的层次;而Ada,立足于“基于对象”这样比较高层的思想,通过各种package来提供底层控制能力。可以说,某种形式的抽象,是提高(和降低)语言层次的唯一手段。然而,抽象是要付出代价的,抽象能力的增强,要么伴以控制能力的减弱,要么伴以复杂度的剧增。Ada和C++不约而同地选择了强大的抽象能力和控制能力,而构造了复杂无比的语言系统。

5. 一旦提供良好的语言互操作性,各种不同层次语言的有效结合将是构造系统最经济、最有效的方式。相比之下,使用某一种通用语言构造整个系统将是非常不经济的选择。也就是说,让各种语言产生的代码在二进制层面上互相合作,比让程序员在不同的语言层次之间跳跃,要更加经济可靠。

6. 我们可以把一种通用语言看成是纵跨若干层次的几个语言子集的统一体。这也就使得对语言的剪裁在客观上成为合理的行为,同时也是非常困难的过程。因为由几个语言子集组合而成,所以我们可能剪裁语言,以适应各层次的需要。而由于是统一体,这种剪裁难度很大。

 

 

————————————————
版权声明:本文为CSDN博主「myan」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/myan/article/details/1920

 

posted @ 2019-10-11 17:50  zzfx  阅读(577)  评论(0编辑  收藏  举报