当前位置:首页 > 实用技巧 >

自己动手写编译器(如何制作一个自己的编译器)

来源:原点资讯(www.yd166.com)时间:2023-05-29 22:46:11作者:YD166手机阅读>>

自己动手写编译器,如何制作一个自己的编译器(13)

项目开源:rCore for MIPS32 - Linux 兼容的 rust 编写的操作系统

rCore for MIPS32这个项目已经在Github上开源,感兴趣的读者可以去研究一下:

Github:https://github.com/rcore-os/rCore

rCore for MIPS32 - Linux 兼容的 rust 编写的操作系统(with:陈晟祺)

这是操作系统的课程项目,rCore 是用 rust 编写的一个操作系统,也是由清华的同学编写的。在我们加入之前支持了 x86_64, RISCV32/64, AArch64 三个平台。我们主要将其移植到 MIPS32 上。它最终可以在组成原理课程编写的 MIPS32 处理器上运行。

自己动手写编译器,如何制作一个自己的编译器(14)

环境:

Rust toolchain at nightly-2019-03-05

Cargo tools: cargo-xbuild

QEMU >= 3.1.0

bootimage (for x86_64)

RISCV64 GNU toolchain (for riscv32/64)

AArch64 GNU toolchain (for aarch64)

musl-cross-make (for userland musl, or download prebuilt toolchain from musl.cc)

libfuse-dev (for userland image generation)

See Travis script for details.

如何运行:

$ rustup component add rust-src llvm-tools-preview

$ cargo install cargo-binutils

$ cargo install cargo-xbuild --force

$ cargo install bootimage --version 0.5.7 --force

$ git clone https://github.com/rcore-os/rCore.git --recursive$ cd rCore/user

$ make sfsimg arch={riscv32,riscv64,x86_64,aarch64,mipsel} # requires $(arch)-linux-musl-gcc$ cd ../kernel

$ make run arch={riscv32,riscv64,x86_64,aarch64,mipsel} mode=release

$ make run arch=x86_64 mode=release pci_passthru=0000:00:00.1 # for ixgbe real nic, find its pci (bus, dev, func) first

miskcoo的其他项目还包括:

  • NonTrivialMIPS - 十级双发射顺序 MIPS32 处理器

(with:陈晟祺,刘晓义,陈嘉杰)

这是参加 “龙芯杯” 的作品,获得特等奖。我们自己实现了一个十级双发射顺序 MIPS32 处理器,包含 32 位浮点单元和一个 AES 加速单元。在其上自行设计了 SoC 同时移植了 Linux 操作系统。可以运行图形界面(X 服务)以及 Python 等一大类程序,在 OpenSSL 上利用 AES 单元加速后吞吐率大约为 10MBps(CPU 主频 80MHz,在 i7-8750H 上不利用 AESNI 指令的实现吞吐率大约为 100MBps)。同时浮点单元能够较快地绘制 Mandelbrot 集的图像,我们还实现了通过变分自编码器(VAE)生成手写数字图像等。

Github: https://github.com/miskcoo/nontrivial-mips

  • TrivialMIPS - 五级双发射顺序 MIPS32 处理器

(with:陈晟祺,姚沛然)

这是大三上学期组成原理、软件工程的联合实验,在组成原理的 ThinPad 实验板上编写的 MIPS32 处理器。由于仅有 SRAM,处理器不带有 Cache,和 “龙芯杯” 的相比较为简陋。不过,加上之后操作系统和编译原理的成果,还是实现了在自己写的 CPU 上运行自己写的操作系统,同时运行自己写的编译器生成的程序。

Github: https://github.com/trivialmips/trivialmips

  • FPGA Console - 硬件实现的 VT220 兼容终端

(with:陈晟祺)

这是大二下学期数字逻辑设计的项目,也是我的第一个 FPGA 项目。主要是通过 FPGA 接受键盘的输入,将输入转化为控制命令通过串口输出给计算机。同时也通过串口接受计算机传回的控制命令名且解析、执行,修改对应位置的字符,再将字符进行渲染通过 VGA 输出到屏幕。支持 VT220 以及部分 xterm-256color 的控制序列。

Github: https://github.com/Harry-Chen/fpga-virtual-console

  • TrivialDB - 简易 SQL 数据库引擎

这是数据库系统概论的课程项目,用 C 实现的一个 SQL 数据库引擎。实现了大部分常见的 SQL 语句和类型。同时支持多表连接、复杂表达式运算、多主键约束、外键约束、CHECK 约束、UNIQUE 和 DEFAULT 约束、聚集查询、利用 B 树索引的查询优化,同时,它支持任意长度的 VARCHAR 类型。

Github: https://github.com/miskcoo/TrivialDB

  • rubik-cube - 快速魔方解算器

