c++、Java、python对应的编译型语言和解释性语言区别详解
1.首先明确一点:
高级语言是不能直接在CPU上运行的。CPU只能处理机器语言,就是黑客帝国里面那个10101010101110的数字流。
那么为了让机器语言能够在CPU上运行,那么就必须将其变成机器语言,那么怎么将高级语言变成机器语言呢?
无非是通过两种方式:编译或者解释。
2.那么编译型和解释型语言有那些呢?
编译型(代表):C(万恶之源)/C++(加了OOP的万恶之源)
解释性(代表):Java(世界上最好的语言)、Python、C#。
3.编译型和解释型语言的区别:
3.1编译器和解释器的不同:
首先来看一下编译器的工作原理

在来看看解释器的原理:

在这里可以看出编译型语言是为了将高级语言编写的语言转化为语义相同的机器语言(强调的是高级语言和转化后的机器语言之间的等效),然后使得CPU可以执行你写的程序。
而解释型语言是根据需要一条一条的分析和执行源代码的程序。编译只需要编译一次可以生成可执行文件比如.exe等,而且这个可执行文件已经独立出来,下一次使用时不需要源代码,不需要编译器。
但是解释型语言,每一次都需要源代码,需要解释器。
3.2编译型和解释型的优缺点
1.速度:编译型完胜解释型。C/C++的速度超过Java和Python以及C#。
2.开放度:编译型完胜解释型。C/C++对计算机底层的操控程度远远高于Java和其他的解释型语言。例子:C/C++可以使用关键字register来操控寄存器,但是Java中对寄存器的使用完全取决于JVM程序员无法实际操控。
3.安全性:解释型完胜编译型。高度的开放度给C/C++带来了极度不安全性,他们可以访问你任意内存,那是十分危险的。
4.消耗的资源:编译型完胜解释型。
5.移植性:由于不同的操作系统的识别二进制文件是不同的所以当你移植到别的操作系统时就需要重新编译。所以解释型语言在移植性上优于编译型。
6.友好性,简单性:C++对于一个编程小白来说是十分不友好的。但是Python和Java就比较容易上手。
4.编译型的代表C++和解释型的代表Java的详解
4.1C++的编译:
首先:把源文件中的源代码翻译成机器语言,保存到目标文件中。如果编译通过,就会把CPP转换成OBJ文件。
作用:编译是读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再转换为机器代码,生成目标文件(.obj)
过程;
1) 预编译
2) 编译
3) 汇编
4) 链接
4.2Java的编译
首先Java是有一个编译的过程的,首先他将Java的源代码编译成了字节码,但是这个字节不是计算机语言,他不能直接在CPU上运行,字节码文件的后缀名为.class。
然后字节码文件通过JVM编译成了机器码,可以在计算机中运行,当然不同的操作系统的JVM是不同的,那么他生成的机器码也是不同的。
c++、Java、python对应的编译型语言和解释性语言区别详解的更多相关文章
- “全栈2019”Java异常第十章:throw与throws区别详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...
- python正则表达式函数match()和search()的区别详解
match()和search()都是python中的正则匹配函数,那这两个函数有何区别呢? match()函数只检测RE是不是在string的开始位置匹配, search()会扫描整个string查找 ...
- Java中Object.equals和String.equals的区别详解
前言 Java中的堆和常量池的区别是什么呢?Object.equals与String.equals的区别呢?下面让我们通过一个小示例让你明白它- 1.基础知识 Java的存储空间:寄存器.栈.堆.静态 ...
- Swift和OC,是编译型语言、解释性语言、运行时语言
首先需要明确的一点是,什么是编译型语言和解释性语言 编译型语言,就是在其执行过程中需要先将其经过编译成机器码来给计算机识别的,其执行效率就会比较高这个是显而易见的,常见比如:C.C++ 而解释型语言, ...
- 基于python中staticmethod和classmethod的区别(详解)
例子 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 class A(object): def foo(self,x): print "executing foo ...
- 利用 Java 操作 Jenkins API 实现对 Jenkins 的控制详解
本文转载自利用 Java 操作 Jenkins API 实现对 Jenkins 的控制详解 导语 由于最近工作需要利用 Jenkins 远程 API 操作 Jenkins 来完成一些列操作,就抽空研究 ...
- 基于Java的打包jar、war、ear包的作用与区别详解
本篇文章,小编为大家介绍,基于Java的打包jar.war.ear包的作用与区别详解.需要的朋友参考下 以最终客户的角度来看,JAR文件就是一种封装,他们不需要知道jar文件中有多少个.cla ...
- Java和Ibatis调用存储过程并取得返回值详解
Java和Ibatis调用存储过程并取得返回值详解 2011-07-19 17:33 jiandanfeng2 CSDN博客 字号:T | T 本文主要介绍了Java和Ibatis调用存储过程的方法, ...
- [转]JAVA环境变量JAVA_HOME、CLASSPATH、PATH设置详解
[转] JAVA环境变量JAVA_HOME.CLASSPATH.PATH设置详解 - dreamman的日志 - 网易博客http://blog.163.com/dreamman_yx/blog/st ...
随机推荐
- 二十四、JAVA的NIO和IO的区别
一.JAVA的NIO和IO 1.NIO:面向缓冲区(buffer)(分为非阻塞模式IO和阻塞模式IO)组成部分:Channels管道,Buffers缓冲区,Selectors选择器 2.IO:面向流( ...
- Hadoop格式化 From hu-hadoop1/192.168.11.11 to hu-hadoop2:8485 failed on connection exception: java.net.
192.168.11.12:8485: Call From hu-hadoop1/192.168.11.11 to hu-hadoop2:8485 failed on connection excep ...
- oracle in 函数
IN操作符 select * from scott.emp where empno=7369 or empno=7566 or empno=7788 or empno=9999: ...
- Mysql for Linux安装配置之——二进制安装
1.准备及安装1)查看OS版本 # cat /etc/redhat-release 2)创建mysql组及用户 # groupadd mysql # cat /etc/group|grep m ...
- SQL SERVER版本补丁体系及升级
首先了解几个定义: RTM : 表示 Release to Manufacturing ,这是产品的原始发布版本,当从光盘或 MSDN 下载的默认版本.不过现在下载 SQL Server 版本时,也有 ...
- redisObject
typedef struct redisObject { unsigned type:4; unsigned encoding:4; unsigned lru:REDIS_LRU_B ...
- 把旧系统迁移到.Net Core 2.0 日记 (16) --Cors跨域访问
IE浏览器的Intranet局域网设置默认是可以跨域访问的.chrome就不可以. 这里说的跨域是指javascript代码不能跨域, 当然你在后端controller代码里用HttpClient.G ...
- Linux下使用date命令查看和修改时间
1.查看系统时区和时间,执行命令date -R “-0500”代表西五区(America/New_York),北京的时区为“+0800”(东八区). 2.查看硬件时间,执行命令hwclock --sh ...
- 巧用call,appl有 根据对象某一属性求最大值
查找对象数组中某属性的最大最小值的快捷方法 例如要查找array数组中对象的value属性的最大值 var array=[ { "index_id": 119, "are ...
- js--阻止冒泡,捕获,默认行为
防止冒泡和捕获 w3c的方法是e.stopPropagation(),IE则是使用e.cancelBubble = true· var el = window.document.getElementB ...