1、什么是计算机语言

计算机就是一台用来计算机的机器,人让计算机干什么计算机就干什么。我们需要通过计算机的语言来控制计算机,所谓计算机的语言就是编程语言。

计算机语言其实和人类的语言没有本质的区别,不同点就是交流的主体不同。也就是说中文、英文是人和人之间的交流语言,而计算机语言(编程语言)是人和计算机交流的语言。

计算机语言发展经历了三个阶段:

(1)机器语言

  • 最早的一种计算机语言。
  • 机器语言通过二进制编码来编写程序,二进制编码就是1和0,计算机也只认识1和0。
  • 执行效率高,但编写起来太麻烦。

(2)汇编语言

  • 使用符号(如ABC和各种符号)来代替二进制编码。

    编写程序时,不需要使用二进制,而是直接编写符号。

    编写完成后,需要将符号转换为机器码,然后再由计算机执行。
  • 符号转换为机器码的过程称为汇编。
  • 将机器码转换为符号的过程,称为反汇编 。
  • 汇编语言一般只适用于某些硬件,和硬件的关系太紧密,兼容性比较差 。

    就好比不同硬件厂商识别符号的标准是不一样的。
  • 现在的一些硬件驱动还是会用到汇编语言进行编写。

(3)高级语言

  • 高级语言的语法基本和现在英语语法类似,并且和硬件的关系没有那么紧密了。

    也就是说通过高级语言开发程序可以在不同的硬件系统中运行。
  • 高级语言都会有自己的编译器,所编写的代码都会运行在自己的编译器上。

    不同系统上安装想对应的编译器,实现一份源码一次编译,到处运行。
  • 高级语言学习起来也更加的容易,现在我们知道的语言基本都是高级语言。如CC++C#JavaGolangPython等等。

2、高级语言中的编译型语言和解释型语言

计算机是不能理解高级语言的,更不能直接执行高级语言,它只能直接理解机器语言(二进制编码)。所以使用任何高级语言编写的程序,若想被计算机运行,都必须将其转换成计算机语言,也就是机器码,这个过程就叫编译。比如,一行Python的命令print('hello') ,必需要转换为类似1010101 这样的机器码 ,计算机才能够识别你的命令。

根据从源码转换二进制编码的时机不同,语言分成了两大类:编译型语言解释型语言

(1)编译型语言

对于编译型语言,开发完成以后需要将所有的源代码都转换成可执行程序,比如 Windows 下的.exe文件,可执行程序里面包含的就是机器码。只要我们拥有可执行程序,就可以随时运行,不用再重新编译了,也就是“一次编译,无限次运行”。

在运行的时候,我们只需要运行编译生成的可执行程序,不再需要源代码和编译器了,所以说编译型语言可以脱离开发环境运行。

编译型语言一般是不能跨平台的,也就是不能在不同的操作系统之间随意切换。

编译型语言使用的转换工具称为编译器。常见的编译型语言有CC++Golang等。

总结:

  • 编译一次后,脱离了编译器也可以运行,并且运行效率高。
  • 可移植性差,跨平台性比较差。

(2)解释型语言

对于解释型语言,每次执行程序都需要一边转换一边执行,用到哪些源代码就将哪些源代码转换成机器码,用不到的不进行任何处理。每次执行程序时可能使用的功能不同,这个时候需要转换的源代码也不一样。

因为每次执行程序都需要重新转换源代码,所以解释型语言的执行效率天生就低于编译型语言,甚至存在数量级的差距。计算机的一些底层功能,或者关键算法,一般都使用 C/C++ 实现,只有在应用层面(比如网站开发、批处理、小工具等)才会使用解释型语言。

在运行解释型语言的时候,我们始终都需要源代码和解释器,所以说它无法脱离开发环境或者运行环境 。

解释型语言使用的转换工具称为解释器。常见的解释型语言有PythonJavaScriptPHPShell等。

总结:

  • 每次执行代码都需要解释一次,执行速度比较慢。
  • 不能脱离解释器独立运行。
  • 跨平台性比较好。

(3)编译型语言和解释型语言执行流程

如下图所示:

3、知识扩展:

(1)扩展1

当我们说“下载一个程序(软件)”时,不同类型的语言有不同的含义:

  • 对于编译型语言,我们下载到的是可执行文件,源代码被作者保留,所以编译型语言的程序一般是闭源的。
  • 对于解释型语言,我们下载到的是所有的源代码,因为作者不给源代码就没法运行,所以解释型语言的程序一般是开源的。

(2)扩展2

编译器就是一个“翻译工具”,类似于将中文翻译成英文、将英文翻译成俄文。但是,翻译源代码是一个复杂的过程,大致包括词法分析、语法分析、语义分析、性能优化、生成可执行文件等五个步骤,期间涉及到复杂的算法和硬件架构。解释器与此类似,有兴趣的读者请参考《编译原理》一书,本文不再赘述。

(3)扩展3

JavaC#是一种比较奇葩的存在,它们是半编译半解释型的语言,源代码需要先转换成一种中间文件(字节码文件),然后再将中间文件拿到虚拟机(JVM)中执行。Java引领了这种风潮,它的初衷是在跨平台的同时兼顾执行效率。C# 是后来的跟随者,但是 C# 一直止步于 Windows 平台,在其它平台鲜有作为。

4、关于Python

Python 属于典型的解释型语言,所以运行 Python 程序只需要解释器的支持,只要你在不同的平台安装了不同的解释器,你的代码就可以随处运行,不用担心任何兼容性问题,真正的“一次编写,到处运行”。

Python 几乎支持所有常见的平台,比如 Linux、Windows、Mac OS 等,你所写的 Python代码无需修改,就能在这些平台上正确运行,Python 的可移植性是很强的。