大学后的第一个课程项目,利用 Kociemba 算法实现的三阶魔方求解器。大约能够在 1 秒内通过不多于 32 步复原一个三阶魔方。另外,还实现了 Krof 算法,可以计算最少复原方案,不过这需要很长的时间。同时,我利用 OpenGL 对复原过程进行了动画展示。

Github: https://github.com/miskcoo/rubik-cube

其它项目(较为简单,部分没有公开。有需要代码可以联系我)

  • Mandelbrot-Render,一个高精度 Mandelbrot 渲染器。
  • SimpleTomasulo - Tomasulo 算法模拟器。
  • SimilaritySearch - 近似查找 / 近似连接算法,以及一个 “互联网打车” 应用。
  • OfficeOnline - 在线审批系统。
  • RIPRouter - 支持 RIP 协议的路由器。
  • TrivialNews - Java 实现的 Android 新闻阅读器。
  • 数独 - Qt 编写的数独,可生成及求解不同难度数独。
  • 国际跳棋 - Qt 编写的双人国际跳棋游戏。
  • 人物信息检索 - Python 编写的爬虫,可以抓取 Wikipedia 的人物信息并且显示。

最后,Miskcoo同学的主页请收好:

Miskcoo’s Space - 一个数学和计算机爱好者的博客

blog.miskcoo.com

讨论地址:

https://www.zhihu.com/question/345718537

编辑:王菁

校对:林亦霖

— 完 —

关注清华-青岛数据科学研究院官方微信公众平台“THU数据派”及姊妹号“数据派THU”获取更多讲座福利及优质内容。

栏目热文

编译器是自带的吗(vs自带编译器吗)

编译器是自带的吗(vs自带编译器吗)

华为为什么要做编译器前一段时间在国内P30发布会的时候,顺便发布华为针对android一款编译器---方舟编译器,而且在...

2023-05-29 23:00:40查看全文 >>

代码编译器怎么运行不了(编译器不能完成的步骤)

代码编译器怎么运行不了(编译器不能完成的步骤)

如果您的 VS2022 C# 控制台程序和 WPF 程序无法运行或者编译生成的文件在“杂项文件”夹中,可能是由于编译器或...

2023-05-29 22:58:07查看全文 >>

编译器一直运行吗(没有编译器程序能执行吗)

编译器一直运行吗(没有编译器程序能执行吗)

大家好,很高兴又见面了,我是"高级前端‬进阶‬",由我带着大家一起关注前端前沿、深入前端底层技术,大家一...

2023-05-29 22:40:17查看全文 >>

编译器使用方法(编译器的使用与技巧)

编译器使用方法(编译器的使用与技巧)

前言:C语言的应用范围广泛,具备很强的数据处理能力,不仅仅是在软件开发上,而且各类科研都需要用到C语言,适于编写系统软件...

2023-05-29 22:23:34查看全文 >>

编译器是怎么运行的(python编译器怎么运行)

编译器是怎么运行的(python编译器怎么运行)

编译器的主要工作流程:源代码 (source code) → 预处理之前的翻译处理→预处理器 (preprocessor...

2023-05-29 22:27:01查看全文 >>

怎么查看编译器在哪(编译器安装包在哪里找)

怎么查看编译器在哪(编译器安装包在哪里找)

华为emui9.1的时候发布了方舟编译器,当时适配的只有微博极速版,最近因为疫情的原因一直呆在家里,想下载几个应用打发...

2023-05-29 22:52:13查看全文 >>

编译器是基础软件吗(没有编译器软件是怎么运行的)

编译器是基础软件吗(没有编译器软件是怎么运行的)

1.方舟编译器暗淡,中国推自己的编程语言前途渺茫方舟编译器是华为推出的首个完全自主研发的编译器平台,于2019年8上线。...

2023-05-29 22:54:25查看全文 >>

编译器在线运行(编译器免费下载网站)

编译器在线运行(编译器免费下载网站)

1. CodeSandbox(基于 React 的在线代码沙盒平台) ① 主流的脚手架都支持,比如在线create-re...

2023-05-29 22:23:13查看全文 >>

recently时态用法(句子有recently用什么时态)

recently时态用法(句子有recently用什么时态)

接上篇。上次,我们谈到了如何从定义上去理解英语的时态。接下来,我们一起来总结下,各个时态对应的时间标志词,通俗一点讲,就...

2023-05-29 22:29:39查看全文 >>

recently后面的时态(recently后面句子的时态)

recently后面的时态(recently后面句子的时态)

很多同学在写作文时基本上是简单句的堆砌,偶尔有复杂句,动不动就是单调的so,and,then,but 等关系词,没有特点...

2023-05-29 22:35:22查看全文 >>

文档排行