一 基础知识铺垫
机器指令就是'0、1'组成的,可被某种类型的'CPU识别并执行'
二 编译型和解型语言
2.1 语言分类
2.1.1 高级语言
高级语言:按程序的'执行方式'可以分为'编译'型和'解释'型两种
2.1.2 硬件描述语言
IC设计:Integrated Circuit Design,或称为'集成电路设计'
IC设计中'常用的脚本'有Tcl、Perl、Shell、Python
2.2 编译型
1) 编译型语言是指使用'专门的编译器',针对'特定平台'(操作系统)将某种'高级语言源代码'一次性'翻译'成可被该'平台硬件执行的机器码'(包括机器指令和操作数)
2) 并包装成'该平台所能识别'的'可执行程序'的格式,这个转换过程称为'编译'(Compile)
备注:编译生成的可执行程序可以'脱离开发环境',在'特定的平台上'独立运行.
3) 有些程序'编译结束'后.还可能需要对其他编译好的目标代码'进行链接',即组装两个以上的目标代码模块生成'最终'的可执行程序,通过这种方式实现'低层次的代码复用'.
++++++++++++++++++"编译型语言特点"++++++++++++++++++
因为编译型语言是'一次性'编译成机器码的,所以可以脱离开发环境'独立运行',而且通常'运行效率较高'.
但因为编译型语言的程序被'编译'成'特定平台上'的机器码,因此编译生成的可执行程序通常'无法移植'到其他平台上运行
备注:如果需'要移植',则必须将'源代码复制到特定平台上',针对特定平台进行修改,至少需要采用特定平台上的编译器"重新编译".
现有的 'C' 、'C++'、'Golang' 等高级语言都属于'编译型'语言.
2.2.1 C语言
目的:用一段 'C 语言代码'来看看,我们平时编写的代码是'如何变成'计算机指令的
+++++++++++"过程演示"+++++++++++
2.3 解释型
1) 解释型语言是指使用'专门的解释器'对'源程序逐行解释'成'特定平台'的'机器码'并立即'执行'的语言.
2) 解释型语言通常'不会'进行整体性的编译和链接处理,解释型语言相当于把编译型语言中的'编译和解释过程混合'到一起同时完成.
备注:每个'特定平台上的解释器'都负责将'源程序'解释成'特定平台的机器指令'
补充:解释型语言以'牺牲'程序执行效率为'代价',方便'源程序'的移植
2.3.1 Java语言
JVM中集成了'两种'编译器,Client Compiler和Server Compiler
在'Hotspot VM'中,'默认'的Server Compiler是C2编译器
从JDK 9开始,Hotspot VM中集成了一种'新的'Server Compiler,Graal编译器
'前端'编译: javac将'.java的源文件'转化为'.class'的bytecode'中间字节码文件'
'后端'编译: JVM虚拟机在'运行时'把字节码'转化为'机器码 -->然后让'CPU'去执行'机器码'
说明:'IDEA'之类的工具将'者两部分'整合到一块.
具体:Jva是'先编译'、'后解释'的语言
JVM'向上'提供透明,向下'屏蔽'操作系统之间的'差异'
Java语言'看似'是编译型的,因为Java程序代码的确是需要'经过编译'的;不经过编译,'.java文件'运行不了
Java语言'又看似'是解释型的,因为Java程序要在'JVM上解释'运行
Java首先是通过编译器编译成字节码文件,然后在'运行时'通过解释器给解释成机器文件
2.3.2 Python语言
++++++++++++++'(1)问题引入'++++++++++++++
++++++++++++++'(2)python的运行过程'++++++++++++++
其实Python和Java一样,也是一门'基于虚拟机'的语言
重点理解:PyCodeObject和'pyc文件'
P'ython'VM'类似'JVM
++++++++++++++'(3)什么是pyc和pyo文件'++++++++++++++
++++++++++++++'(3)pyc文件出现的时机'++++++++++++++
1) 由于编译成'pyc文件'的应该是那些可以'重用的模块'
2) 只有'import进来的模块',才是需要'被重用'的模块,才会被'主动持久化'成pyc文件.
备注:下面提供了'三种方式'的场景
py_compile 模块主动为单个py文件编译为pyc文件
compileall模块为目录下多个py文件编译为pyc文件
++++++++++++++'(4)pyc文件过期时间'++++++++++++++
2.3.3 shell语言
2.4 编译型和解释型语言关联
三 其它
动态类型语言和静态类型语言
强类型语言和弱类型语言