ad

《自己动手写 Python 虚拟机》_更理解虚拟机的意义_1.1 编程语言的发展

网友投稿 131 2023-11-07

【摘要】 本书摘自《自己动手写 Python 虚拟机》一书中第1章,第1节,海纳编著。

1.1 编程语言的发展

计算机技术发展至今,已经有很多编程语言了,这些语言的工作原理各不相同。 根据它们与硬件平台的远近关系,可以把编程语言粗略地划分为以汇编语言为代表 的底层语言和以C++ 、Java 为代表的高级语言。

汇编语言的特点:直接与硬件平台提供的寄存器、内存和IO 端口打交道,功能 十分强大。早期操作系统镜像的加载和初始化经常使用汇编来实现;语言助记符(例 如 mov 、add)几乎与CPU 指令一一对应,使用汇编语言几乎可以不考虑编译器的影 响,这就让编程人员对代码有绝对的控制权。但是汇编语言表达能力不强,开发效 率低。

为了提高应用程序的开发效率,人们发明了高级语言。C 语言是非常重要的一 种语言,保留了内嵌汇编,并且可以通过链接器将汇编语言开发的模块与C 语言开 发的模块链接在一起;同时C 语言的指针也保留了汇编语言中内存操作的逻辑。它 是一门承上启下的语言,大多数操作系统都是用C 语言开发的,说C 语言是计算机 行业的基石也不过分。

《自己动手写 Python 虚拟机》_更理解虚拟机的意义_1.1 编程语言的发展

随着应用软件的规模越来越大,面向对象的编程思想开始流行,面向对象的语言 也应运而生,典型的代表就是C++ 。 面向对象的编程方式可以让开发者以模块化、 对象化的思想进行设计和开发,大大提高了编程语言的抽象能力。到目前为止,面向 对象的编程方式仍然是当今世界的主流编程方法。

然而使用C++ 的时候,编程人员要十分小心地使用内存,因为稍不注意就容易引起内存泄漏,例如以下代码:

1 void foo(){

2 Data *data =new Data();

3 //..

4 //many other codes

5 if(some_condition())

6 return;

7

8 //..

9 //many other codes

10 delete data;

11 return;

12

在 some_condition条件满足的情况下,函数foo方法就直接返回了,漏掉了 delete 语句。这一块内存没有被释放,但却没有任何变量引用它。也就是说,应用程序再也无 法正常访问这块内存了,这就是内存泄漏。如果函数体比较小,逻辑相对简单,程序员 一般不会犯这种错误,但如果逻辑比较复杂,尤其是多人多版本维护同一份代码的情况 下,自己添加的 return 逻辑将别人添加的 delete 跳过去的情况就非常常见。

还有一个痛点是跨平台。当前主流的体系结构包括 x86 和 arm, 操作系统包括 Windows,Linux,Android 等,跨平台是指同一份代码可以在多种不同的体系结构和 操作系统上正确执行。C/C++ 这类语言是静态编译的,它们编译完成后就是直接可 执行的程序(例如Windows 系统上的 exe 文件),可执行程序中的代码段里的内容是 与平台直接相关的,在 x86 系统上,就会产生x86 的机器指令,在 arm 平台上,就会 产生 arm 的机器指令。另外,还要考虑编译器和操作系统以及运行时库的影响。同 样的 C++ 代码,不同版本的编译器和操作系统会产生不同的代码,同时应用程序所 依赖的动态链接库也会有不兼容的情况。静态编译为应用程序的分发和部署带来了 困难。

为解决这些问题,编程语言虚拟机应运而生。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:跟着一起学《Excel VBA跟卢子一起学 早做完 不加班 基础入门版》_2.5.7 Const 的公有和私有设置
下一篇:《Python学习笔记 从入门到实战》_更了解Python的途径之一_7.5.2 类属性和实例属性
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

×