参考:http://c.biancheng.net/view/4136.html

『无为则无心』Python基础 — 2、编译型语言和解释型语言的区别的更多相关文章

  1. 『无为则无心』Python基础 — 8、Python中的数据类型(数值、布尔、字符串)

    目录 1.数据类型介绍 2.数值型(Number) 3.布尔型(bool) 4.None(空值) 5.常量 6.字符串(String) 1.数据类型介绍 (1)什么是数据类型 在生活中,我们日常使用的 ...

  2. 『无为则无心』Python基础 — 14、Python流程控制语句(while循环语句)

    目录 1.什么是循环结构 2.while循环 (1)while循环的语法 (2)while循环的应用 3.while语句的死循环 4.break和continue 5.while循环嵌套 (1)应用场 ...

  3. 『无为则无心』Python基础 — 16、Python序列之字符串的下标和切片

    目录 1.序列的概念 2.字符串的下标说明 3.字符串的切片说明 1.序列的概念 序列sequence是Python中最基本的数据结构.指的是一块可存放多个值的连续内存空间,这些值按一定顺序排列,可通 ...

  4. 『无为则无心』Python基础 — 41、Python中文件的读写操作(一)

    目录 1.文件操作步骤 2.文件的读写操作 (1)文件的打开 (2)打开文件模式 (3)获取一个文件对象 (4)关于文件路径 1.文件操作步骤 当我们要读取或者写入文件时,我们需要打开文件,在操作完毕 ...

  5. 『无为则无心』Python基础 — 63、Python中的生成器

    目录 1.为什么要有生成器 2.创建生成器 (1)简单创建生成器 (2)生成器的使用 3.yield关键词 (1)yield关键词说明 (2)send()方法说明 4.使用yield实现斐波那契数列 ...

  6. 『无为则无心』Python基础 — 3、搭建Python开发环境

    目录 1.Python开发环境介绍 2.Python解释器的分类 3.下载Python解释器 4.安装Python解释器 5.Python解释器验证 1.Python开发环境介绍 所谓"工欲 ...

  7. 『无为则无心』Python基础 — 4、Python代码常用调试工具

    目录 1.Python的交互模式 2.IDLE工具使用说明 3.Sublime3工具的安装与配置 (1)Sublime3的安装 (2)Sublime3的配置 4.使用Sublime编写并调试Pytho ...

  8. 『无为则无心』Python基础 — 5、Python开发工具的安装与使用

    目录 1.Pycharm下载 2.Pycharm安装 3.PyCharm界面介绍 4.基本使用 (1)新建Python项目 (2)编写Python代码 (3)执行代码查看结果 (4)设置PyCharm ...

  9. 『无为则无心』Python基础 — 6、Python的注释

    目录 1.注释的作用 2.注释的分类 单行注释 多行注释 3.注释的注意事项 4.什么时候需要使用注释 5.总结 提示:完成了前面的准备工作,之后的文章开始介绍Python的基本语法了. Python ...

随机推荐

  1. Kafka Rebalance机制和选举策略总结

    自建博客地址:https://www.bytelife.net,欢迎访问! 本文为博客同步发表文章,为了更好的阅读体验,建议您移步至我的博客 本文作者: Jeffrey 本文链接: https://w ...

  2. android手势识别

    一.简单手势识别: 简单手势识别分为以下几个步骤: 1.手指触碰屏幕时,触发MotionEvent事件: 2.该事件被OnTouchListener监听,可在它的onTouch()方法中获得该Moti ...

  3. xml数据解析和生成

    java中xml的解析方式有许多,有java自带的DOM.SAX,android中的PULL,其它的还有DOM4J.JDOM等. 本文简要讲述DOM.SAX.PULL三种方式. 1.DOM方法 缺点: ...

  4. thinkphp 中区块block和模板继承extend用法举例

    1.介绍 模板继承其实并不难理解,就好比类的继承一样,模板也可以定义一个基础模板(或者是布局),并且其中定义相关的区块(block),然后继承(extend)该基础模板的子模板中就可以对基础模板中定义 ...

  5. 手写一个最简单的IOC容器,从而了解spring的核心原理

    从事开发工作多年,spring源码没有特意去看过.但是相关技术原理倒是背了不少,毕竟面试的那关还是得过啊! 正所谓面试造火箭,工作拧螺丝.下面实现一个最简单的ioc容器,供大家参考. 1.最终结果 2 ...

  6. Spring 实现策略模式--自定义注解方式解耦if...else

    策略模式 定义 定义一簇算法类,将每个算法分别封装起来,让他们可以互相替换,策略模式可以使算法的变化独立于使用它们的客户端 场景 使用策略模式,可以避免冗长的if-else 或 switch分支判断 ...

  7. ruby基础(二)

    ruby语法基础 1.方法 方法时对象定义的与该对象相关的操作.在Ruby中,对象的所有的操作都被封装成 方法. 语法糖:语法糖是一种为了照顾一般人的习惯而产生的特殊语法. ruby中一切数据都是对象 ...

  8. Git-【技术干货】工作中Git的使用实践

    Git-[技术干货]工作中Git的使用实践 置顶 2019-09-17 21:02:16 web洋仔 阅读数 11444更多 分类专栏: Git   版权声明:本文为博主原创文章,遵循CC 4.0 B ...

  9. Cron 任务入门指南

    Cron 是您可以在任何类 Unix 操作系统中找到的最有用的实用程序之一.它用于安排命令在特定时间执行.这些预定的命令或任务被称为 "Cron 任务".Cron 通常用于运行计划 ...

  10. ZooKeeper IDEA 可视化管理插件安装

    1. 安装 zookeeper 插件 打开 IDEA->Settings->Plugins,然后在 Marketplace 输入 "zookeeper" 如下: 插件安 ...