编译型语言与解释型语言如何在计算机底层运行

  • 计算机架构

    在这里插入图片描述

    ​ 计算机的物理属性限制其只能执行二进制文件,无论多么复杂绚丽的程序、应用,在最底层,就是0、1。

    计算机的物理底层,是半导体。

    就是说,半导体只能以二进制进行计算。

    可执行文件,是二进制机器语言的集合,可以被机器执行,得到想要的结果。比如Windows里的.exe文件,即executable

    计算机能执行的指令,称为机器语言机器码。不同计算机芯片厂商所设计的半导体电路不同,在芯片上编程的二进制规则不同,这套规则称为指令集instruction set architectureISA)。

  • 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文件。

  • 左手要速度,右手要方便

    既想要解释型语言的方便,又想要编译型语言的速度。

    方案一:编译型语言写的模块

    Pythonnumpy为例,numpy这个库是用编译型语言编写的。当安装numpy时,就是下载了C/C++Fortran源代码(编译型语言),并再本地编译编译型语言–>机器码)成了可执行文件。可以用Cython自己编写响应库。

    方案二:JIT(Just-In-Time)即时编译技术

    JIT将需要加速的代码编译成了机器语言。

  • Reference

  1. 计算机基础系列:源代码如何被计算机执行
  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值