-
中国 上海 / 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
-
## 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
-
Kotlin ..... 105
What's new in Kotlin 1.9.20 ..... 105
.IDE support ..... 105
New Kotlin K2 compiler updates ..... 106
Kotlin/JVM ..... 107
Kotlin/Native ..... 107
Kotlin Multiplatform Kotlin 1.9.20 ..... 122
What's new in Kotlin 1.9.0 ..... 122
.IDE support ..... 123
New Kotlin K2 compiler updates ..... 123
Language ..... 125
Kotlin/JVM ..... 126
Kotlin/Native ..... 127 1.9.0 ..... 141
What's new in Kotlin 1.9.20-RC2 ..... 142
IDE support ..... 142
New Kotlin K2 compiler updates ..... 142
Kotlin Multiplatform ..... 143
Kotlin/Native ..... 147
Kotlin/Wasm
0 码力 |
1299 页 |
32.44 MB
| 2 年前 3
-
Kotlin/Native 入门——在 IntelliJ IDEA 中 1.10.2.1
Kotlin/Native 入门——使用 Gradle 1.10.2.2
Kotlin/Native 入门——使用命令行编译器 1.10.2.3
与 C 语言互操作 1.10.2.4
与 C 语言互操作性 1.10.2.4.1
映射来自 C 语言的原始数据类型——教程 1.10.2.4.2
映射来自 C 语言的结构与联合类型——教程 代码 1.10.4.4
在 Kotlin/JS 平台中运行测试 1.10.4.5
Kotlin/JS 无用代码消除 1.10.4.6
Kotlin/JS IR 编译器 1.10.4.7
将 Kotlin/JS 项目迁移到 IR 编译器 1.10.4.8
Kotlin 用于 JS 平台 1.10.4.9
浏览器与 DOM API 1.10.4.9.1
在 Kotlin 中使用 JavaScript 15.1.1
Gradle 概述 1.15.1.1.1
Gradle 入门——教程 1.15.1.1.2
配置 Gradle 项目 1.15.1.1.3
Kotlin Gradle 插件中的编译器选项 1.15.1.1.4
Kotlin Gradle 插件中的编译项与缓存 1.15.1.1.5
支持 Gradle 插件变体 1.15.1.1.6
Maven 1.15.1.2
Ant 1
0 码力 |
3753 页 |
29.69 MB
| 2 年前 3
-
IntelliJ IDEA 中 1.10.2.1
2.
Kotlin/Native 入门——使用 Gradle 1.10.2.2
3.
Kotlin/Native 入门——使用命令行编译器 1.10.2.3
4.
与 C 语言互操作 1.10.2.4
1.
与 C 语言互操作性 1.10.2.4.1
2.
映射来自 C 语言的原始数据类型——教程 1.10 Kotlin/JS 平台中运行测试 1.10.4.5
6.
Kotlin/JS 无用代码消除 1.10.4.6
7.
Kotlin/JS IR 编译器 1.10.4.7
8.
将 Kotlin/JS 项目迁移到 IR 编译器 1.10.4.8
9.
Kotlin 用于 JS 平台 1.10.4.9
1.
浏览器与 DOM API 1.10.4.9.1
2 1.15.1.1.1
2.
Gradle 入门——教程 1.15.1.1.2
3.
配置 Gradle 项目 1.15.1.1.3
4.
Kotlin Gradle 插件中的编译器选项 1.15.1.1.4
5.
Kotlin Gradle 插件中的编译项与缓存 1.15.1.1.5
6.
支持 Gradle 插件变体 1.15.1.1.6
2.
Maven
0 码力 |
- 页 |
22.65 MB
| 2 年前 3
-
入门——在 IntelliJ IDEA 中 1.10.2.1
Kotlin/Native 入门——使用 Gradle 1.10.2.2
Kotlin/Native 入门——使用命令行编译器 1.10.2.3
与 C 语言互操作 1.10.2.4
与 C 语言互操作性 1.10.2.4.1
映射来自 C 语言的原始数据类型——教程 1.10.2.4.2
映射来自
在 Kotlin/JS 平台中运行测试 1.10.4.5
Kotlin/JS 无用代码消除 1.10.4.6
Kotlin/JS IR 编译器 1.10.4.7
将 Kotlin/JS 项目迁移到 IR 编译器 1.10.4.8
Kotlin 用于 JS 平台 1.10.4.9
浏览器与 DOM API 1.10.4.9.1
在 Kotlin 中使用 1
Gradle 概述 1.15.1.1.1
Gradle 入门——教程 1.15.1.1.2
配置 Gradle 项目 1.15.1.1.3
Kotlin Gradle 插件中的编译器选项 1.15.1.1.4
Kotlin Gradle 插件中的编译项与缓存 1.15.1.1.5
支持 Gradle 插件变体 1.15.1.1.6
Maven 1.15.1.2
Ant
0 码力 |
2049 页 |
45.06 MB
| 2 年前 3
-
[["babelify", { "presets": ["latest"] }]]
}
}
## 在线转换
Babel 提供一个 REPL 在线编译器,可以在线将 ES6 代码转为 ES5 代码。转换后的代码,可以直接作为 ES5 代码插入网页运行。
## 与其他工具的配合
许多工具需要 Babel 进行前置转码,这里举两个例子:ESLint 脚本,这个脚本里面可以使用 ES6 代码。
注意,第四个 script 标签的 type 属性的值是 module,而不是 text/javascript。这是 Traceur 编译器识别 ES6 代码的标志,编译器会自动将所有 type=module 的代码编译为 ES5,然后再交给浏览器执行。
除了引用外部 ES6 脚本,也可以直接在网页中放置 ES6 代码。