区分编译型语言,解释型语言是否还有意义?
来源:互联网 发布:php常用数组函数 编辑:程序博客网 时间:2024/06/02 06:28
没有意义。编程语言从来没有编译型和解释型之分,只能说一门编程语言的常见执行方式为编译器编译成新代码(交给解释器或者机器码执行),或者解释器解释执行。
- 什么是编译器?
- 什么解释器?
- 总结
什么是编译器?
编译器,简单的说,就是一个程序,它的输入是一种A语言的源代码,输出是一种B语言的源代码,比如C++编译器,将C++源代码编译成为汇编代码。一般来说,A语言和B语言是不同的(但也有相同的情况,一般用于代码优化或者代码混淆)。
编译过程中,并没有要求编译器表现出任何关于源代码定义的行为,它是生成了一个能表现输入源代码行为的新的代码。
什么解释器?
解析器,其实就是一个程序,它的输入是一种语言的源代码,但是它直接执行了源代码(意思是这个程序对外表现了这个源代码定义的行为)
解释器内部的实现一般是一个编译器外加一个虚拟机。
编译器用来将输入的源代码生成中间代码,而虚拟机将中间代码一条条执行(这个执行一般指的是使用C写的执行引擎程序来执行)
一个虚拟机一般是由定义了的中间代码语法,以及一个执行引擎组成,比如JVM和Java字节码。之所以不采用真实的物理机,一是因为物理机的指令集多,各种新架构新增的指令直接写太困难,可移植苦难。俗话说的好计算机领域只要多分几层,没有解决不了的问题。对于一门动态语言(如Java),直接做一个编译器将这门语言和汇编链接到一起,难度太大(尤其是词法分析上),这个时候可以采取间接的定义一套中间码,将源代码编译成为中间码,中间码通过另一个程序(执行引擎,一般是C/C++写的)执行这个中间码,这样效率不会损失太多但大大加快了开发效率。
总结
其实所谓编译型和解释型递归到最后,都是编译型,因为你无论如何都是把代码转换为二进制机器码,而最后的执行,其实就是一个二进制数的第几位所对应ALU的第几号地址引脚的电平高低的变化而已。
本文转载自知乎,有删减1.
- 作者:DreamPiggy
链接:https://www.zhihu.com/question/31695794/answer/53797548
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 ↩
- 区分编译型语言,解释型语言是否还有意义?
- 简单区分:弱类型语言/强类型语言,动态语言/静态语言,解释型语言/编译型语言
- 解释型 编译型 语言
- 编译型语言&&解释型语言
- 编译型语言和解释型语言
- 编译型语言与解释型语言
- 编译型语言和解释型语言
- 编译型语言和解释型语言
- 大话解释型语言、编译型语言
- 编译型语言和解释型语言
- 编译型语言和解释型语言
- 编译型语言VS解释型语言
- 编译型语言VS解释型语言
- 编译型语言vs解释型语言
- 编译型语言、解释型语言
- 编译型语言与解释型语言
- 编译型语言和解释型语言
- 解释型语言与编译型语言
- Android仿今日头条和知乎等App顶部滑动导航实现代码分析及源码下载
- java 画图 graphics
- Java进阶(六)从ConcurrentHashMap的演进看Java多线程核心技术
- ARouter 依赖注入实现原理(源码解析)
- Selenium与phantomjs安装与环境配置,以及易班网站模拟登陆操作
- 区分编译型语言,解释型语言是否还有意义?
- C++和Lua交互教程(基于LuaBridge)
- 39、C#项目开发注意
- 在同一台服务器上配置多个Tomcat的方法
- spring boot 1.5.7 搭建基础项目框架一
- 跟大师学习系统编程---操作系统加载(1)
- [容斥] Topcoder SRM div1-3 12004. SetAndSet
- 实现右键屏蔽菜单的代码
- 二进制、八进制、十进制、十六进制