KCL: Rust 在编译器领域的实践与探索第三届中国Rust开发者大会 KCL: Rust 在编译器领域的实践与探索 张正 蚂蚁集团 Agenda 01 KusionStack 与 KCL 02 用 Rust 重写 KCL 03 Rust 重写后的收益 04 更多的探索 01 KusionStack 与 KCL KusionStack是什么? KusionStack架构 KCL KusionStack 是什么? Language Server KCL Compiler KCL Package Manager 02 用 Rust 重写 KCL Python 代码翻译 栈式虚拟机 Rust 编译器 KCL 编译器架构升级 Source Code AST LLVM IR Native/WASM Source Code AST Bit code VM Source Code Python 更少的 Bug 稳定性提升 端到端编译执行性能提升了 66% 66 % 20 & 40 前端解析器性能提升 20倍 中端语义分析器性能提升40倍 稳定性和性能的巨大提升 50 % 语言编译器编译过程平均内存使用 量变为原来 Python 版本的一半 01 02 03 04 Case1: 单文件编译 > https://github.com/KusionStack/kcl#showcase0 码力 | 25 页 | 3.50 MB | 1 年前3
C++高性能并行编程与优化 - 课件 - 04 从汇编角度看编译器优化从汇编角度看编译器优化 by 彭于斌( @archibate ) 往期录播: https://www.bilibili.com/video/BV1fa411r7zp 课程 PPT 和代码: https://github.com/parallel101/course 高性能并行编程与优化 - 课程大纲 • 分为前半段和后半段,前半段主要介绍现代 C++ ,后半段主要介绍并行编程与优化。 1 1.课程安排与开发环境搭建: cmake 与 git 入门 2.现代 C++ 入门:常用 STL 容器, RAII 内存管理 3.现代 C++ 进阶:模板元编程与函数式编程 4.编译器如何自动优化:从汇编角度看 C++ 5.C++11 起的多线程编程:从 mutex 到无锁并行 6.并行编程常用框架: OpenMP 与 Intel TBB 7.被忽视的访存优化:内存带宽与 cpu 缓存机制 4GB 限制外,也有一定性能优势。 8 位, 16 位, 32 位, 64 位版本 al, ax, eax, rax r15b, r15w, r15d, r15 AT&T 汇编语言 GCC 编译器所生成的汇编语言就属于这种 返回值:通过 eax 传出 movl $42, %eax 相当于: eax = 42; 前 6 个参数:分别通过 edi , esi , edx , ecx , r8d0 码力 | 108 页 | 9.47 MB | 1 年前3
Kotlin 1.9.10 官方文档 中文版
反向兼容性 原生 Kotlin/Native 入门——在 IntelliJ IDEA 中 Kotlin/Native 入门——使用 Gradle Kotlin/Native 入门——使用命令行编译器 与 C 语言互操作 1.10.2.4.1 1.10.2.4.2 1.10.2.4.3 1.10.2.4.4 1.10.2.4.5 1.10.2.4.6 1.10.2.5 1.10 Kotlin/JS 开发服务器与持续编译 调试 Kotlin/JS 代码 在 Kotlin/JS 平台中运行测试 Kotlin/JS 无用代码消除 Kotlin/JS IR 编译器 将 Kotlin/JS 项目迁移到 IR 编译器 Kotlin 用于 JS 平台 浏览器与 DOM API 在 Kotlin 中使用 JavaScript 代码 动态类型 使用来自 npm 的依赖 在 JavaScript 关键字与操作符 语法↗ 语言规范↗ 工具 构建工具 Gradle Gradle 概述 Gradle 入门——教程 配置 Gradle 项目 Kotlin Gradle 插件中的编译器选项 Kotlin Gradle 插件中的编译项与缓存 支持 Gradle 插件变体 Maven Ant Dokka 简介 Dokka 入门 运行 Dokka Gradle Maven0 码力 | 3753 页 | 29.69 MB | 1 年前3
Kotlin 官方文档中文版 v1.9反向兼容性 原生 Kotlin/Native 入门——在 IntelliJ IDEA 中 Kotlin/Native 入门——使用 Gradle Kotlin/Native 入门——使用命令行编译器 与 C 语言互操作 与 C 语言互操作性 映射来自 C 语言的原始数据类型——教程 映射来自 C 语言的结构与联合类型——教程 6 1.10.2.4.4 1.10.2.4.5 1.10 Kotlin/JS 开发服务器与持续编译 调试 Kotlin/JS 代码 在 Kotlin/JS 平台中运行测试 Kotlin/JS 无用代码消除 Kotlin/JS IR 编译器 将 Kotlin/JS 项目迁移到 IR 编译器 Kotlin 用于 JS 平台 浏览器与 DOM API 在 Kotlin 中使用 JavaScript 代码 动态类型 使用来自 npm 的依赖 在 JavaScript 关键字与操作符 语法↗ 语言规范↗ 工具 构建工具 Gradle Gradle 概述 Gradle 入门——教程 配置 Gradle 项目 Kotlin Gradle 插件中的编译器选项 Kotlin Gradle 插件中的编译项与缓存 支持 Gradle 插件变体 Maven Ant Dokka 简介 Dokka 入门 运行 Dokka Gradle Maven0 码力 | 2049 页 | 45.06 MB | 1 年前3
Julia 中文文档不会舍弃动态的特性。幸运的是,现代编 程语言设计与编译器技术可以大大消除性能折衷(trade-off),并提供有足够生产力的单一环境进行 原型设计,而且能高效地部署性能密集型应用程序。Julia 语言在这其中扮演了这样一个角色:它是 一门灵活的动态语言,适合用于科学计算和数值计算,并且性能可与传统的静态类型语言媲美。 由于 Julia 的编译器和其它语言比如 Python 或 R 的解释器有所不同,一开始你可能发现 无论它是基础的类型(primitive)还是用户自定义的类型。大多数的动态语言都缺乏类型声明,这意 味着程序员无法告诉编译器值的类型,也就无法显式地讨论类型。另一方面,在静态语言中,往往 必须标注对象的类型。但类型只在编译期才存在,而无法在运行时进行操作和表达。而在 Julia 中, 类型本身是运行时的对象,并可用于向编译器传达信息。 类型系统和多重派发是 Julia 语言最主要的特征,但一般不需要显式地手动标注或使用:函数通过函 --cpu-target设置 来限制使用 CPU 的某些特性;设置为 help 可以查看可用的 选项 -O, --optimize={0,1,2,3} 设置编译器优化级别 (若未配置此选项,则默认等级为 2;若配置了此选项 却没指定具体级别,则默认级别为 3)。 -g, -g 开启或设置 debug 信息的生成等级。若未配置此选项,则默认 debug 0 码力 | 1238 页 | 4.59 MB | 1 年前3
Python 标准库参考指南 3.10.15 ast 中的辅助函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1747 32.1.4 编译器旗标 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1750 32.1.5 命令行用法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1750 32.2 symtable ——访问编译器的符号表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1751 32.2.1 符号表的生成 . . . . . . . flags 和 dont_inherit 控制应当激活哪个编译器选项 以及应当允许哪个 future 特性。如果 两者都未提供 (或都为零) 则代码会应用与调用compile() 的代码相同的旗标来编译。如果给出 了 flags 参数而未给出 dont_inherit (或者为零) 则会在无论如何都将被使用的旗标之外还会额外使用 flags 参数所指定的编译器选项和 future 语句。如果 dont_inherit0 码力 | 2072 页 | 10.39 MB | 9 月前3
Python 标准库参考指南 3.10.15 中的辅助函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1865 32.1.4 编译器旗标 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1868 32.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1868 32.2 symtable ——访问编译器的符号表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1869 32.2.1 符号表的生成 . . . . . 和 dont_inherit 控制应当激活哪个编译器选项 以及应当允许哪个 future 特性。如果两者 都未提供 (或都为零) 则代码会应用与调用compile() 的代码相同的旗标来编译。如果给出了 flags 参 数而未给出 dont_inherit (或者为零) 则会在无论如何都将被使用的旗标之外还会额外使用 flags 参数所指 定的编译器选项和 future 语句。如果 dont_inherit0 码力 | 2207 页 | 10.45 MB | 9 月前3
Python 标准库参考指南 3.13 ast 中的辅助函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1939 32.1.4 编译器旗标 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1943 32.1.5 命令行用法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1943 32.2 symtable --- 访问编译器的符号表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1944 32.2.1 符号表的生成 . . . . . flags 和 dont_inherit 控制应当激活哪个编译器选项 以及应当允许哪个 future 特性。如果 两者都未提供 (或都为零) 则代码会应用与调用compile() 的代码相同的旗标来编译。如果给出了 flags 参数而未给出 dont_inherit (或者为零) 则会在无论如何都将被使用的旗标之外还会额外使用 flags 参数所指定的编译器选项和 future 语句。如果 dont_inherit0 码力 | 2246 页 | 11.74 MB | 9 月前3
Python 标准库参考指南 3.12 ast 中的辅助函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1908 32.1.4 编译器旗标 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1911 32.1.5 命令行用法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1912 32.2 symtable --- 访问编译器的符号表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1912 32.2.1 符号表的生成 . . . . . flags 和 dont_inherit 控制应当激活哪个编译器选项 以及应当允许哪个 future 特性。如果 两者都未提供 (或都为零) 则代码会应用与调用compile() 的代码相同的旗标来编译。如果给出了 flags 参数而未给出 dont_inherit (或者为零) 则会在无论如何都将被使用的旗标之外还会额外使用 flags 参数所指定的编译器选项和 future 语句。如果 dont_inherit0 码力 | 2253 页 | 11.81 MB | 9 月前3
Python 标准库参考指南 3.13 ast 中的辅助函数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1935 32.1.4 编译器旗标 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1939 32.1.5 命令行用法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1939 32.2 symtable --- 访问编译器的符号表 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1940 32.2.1 符号表的生成 . . . . . flags 和 dont_inherit 控制应当激活哪个编译器选项 以及应当允许哪个 future 特性。如果 两者都未提供 (或都为零) 则代码会应用与调用compile() 的代码相同的旗标来编译。如果给出了 flags 参数而未给出 dont_inherit (或者为零) 则会在无论如何都将被使用的旗标之外还会额外使用 flags 参数所指定的编译器选项和 future 语句。如果 dont_inherit0 码力 | 2242 页 | 11.73 MB | 9 月前3
共 303 条
- 1
- 2
- 3
- 4
- 5
- 6
- 31













