zoukankan      html  css  js  c++  java
  • 解释性语言 ,编译型语言

    传统意义上的所谓编译与解释 , 区别在于代码是在什么时候被翻译成目标CPU指令.

    编译型语言 :

    对C语言或其他编译型语言来说 , 编译生成了目标文件 , 而这个目标文件是针对特定CPU体系的 , 为ARM生成的目标文件 , 不能被用于MIPS的CPU . 这段代码在编译过程中就已经被翻译成了目标CPU指令 , 所以 , 如果这个程序要在另外一种CPU上面运行 , 这个代码就必须重新编译.

    非编译型语言 :

    对于各种非编译型语言 ( Python/Java ) 来说 , 同样也可能存在某种编译过程 , 但他们编译生成的通常是一种平台无关的中间代码 .例如java 的 class文件 . 这种代码一般不是针对特定的CPU平台 , 他们是运行过程中才被翻译成目标CPU指令的 , 因而能跨平台 .

    源代码直接翻译成机器语言 , 执行效率高 , 依赖编译器 , 跨平台差 .

    虚拟机 : 

    至于为什么会有虚拟机的存在? 就是因为那些非编译型语言生成的并不是目标平台的代码 , 而是中间代码 . 而能够运行这种中间代码的机器并不广泛存在, 所以我们在每个不同的平台中用软件模拟出这个假想平台的虚拟机 , 这个虚拟机执行这种中间代码 , 负责把中间代码转换成最终目标平台上的指令

    源代码先翻译成中间代码 , 再由解释器解释运行 . 执行效率低, 依赖解释器 , 跨平台性好 

    总结 : 

    1. 编译型语言在编译过程中生成目标平台指令 , 解释型语言在运行过程中才生成目标平台的指令

    2. 虚拟机的任务是在运行过程中将中间代码翻译成目标平台的指令

    扩展 : 

    程序语言 & 操作系统 & 编译器 

    程序语言需要在编译器里面进行编译 , 但是编译器需要运行在操作系统里 .

    编译器就是将一种语言( 高级语言 ) 翻译为另一种语言 ( 通常为低级语言 ) 的程序 

    现代编译器的主要工作流程 : 源代码 -> 预处理器 -> 编译器 -> 目标代码 -> 链接器 -> 可执行程序 

  • 相关阅读:
    用Socket实现客户端和服务器端通信(完整版)
    wince开发 Beep 声音
    客户端与服务器端Socket的区别与联系?
    有关SQL语句写法注意的那些事情(原创整理)
    mysql cluster复制出现LOST_EVENTS的解决办法
    zenoss的安装
    windows作为lvs客户端
    SQLYog快捷键大全
    Mysql Cluster居于时间点的恢复
    Linux下时间戳格式和标准时间格式的转换
  • 原文地址:https://www.cnblogs.com/pdy94/p/8428023.html
Copyright © 2011-2022 走看看