-
计算机架构
计算机的物理属性限制其只能执行二进制文件,无论多么复杂绚丽的程序、应用,在最底层,就是0、1。
计算机的物理底层,是半导体。
就是说,半导体只能以二进制进行计算。
可执行文件,是二进制机器语言的集合,可以被机器执行,得到想要的结果。比如
Windows
里的.exe
文件,即executable
。计算机能执行的指令,称为机器语言或机器码。不同计算机芯片厂商所设计的半导体电路不同,在芯片上编程的二进制规则不同,这套规则称为指令集(
instruction set architecture
,ISA
)。 -
C语言:编译型语言:要速度
正是基于不同厂商有不同的指令集,催生了C语言,建立了一个更为通用的编程范式。
通过编译器,将C语言编译成计算机能够识别的机器语言:
# plus.c 是一个C语言文件 gcc -o plus plus.c # 在Linux/Mac下将plus.c编译成plus可执行文件 # plus作为可执行文件,就是机器码。
上述代码中的
gcc
是一款开源的编译器。C/C++/Fortran
语言是一种编译型语言,编译型语言的源代码到可执行文件之间,包含编译(compile)、汇编(assembly)、**连接(link)**三个环节。编译+汇编,将
C源代码
转成机器码
;如果代码中使用了别处的代码(函数等),需要将别处的代码连接到当前的可执行文件中。编译、汇编、连接缺一不可,特别是
连接
的存在,导致不同文件编译的顺序要求严格,继发调试困难。又由于不同操作系统下,因为架构的不同,调用各种接口的代码也会不同,继而编译过程也不相同,应用软件也就有了不同操作系统下的不同版本。 -
Python:解释型语言:要方便
计算机科学任何领域的问题,都可以通过增加一个中间层来解决。
C语言等编译型语言调试困难,催生了解释型语言。Python、R、Matlab、Java、JavaScript…
解释型语言,一般使用C语言等偏底层的语言做一个虚拟机或解释器,先将
解释型语言
解释成编译型语言
,再继续编译型语言
到机器码
的环节,因此速度会慢。不同操作系统下,可以运行同样一份
.py
源代码,而却不能运行同样一份.c
文件。 -
左手要速度,右手要方便
既想要解释型语言的方便,又想要编译型语言的速度。
方案一:编译型语言写的模块
以
Python
的numpy
为例,numpy这个库
是用编译型语言编写的。当安装numpy
时,就是下载了C/C++
、Fortran
源代码(编译型语言),并再本地编译
(编译型语言–>机器码)成了可执行文件。可以用Cython
自己编写响应库。方案二:
JIT
(Just-In-Time
)即时编译技术JIT将需要加速的代码编译成了机器语言。
-
Reference
编译型语言与解释型语言如何在计算机底层运行
最新推荐文章于 2024-04-23 03:00:28 发布