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. 八、持久层框架(MyBatis)

    一.基于MyBatis的CRUD 1.首先是配置文件Category.xml修改 一次性修改配置文件Category.xml,提供CRUD对应的sql语句. <?xml version=&quo ...

  2. Mysql for Linux安装配置之—— 源码安装

    1.安装 --假设已经有mysql-5.5.10.tar.gz以及cmake-2.8.4.tar.gz两个源码压缩文件1)先安装cmake(mysql5.5以后是通过cmake来编译的)   # ta ...

  3. [LeetCode] 231. Power of Two ☆(是否2 的幂)

    描述 Given an integer, write a function to determine if it is a power of two. 给定一个整数,编写一个函数来判断它是否是 2 的 ...

  4. time_wait 和 close_wait

    tcp 四次握手状态图: 使用以下命令统计 tcp 连接信息: netstat -n |awk '/^tcp/ {++S[$NF]} END {for (a in S) print a, S[a]}' ...

  5. Qt 之 去除窗口部件被选中后的焦点虚线框

    转自: https://blog.csdn.net/goforwardtostep/article/details/53420529 https://blog.csdn.net/caoshangpa/ ...

  6. 把旧系统迁移到.Net Core 2.0 日记(5) Razor/HtmlHelper/资源文件

    net core 的layout.cshtml文件有变化, 区分开发环境和非开发环境. 开发环境用的是非压缩的js和css, 正式环境用压缩的js和css <environment includ ...

  7. cin.get()函数使用例子

    #include <iostream>using namespace std; int k = 0; int main(){ char a[1000]; char c; do { cin. ...

  8. mySQL 分组查询,根据分组的字段,取最小值

    今天看到别人问的问题,给别人写了一条sql! CREATE TEMPORARY TABLE tmp_table ( id INTEGER not NULL, uname VARCHAR(10) NOT ...

  9. PHP多进程处理并行处理任务实例

    本文目的 本文通过例子讲解linux环境下,使用php进行并发任务处理,以及如何通过pipe用于进程间的数据同步.写得比较简单,作为备忘录. PHP多进程 通过pcntl_XXX系列函数使用多进程功能 ...

  10. jdk8-stream的api

    1.stream流的概念 1.流的创建 //1. 创建 Stream @Test public void test1(){ //1. Collection 提供了两个方法 stream() 与 par ...