编译型程序和解释型程序的区别
我们站在OS操作系统的角度更加深入的理解编译型程序和解释型程序的区别。
解释型语言
解释型语言,也称为脚本语言。例如JavaScript ,Python,Monkey脚本等。
从本质上来看,它们本身是文本文件,是某个应用程序的输入,这个应用程序是脚本解释器。
脚本语言中的代码从来没真正上过 CPU 去执行, CPU 的 cs: ip 寄存器从来没指向过它们。在 CPU 眼里只看得到脚本解释器(即用来解释脚本的语言),而这些脚本中的代码, CPU 从来就不知道有它们的存在。
例如:下面这个PHP程序。
<?php
echo "abcd";
?>
PHP解释器在分析这个文本文件时,发现里面的 echo 关键字,将其后面的参数获取后就调用 C 语言中提供的输出函数,如 printf ( echo 的参数)。就是类似这样的思想。
我们在执行一个 PHP 脚本时,其实就是启动一个 C 语言编写出来的解释器而己,这个解释器就是一个进程,和一般的进程是没有区别的,只是这个进程的输入则是这个 php 脚本文件而已。
编译型语言
编译型语言编译出来的程序,运行时本身就是一个进程。
它是由操作系统直接调用的。也就是由OS操作系统加载到内存后,操作系统将 CS: IP 寄存器指向这个程序的入口,使它直接上 CPU 运行。
参考资料
- 《操作系统真象还原》