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对应的编译型语言和解释性语言区别详解的更多相关文章

  1. “全栈2019”Java异常第十章:throw与throws区别详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...

  2. python正则表达式函数match()和search()的区别详解

    match()和search()都是python中的正则匹配函数,那这两个函数有何区别呢? match()函数只检测RE是不是在string的开始位置匹配, search()会扫描整个string查找 ...

  3. Java中Object.equals和String.equals的区别详解

    前言 Java中的堆和常量池的区别是什么呢?Object.equals与String.equals的区别呢?下面让我们通过一个小示例让你明白它- 1.基础知识 Java的存储空间:寄存器.栈.堆.静态 ...

  4. Swift和OC,是编译型语言、解释性语言、运行时语言

    首先需要明确的一点是,什么是编译型语言和解释性语言 编译型语言,就是在其执行过程中需要先将其经过编译成机器码来给计算机识别的,其执行效率就会比较高这个是显而易见的,常见比如:C.C++ 而解释型语言, ...

  5. 基于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 ...

  6. 利用 Java 操作 Jenkins API 实现对 Jenkins 的控制详解

    本文转载自利用 Java 操作 Jenkins API 实现对 Jenkins 的控制详解 导语 由于最近工作需要利用 Jenkins 远程 API 操作 Jenkins 来完成一些列操作,就抽空研究 ...

  7. 基于Java的打包jar、war、ear包的作用与区别详解

      本篇文章,小编为大家介绍,基于Java的打包jar.war.ear包的作用与区别详解.需要的朋友参考下   以最终客户的角度来看,JAR文件就是一种封装,他们不需要知道jar文件中有多少个.cla ...

  8. Java和Ibatis调用存储过程并取得返回值详解

    Java和Ibatis调用存储过程并取得返回值详解 2011-07-19 17:33 jiandanfeng2 CSDN博客 字号:T | T 本文主要介绍了Java和Ibatis调用存储过程的方法, ...

  9. [转]JAVA环境变量JAVA_HOME、CLASSPATH、PATH设置详解

    [转] JAVA环境变量JAVA_HOME.CLASSPATH.PATH设置详解 - dreamman的日志 - 网易博客http://blog.163.com/dreamman_yx/blog/st ...

随机推荐

  1. 前端框架之Vue.js

    前言: 前端主流框架有Vue.react.angular,目前比较火因为Vue比较容易学习,运营起来比较快速: Vue是什么呢? 是一个基于MVVM架构的,前端框架: 如果你之前已经习惯了用jQuer ...

  2. ActiveMQ的spring配置文件

    从官网copy出来,做了部分修改: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=& ...

  3. Qt中QSlider的样式表设置

    转自: https://blog.csdn.net/tax10240809163com/article/details/50899023 //首先是设置主体QSlider{border-color: ...

  4. office install problems

    regedit 0000 "00005"或"00002"开头的项 remove all regedit options

  5. std::string find 的返回值

    std::string  的方法 find,返回值类型是std::string::size_type, 对应的是查找对象在字符串中的位置(从0开始), 如果未查找到,该返回值是一个很大的数据(4294 ...

  6. react router @4 和 vue路由 详解(全)

    react router @4 和 vue路由 本文大纲: 1.vue路由基础和使用 2.react-router @4用法 3.什么是包容性路由?什么是排他性路由? 4.react路由有两个重要的属 ...

  7. day9-复习学习python实例

    学习实例代码 #求1到100的和print ("##################1到100求和#################")def sum(a,b): s = 0 fo ...

  8. linux:centOs7没有eth0网卡

    1.修改ifcfg-ens33为ifcfg-eth0 cd /etc/sysconfig/network-scripts/ su root                 #进入root模式,需要输入 ...

  9. 异步IO(协程,消息循环队列)

    同步是CPU自己主动查看IO操作是否完成,异步是IO操作完成后发出信号通知CPU(CPU是被通知的) 阻塞与非阻塞的区别在于发起IO操作之后,CPU是等待IO操作完成再进行下一步操作,还是不等待去做其 ...

  10. Xilinx 7 series FPGA multiboot技术的使用(转)

    reference:https://www.cnblogs.com/chensimin1990/p/9067629.html 当升级程序有错误的时候,系统会启动golden bitstream 注意: ...