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 ...
随机推荐
- Qt Widgets——主窗口及其主要组成部分
Main Window and Related Classes QAction 动作类,用于当做一个菜单项或工具项插入菜单或工具栏 QActionGroup 动作组,用于管理多个动作,设置它们之间的互 ...
- Http Header Content-Typ
Http Header里的Content-Type一般有这三种:application/x-www-form-urlencoded:数据被编码为名称/值对.这是标准的编码格式.multipart/fo ...
- --save-dev 与 --save区别
npm install 在安装 npm 包时,有两种命令参数可以把它们的信息写入 package.json 文件,一个是npm install --save另一个是 npm install --sav ...
- nop 4.1 Widget 探究- 视图组件
1. 系统默认自带了一个NivoSlider 的Wdget. 在Nop.Web项目首页的HomePageTop里 这个写法是 ASP.NET Core MVC 中的新特性 视图组件,与局部视图相似,但 ...
- VMware 安装 centos,自定义分区
具体查看:https://jingyan.baidu.com/album/6525d4b1799149ac7d2e9483.html?picindex=11
- Oracle.PL/SQL高级
一.匿名块 .使用returning ... INTO 保存增删改表数据时的一些列的值 ()增加数据时保存数据 DECLARE v_ename emp.ename%TYPE; v_sal emp.sa ...
- python文件管理
文件没有修改操作,修改的方式为打开文件--读取文件--内存中编辑文件--将内容写入文件 打开文件方式 with open('a.txt','w') as f: #操作系统自动关闭文件 f.write( ...
- .net core Asp.net Mvc Ef 网站搭建 vs2017 1)
1)开发环境搭建 首先下载安装vs2017 地址 :https://www.visualstudio.com/zh-hans/downloads/ 安装勾选几项如下图 ,注意点在单个组件时.net ...
- 一些做vue前端的经验
1.先赋值,后渲染 场景:表格渲染中,一般都是这样把json的东西传给table的 this.tableData = json.data.rows 然后的话我们一般会在渲染前对json中的数据做一些转 ...
- 经典DFS问题实践
八皇后问题: //八皇后问题 经典的DFS问题实践 #include<iostream> #include<cmath> #include<algorithm> # ...