Rust 开发编译器速成(二):计算编译器
书接上文。本章节会接触一些真正硬核的东西,包括从 Ast 生成 IR,以及制作一个迷你版的 LLVM,并且能够输出 LLVM IR 代码。
目标
我们会实现一个 AOT 编译器,它能够编译类似如下的语句:
11;-mem*3-1;print(mem);print(mem+7);
输出:
1-4
23
可以使用命令行
1calc -e "1;-mem*3-1;print(mem);print(mem+7);" | lli -
Read more...
Rust 开发编译器速成(一):计算解释器
在本系列的第一篇文章中,我们将学习如何使用 Rust 编写一个简单的计算解释器。本文的目标是让你理解如何使用 Pest 的 PEG 文法解析器生成器处理字符串。这个过程主要涉及到编译的前端,但基本只是调包,不需要太多的编译原理知识。
目标
我们会实现一个解释器,它能够解释如下的语句:
11 + 2;print(mem);
输出: 3
环境准备
首先,我们需要创建一个新的 Rust 项目。打开终端,输入以下命令:
1$ cargo new calc-comp
2 Created binary (application) `calc-comp` package
3$ code calc-comp
Read more...
SHA256 哈希算法原理和 Rust 实现
介绍
作为日常生活中每个网络用户都会使用的算法,SHA256 的原理可能却鲜有人知。
SHA256 的输入是任意长度的字节串,输出是一个 256 bit 的字节串。例如,
-
输入:字符串
abc
(相当于字节数组[0x6c, 0x65, 0x73, 0x73, 0x2d, 0x62, 0x75, 0x67, 0x2e, 0x63, 0x6f, 0x6d]
) -
输出:
1[0x20, 0x1a, 0xb7, 0x03, 0x64, 0x78, 0xee, 0x8a, 0xba, 0x2e, 0xb3, 0xc7, 0xc0, 0xc6, 0x5b, 0x8b, 0x17, 0x49, 0x58, 0x52, 0xf4, 0xeb, 0xe1, 0x5b, 0x79, 0xe5, 0x34, 0x39, 0x6f, 0x29, 0x0c, 0x5b]
Read more...1 of 1最近发布
要查看全部文章,请点击右上角“归档”
- 深入理解向量场微积分 (2024/10/27)
- 如何理解群的作用、轨道稳定子定理? (2024/10/13)
- 如何直观理解正规子群? (2024/10/8)
- 如何直观地理解同态和同构? (2024/10/7)
- 抽象代数笔记(2024-10-5 更新) (2024/10/5)