2.1.5 Go语言编译器简介中国 上海 / 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
KCL: Rust 在编译器领域的实践与探索## 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
C++高性能并行编程与优化 - 课件 - 04 从汇编角度看编译器优化## AMD # 从汇编角度看编译器优化 by 彭于斌 (@archibate) 往期录播:https://www.bilibili.com/video/BV1fa411r7zp 课程 PPT 和代码:https://github.com/parallel101/course 的压力。 • 因此 64 位比 32 位机器相比,除了内存突破 4GB 限制外,也有一定性能优势。 # 8 位,16 位,32 位,64 位版本 al0 码力 | 108 页 | 9.47 MB | 2 年前3
WebAssembly 简介 - 陈思衡@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 function0 码力 | 24 页 | 773.46 KB | 2 年前3
how webpack works0 码力 | 26 页 | 2.35 MB | 2 年前3
Go 1.18 中的泛型类型断言),例如: 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
The Go frontend for GCC0 码力 | 14 页 | 122.25 KB | 2 年前3
User’s Guide for Free Pascal, Version 3.2.20 码力 | 217 页 | 756.57 KB | 2 年前3
Agda User Manual v2.6.40 码力 | 313 页 | 1.38 MB | 2 年前3
TVM: Where Are We Going0 码力 | 31 页 | 22.64 MB | 1 年前3
共 374 条
- 1
- 2
- 3
- 4
- 5
- 6
- 38













