• 解释性语言 ,编译型语言


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

    编译型语言 :

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

    非编译型语言 :

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

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

    虚拟机 : 

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

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

    总结 : 

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

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

    扩展 : 

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

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

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

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

  • 相关阅读:
    当spfile文件中的参数修改错误,导致数据库无法启动问题
    oracle的shared server模式和dedicated server模式
    概述oracle的内存结构
    oracle进程简介
    TNS12516及ORA12516错误解决
    如何打补丁及升级
    关于sqlplus的简单概述
    修改参数之后数据库无法启动问题
    oracle的后台进程杀掉会有什么影响
    远程连接oracle数据库ORA12154错误
  • 原文地址:https://www.cnblogs.com/pdy94/p/8428023.html
Copyright © 2020-2023  润新知