-
中国 上海 / 2020-11.21-22
Go语言编译器简介
’ alt=‘OCR图片’/>
关于我
Contributors to golang/go · GitHub
给Go编译器提交过127个补丁,累计六万余行;
拥有Go官方git仓库提交权限;
全球贡献者排名长期处于前50名;
世界上90%的gopher都用过我写的代码;
编译器的重要性
只有1%的程序员懂汇编语言
汇编语言无法构建大型系统 汇编语言无法构建大型系统
操作系统内核也需要编译器才能运行起来
编译理论是图灵奖大户,仅次于计算复杂度理论
操作系统有后门,编译器的后门更致命
编译器的难题:任务爆炸
N种语言 * M种机器 = N*M 个任务
GOPHER CHINA 2020
中国 上海 / 2020-11.21-22
两个方案
$$
N \mathrm {种 语 言} + M \mathrm {种 机 器} = {个 任 务}
$$
其它语言 -> C -> 各个机器
各个语言 -> x86 -> 其它机器
GOPHER CHINA 2020
中国 上海 / 2020-11.21-22
通用(非专用)编译器的方案
AST = Abstract Syntax Tree抽象语法树
SSA = Single Static Assignment单静态赋值
IR = Intermediate Representation中间表示
0 码力 |
36 页 |
1.63 MB
| 1 月前 3
-
## RUST CHINA CONF 2023
第三届中国Rust开发者大会
6.17-6.18 @Shanghai
## KCL: Rust 在编译器领域的实践与探索
张正
蚂蚁集团
## 😍
01 KusionStack 与 KCL
02 用 Rust 重写 KCL
03 Rust 重写后的收益
04 更多的探索
## 01 KusionStack 与 KCL
## KusionStack是什么 add1b5abffd9fb8525138fc88bca0/p9_2.jpg)
## 2
KCL 编译器架构升级
Python 代码翻译
Source Code
Python code
栈式虚拟机
Source Code
AST
Bit code
VM
Rust 编译器
Source Code
AST
LLVM IR
Native/WASM
## R
## 我们遇到了哪些问题? 强大的编译检查和错误处理方式,更少的 Bug
03 20 & 40
前端解析器性能提升 20倍
中端语义分析器性能提升40倍
## 02 66%
端到端编译执行性能提升了66%
## 04 50%
语言编译器编译过程平均内存使用量变为原来 Python 版本的一半
## Case1: 单文件编译
> https://github.com/KusionStack/kcl#showcase
## …
0 码力 |
25 页 |
3.50 MB
| 2 年前 3
-
0 码力 |
25 页 |
297.68 KB
| 2 年前 3
-
## AMD
# 从汇编角度看编译器优化
by 彭于斌 (@archibate)
往期录播:https://www.bilibili.com/video/BV1fa411r7zp
课程 PPT 和代码:https://github.com/parallel101/course
的压力。
• 因此 64 位比 32 位机器相比,除了内存突破 4GB 限制外,也有一定性能优势。
# 8 位,16 位,32 位,64 位版本
al
0 码力 |
108 页 |
9.47 MB
| 2 年前 3
-
@Shanghai
WebAssembly 介绍
## WebAssembly 简介
WebAssembly(简称 Wasm)是一种新的编译目标,帮助在 web 中运行高性能应用。它是一种低级语言,设计为编译器目标,以在 web 浏览器中高效运行。
## WebAssembly 简介
## #高性能
WebAssembly 代码可以以接近原生的速度运行,且具有很小的二进制大小和快速加载速度。
## # Mozilla、Google、Microsoft 等主要浏览器供应商共同设计。它现已在所有主流浏览器中实现,包括 Chrome、Firefox、Safari 和 Edge。
## # 多语言支持
现在多种语言都有编译器支持
WebAssembly,如 C/C++、Rust、Go、Zig 等。
## WebAssembly 简介
## WebAssembly 机制
## memory
Wasm 的 memory );
println("[wasm] exit");
}
Async Wasm 解决方案
## 基于 Asyncify(Binaryen)
Binaryen 是一个编译器基础架构库,提供了一套用于处理 WebAssembly 的工具。其中一个功能是 asyncify,它允许将同步的 WebAssembly 代码转换为异步代码。就像 rust 对 async function
0 码力 |
24 页 |
773.46 KB
| 2 年前 3
-
0 码力 |
26 页 |
2.35 MB
| 2 年前 3
-
类型断言),例如:
func f(x any) {
if _, ok := x.(interface{ Bar(int) }); ok {
// ...
}
}
编译器无法提前得知是否应该给 X 生成 Bar(int) 方法
## 类型集的本质
类型集的基本想法是设计一种能够表达一类类型的机制,这就是集合论的基本想法。设计这种机制的核心难点是保证不会出现罗素悖论 interface {
ConstraintA | ConstraintB // 并集
ConstraintMethodC() // 交集
}
这个问题是一个 NP 完全问题(Cook-Levin 定理)。
编译器在编译期间执行这类检查,如果不对规则加以限制,则将在某些情况下极大的增加编译时间。
这最终导致了 "并集元素中不能包含具有方法集的参数 类型" 这一限制.
Go 1.18 中的类 目前的泛型(1.18, 但很可能在 1.20 之前都)还比较基础且限制较多(也不排除永远不会解除这些限制)很多原因是权衡了编译器编译速度的结果(而非标新立异)
期待未来的改进空间
1. 取消前面提到的限制
2. 支持 parameterized aliases
3. 编译器改善
## 讨论
泛型在哪些基础库得到广泛应用?
泛型对于 Go 语言的简单性是一种破坏吗?
使用泛型会对性能有提升吗?
0 码力 |
45 页 |
501.50 KB
| 2 年前 3
-
|2|组件|支持 U-Boot,Linux,Buildroot,QEMU。支持 Linux v0.11,v2.6.10 ~ v5.x|
|3|预置组件|提供上述组件的预先编译版本,并按开发板分类存放,可即时下载使用|
|4|根文件系统|支持 initrd,harddisk,mmc 和 nfs;ARM 架构提供 Debian 系统|
|5|Docker|包括 gcc-4.3 在内的交叉工具链已预先安装,还可灵活配置并下载外部交叉工具链| 和 RISC-V 支持
####### 1.6.2 v0.2 @ 2019.10.30
v0.2 新增原生 Windows 支持、新增龙芯早期全系 MIPS 架构处理器支持、新增多个平台外置交叉编译器支持、新增实时 RT 支持、新增 host 侧免 root 支持等,并首次被某线上课程全程采用。
• v0.2 rc3
– 新增原生 Windows 支持,基于 Docker Toolbox,无需通过 12
v0.5 提前升级到新镜像 Ubuntu 20.04,全面导入龙芯系列处理器支持,并进一步完善各种细微体验。
### • v0.5 rc3
- 修复 arm/vexpress-a9 因编译器配置问题引起的 U-Boot 编译失败
- 进一步完善文档中对普通用户的使用要求,避免使用 root 带来的诸多问题
### • v0.5 rc2
- 进一步改善 QEMU 编译体验,在 Gitee
0 码力 |
73 页 |
1.54 MB
| 2 年前 3
-
EMU。支持 Linux v0.11,v2.6.10 ~ v5.x
| 3 | 预置组件 | 提供上述组件的预先编译版本,并按开发板分类存放,可即时下载使用 |
| 4 | 根文件系统 | 支持 initrd,harddisk,mmc 和 nfs;ARM 架构提供 Debian 系统 | < 和 RISC-V 支持
####### 1.6.2 v0.2 @ 2019.10.30
v0.2 新增原生 Windows 支持、新增龙芯早期全系 MIPS 架构处理器支持、新增多个平台外置交叉编译器支持、新增实时 RT 支持、新增 host 侧免 root 支持等,并首次被某线上课程全程采用。
• v0.2 rc3
– 新增原生 Windows 支持,基于 Docker Toolbox,无需通过 12
v0.5 提前升级到新镜像 Ubuntu 20.04,全面导入龙芯系列处理器支持,并进一步完善各种细微体验。
### • v0.5 rc3
- 修复 arm/vexpress-a9 因编译器配置问题引起的 U-Boot 编译失败
- 进一步完善文档中对普通用户的使用要求,避免使用 root 带来的诸多问题
### • v0.5 rc2
- 进一步改善 QEMU 编译体验,在 Gitee 0 码力 |
70 页 |
1.53 MB
| 2 年前 3
-
|2|组件|支持 U-Boot,Linux,Buildroot,QEMU。支持 Linux v0.11,v2.6.10 ~ v5.x|
|3|预置组件|提供上述组件的预先编译版本,并按开发板分类存放,可即时下载使用|
|4|根文件系统|支持 initrd,harddisk,mmc 和 nfs;ARM 架构提供 Debian 系统|
|5|Docker|包括 gcc-4.3 在内的交叉工具链已预先安装,还可灵活配置并下载外部交叉工具链| 和 RISC-V 支持
####### 1.6.2 v0.2 @ 2019.10.30
v0.2 新增原生 Windows 支持、新增龙芯早期全系 MIPS 架构处理器支持、新增多个平台外置交叉编译器支持、新增实时 RT 支持、新增 host 侧免 root 支持等,并首次被某线上课程全程采用。
### • v0.2 rc3
– 新增原生 Windows 支持,基于 Docker Toolbox,无需通过 12
v0.5 提前升级到新镜像 Ubuntu 20.04,全面导入龙芯系列处理器支持,并进一步完善各种细微体验。
### • v0.5 rc3
- 修复 arm/vexpress-a9 因编译器配置问题引起的 U-Boot 编译失败
- 进一步完善文档中对普通用户的使用要求,避免使用 root 带来的诸多问题
### • v0.5 rc2
- 进一步改善 QEMU 编译体验,在 Gitee
0 码力 |
73 页 |
1.53 MB
| 2 年前 3