写点什么

【问道】编译原理

  • 2022 年 7 月 06 日
  • 本文字数:1585 字

    阅读完需:约 5 分钟

前言:📫 作者简介:小明java问道之路,专注于研究计算机底层,就职于金融公司后端高级工程师,擅长交易领域的高安全/可用/并发/性能的设计和架构📫 🏆 Java 领域新星创作者、阿里云专家博主、华为云享专家🏆🔥 如果此文还不错的话,还请👍关注点赞收藏三连支持👍一下博主哦


本文导读:上篇 计算机er要掌握的计算机思维 推理得出,编译原理就是将高级语言翻译成汇编语言或机器语言的过程,本章我们详细介绍编译设计原理和过程,并佐以 Graal 编译器证明

一、编译过程是什么样子的?

首先,我们看下人工翻译英语转汉语是怎么做到的,我们需要找到这句话中的,词的意思,在分析这句话的语法,最后通过语义将这句话翻译成中文,我们计算机的编译过程和这个过程类似

我们想诸如 Java、PyThon、Go、C++语言等是不能直接操作 ISA 指令集(前文中有介绍)的,我们还需要一个能把高级语言 编译 成统一的汇编语言(需要一个工具就是,编译器),再去调用汇编代码的过程。

当我 Java、Python、C++等等语言,编译器会通过 分析词法,例如 if else 等等,根据得到的词和词性去构件 AST(AST:抽象语法树(abstract syntax code,AST)是源代码的抽象语法结构的树状表示),得到的树是一个每个节点都表示源代码中的一种树形结构,通过语义将其转化为 IR 语言(这里面例如 java 转化为 .class 字节码),最后根据编译器的优化策略进行分析优化(例如 JVM 中指令重排等等)得到目标语言

二、编译基本原理

熟悉编译的过程后我们还需要更多的知识点支撑,通过几个细节的问题了解更多,定义的语法有什么?既然我们要构件 AST,我们就要定义每个编译的语法和单词的位置,所以这里面会定义编码信息、编码单词、规定单词出现的地方;定义(识别)单词有什么?标识信息的最小单位

针对我们需要做的事情(将高级语言编译成汇编语言或机器语言)这个过程,我们可以理解为将大象放进冰箱需要三步,打开冰箱,塞进大象,关上冰箱 。

编译也可以分为三步 前端-》中间语言-》后端,前端就是由不同需要接入当前编译器的前端开发者进行开发,来适配多门语言,过程为 高级语言源代码-》词法分析-》语法分析-》构件 AST 的过程-》到中间语言,中间语言解耦,后端由不同需要接入当前编译器的后端开发进行开发,来适配多门目标机器语言(ISA),拿到中间语言-》做分析优化,最终生成目标语言。

三、深入浅出 Graal 编译器

了解了编译的原理和过程,我们要知道是谁帮我们做了这么多工作,这个工具就是编译器,这里用作者 Java 语言(同时也可以编译 scala、python 等语言)的编译器 Graal 就上述原理做介绍

Graal 编译器支持基于跨平台的 Hot spotJVM 上层中间语言 IR 语言——字节码,将各类语言(Java、Python、R、JS、C/C++、Scala)都可以在 JVM 上执行,可以享有 JVM 的高性能。GC、化平台等特性,下图是 GraalVM 编译器的架构图


1、Truffle Framework:Java's AST Interpreter Framework(Java 的 AST 解释器框架,这个东西就是将各种其他语言转换为中间语言的工具)

2、Graal Compiler :JIT compiler written in Java(用 Java 编写的 JIT 编译器,是一个 JIT 即时编译器,它实现了 3)

3、JVM CI (JVM Compiler Interface) Interface for Writing JIT Compiler in Java(JVM 编译器接口,是一个接口规范,定义了 JIT 即时编译器的规范)

4、Java Hotspot VM(这个也就是我们俗称的 JVM

5、JIT(即时编译器),这个自己实现了编译原理的前端和后端,只不过在内存中动态对语言进行编译

Graal 是和 JDK 一起发行的,作为一个内部的模块 jdk.internal.vm.compiler 中。Graal 和 JVM 是通过 JVM CI(JVM Compiler Interface)来进行通信的。其中 JVM CI 也是一个内部的模块在 jdk.internal.vm.ci 中。这里简单介绍编译器证明编译过程,以及编译器应该如何设计,后续笔者详细讲解编译器原理。


本文小结:本章我们首先通过翻译英语应该怎么做,推理出,计算机的编译原理,并详细介绍编译设计原理和过程,佐以 Graal 编译器证明。

发布于: 刚刚阅读数: 7
用户头像

还未添加个人签名 2020.03.20 加入

🏆阿里云专家博主、华为云享专家、Java领域新星创作者 📫就职某大型金融互联网公司高级研发工程师 👍注于研究计算机底层、算法和数据结构

评论 (1 条评论)

发布
用户头像
喜欢的话,三连支持下博主
刚刚
回复
没有更多了
【问道】编译原理_编译原理_小明Java问道之路_InfoQ写作社区