tag 标签: 解释器

相关帖子
相关博文
  • 热度 4
    2023-7-13 23:23
    1425 次阅读|
    0 个评论
    1、编译器和解释器 1.1、编译器 编译器(compiler)对于我们并不陌生,它主要为程序设计语言提供服务,它将各种各样的程序设计语言(比如:C、C++、RUST、JAVA等)进行处理,翻译成我们底层的计算机能够理解并执行相应动作。 程序设计语言准确的定义是:向人和计算机描述其计算过程的记号。 简单来说,一个编译器就是一个程序,其主要用来阅读某一种高级编程语言写的程序,并将其翻译成机器所能理解的目标语言,进而机器用于执行相应的动作。 image-20230707144018800 1.2、解释器 解释器(interpreter)是另一种语言处理器,它与编译器的处理方式不同,它是通过对高级编程语言进行逐行解析来使机器理解并执行相应动作。 简单理解就是:边解析,边执行。 image-20230707144252398 1.3 编译器和解释器差别 编译器 将整个源代码转换为目标代码,然后在执行之前进行链接,生成可执行文件 (先翻译,再执行)。这种方式的好处是程序执行速度快,但是编译过程需要一次性完成,如果出现错误则需要重新编译整个程序。 解释器则是 逐行解释执行源代码 ,每执行一行代码都需要进行解析(边翻译,边执行)。这种方式的好处是可以在程序执行中逐步发现错误,程序员可以更快地进行测试和调试。但是,解释器运行速度相对慢一些。 总的来说,编译器适合编译大型程序,而解释器适合于小型程序或需要频繁更新的场景。
  • 热度 15
    2015-4-14 09:14
    1215 次阅读|
    1 个评论
    解释器是什么? 是执行解释型语言的程序。 很多语言都是解释型语言,比如 Java 和 Python ,因此解释器也有很多种。 执行 shell 语言的解释器: /bin/bash /bin/sh   解释器文件是什么? 可以被解释器执行的文件,比如 shell 脚本。 这是一个非常简单的 shell 解释器文件(俗称 shell 脚本): #!/bin/bash   echo "Shell start." 执行它: $ ./shell.sh Shell start.   再来一个普通的编译型文件 ( 俗称 .c 文件 ) : #include   int main(int argc, char *argv $ gcc test.c -o test $ ./test Test start.   那它们有什么区别呢? 当执行解释器文件的时候,并不是执行这个文件本身,而是执行 /bin/bash 。 当执行编译型文件的时候,就是执行文件本身。   内核调用 exec 处理的方式也是由区别的,下面两个 exec 调用的打印结果也是一样的: execlp("./test", "", (char *)0); execlp("./shell.sh", "", (char *)0); NOTE :执行 execlp 完毕后会跳出执行它的进程,所以这两个函数需要放置在不同的子进程中,或者写成: if ((pid = fork()) 0)         perror("Cannot fork child 1."); else if (pid == 0)         execlp("./test", "", (char *)0);   if ((pid = fork()) 0)         perror("Cannot fork child 2."); else if (pid == 0)         execlp("./shell.sh", "", (char *)0);   解释器文件不一定是调用 bash ,也可以使用任意程序,比如: #!/home/maria/maria_work/workon_fedora/programs/primer-unix/test 1 2 3   echo "Shell start." 如果 test 里面加入了打印参数列表的功能,那么它的输出结果会是这样: $ ./shell.sh a b c Test start. argv = /home/maria/maria_work/workon_fedora/programs/primer-unix/test argv = 1 2 3 argv = ./shell.sh argv = a argv = b argv = c   解释器文件的使用方法,比如它的参数列表排列、被 exec 调用时的特点等等,非常有意思。 It's very interesting!