脚本语言与编译型语言

简介: 不同编译型语言:编译型程序所生成的指令时二进制形式的机器码和操作数, 就是所谓的二进制流, 二进制程序是CPU可以直接识别执行的解释性语言:脚本语言的解释器是二进制形式的, 可以被CPU直接识别的, 但是脚本解释器的输入是脚本语言字符串, CPU执行脚本语言解释器, 而脚本语言解释...

不同

  • 编译型语言:
    • 编译型程序所生成的指令时二进制形式的机器码和操作数, 就是所谓的二进制流, 二进制程序是CPU可以直接识别执行的
  • 解释性语言:
    • 脚本语言的解释器是二进制形式的, 可以被CPU直接识别的, 但是脚本解释器的输入是脚本语言字符串, CPU执行脚本语言解释器, 而脚本语言解释器去执行脚本语言, 中间隔了一层, 脚本程序是通过CPU间接运行的

    • 脚本语言的两大类:
      • 一边解释一边执行-->所以不会有opcode生成
      • 分析整个文件后创建抽象语法树生成opcode, 有了指令之后让解释器去执行opcode(包括操作码和操作数), 这就相当于CPU执行汇编语言一样
      • ==== 华丽的分割线 =====
      • 解释器可以理解为一个虚拟机, 虚拟机的有两类, 一个是类似于Python的虚拟机一样只模拟CPU; 另一个是类似于VMware一样, 用来虚拟操作系统的, 使用数组作为寄存器, 文件作为硬件

为什么脚本语言会慢

  • 脚本语言需要两次IO, 而编译型则需要一次IO
    • 在脚本语言中, CPU将脚本解释器从硬盘加载到内存中, 脚本解释器又将脚本程序从硬件中加载到内存中; 而编译型语言本身就是一个二进制程序, CPU将其加载到内存中, CPU就直接执行了
    • 另一个原因还跟脚本语言的解释方式
      • 在一边解释一边执行的脚本语言中:
        • CPU操作的是字符串, 没有编译的操作, 我们只要比较字符串需要时间复杂度为O(n), 而数字为O(1), 所以需要比较n次才能确定一个操作码, 太慢了
      • 在先编译再执行中(Python)
        • 将文件编译, 里面的字符串都转换为数字, 这样时间复杂度就是O(1)了, 更快了
目录
相关文章
|
人工智能 开发框架 物联网
为什么 C# 可能是最好的第一编程语言
C# 是一个全面领域的全能型语言,结合新时代的 .NET 平台,与时俱进的发展创新,未来无限可期!对于带着有色眼镜看待的人们,是否该刮目相看了呢?下面看看行业大佬关于 .NET 的解说。
1239 2
为什么 C# 可能是最好的第一编程语言
|
Java C# 自然语言处理
如何用 ANTLR 4 实现自己的脚本语言?
ANTLR 是一个 Java 实现的词法/语法分析生成程序,目前最新版本为 4.5.2,支持 Java,C#,JavaScript 等语言,这里我们用 ANTLR 4.5.2 来实现一个自己的脚本语言。
5092 0
|
3月前
|
Rust JavaScript 前端开发
编程语言
【10月更文挑战第13天】编程语言
59 4
|
8月前
|
JavaScript Java iOS开发
编程语言有哪些?
【5月更文挑战第22天】编程语言有哪些?
230 10
|
8月前
|
Java Linux Shell
开发语言漫谈-脚本语言
前面讲的都称之为编程语言,就是做系统用的。还有一大类称之为脚本语言的语言
|
8月前
|
JavaScript 前端开发 开发者
JavaScript是一种轻量级的解释型编程语言
【5月更文挑战第22天】JavaScript是一种轻量级的解释型编程语言
67 4
|
JavaScript 前端开发 Java
Python 既是解释型语言,也是编译型语言
Python 既是解释型语言,也是编译型语言
|
人工智能 分布式计算 Java
【编程语言选择】我们学C++将来能做什么?
【编程语言选择】我们学C++将来能做什么?
130 0
编译型语言和解释型语言
编译型语言和解释型语言自制脑图
156 0
编译型语言和解释型语言
|
Oracle JavaScript Java
最好的编程语言
当我想在工作中休息一下时,我有时会阅读技术论坛。有一种帖子我真的很喜欢:编程语言之间的火焰战争。我喜欢这些帖子,因为你可以看到充满激情和聪明的人,他们正在争论,好像他们的生活正在发挥作用。 这些职位有2个优点: 他们让我笑 我学新东西 如果我必须总结这种帖子,那将是这样的: 帖子标题“Java是最好的语言”由NewJavaFanBoy撰写 NewJavaFanBoy:Java是最好的语言,因为它的社区。此外,它具有非常酷的功能,如lambdas。为什么这么多人讨厌Java? 前JavaFanBoy:Oracle杀死了Java。 DotNetFanBoy:Java的演进太慢了,
164 0