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 年前3C++高性能并行编程与优化 - 课件 - 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 年前3TypeScript Handbook(中文版)
6 6 6.1 6.2 6.3 6.4 6.5 6.6 6.7 7 7.1 7.2 7.3 7.4 7.5 7.6 7.7 7.8 7.9 编译选项 在MSBuild里使用编译选项 与其它构建工具整合 使用TypeScript的每日构建版本 Wiki TypeScript里的this 编码规范 常见编译错误 支持TypeScript的编辑器 结合ASP 如何书写声明文件 结构 TypeScript Handbook(中文版) 5 介绍 规范 举例 深入 发布 使用 工程配置 tsconfig.json NPM包的类型 编译选项 在MSBuild里使用编译选项 与其它构建工具整合 使用TypeScript的每日构建版本 Wiki TypeScript里的this 编码规范 常见编译错误 支持TypeScript的编辑器 结合ASP 编译代码 我们使用了 .ts 扩展名,但是这段代码仅仅是JavaScript而已。 你可以直接从现 有的JavaScript应用里复制/粘贴这段代码。 在命令行上,运行TypeScript编译器: tsc greeter.ts TypeScript Handbook(中文版) 9 5分钟了解TypeScript 输出结果为一个 greeter.js 文件,它包含了和输入文件中相同的JavsScript代0 码力 | 557 页 | 7.48 MB | 1 年前3TypeScript 4.0 使用手册
实用工具类型 如何书写声明文件 介绍 库结构 举例 最佳实践 深入 模板 发布 使用 工程配置 tsconfig.json 工程引用 NPM包的类型 编译选项 配置 Watch 在MSBuild里使用编译选项 与其它构建工具整合 使用TypeScript的每日构建版本 Wiki TypeScript里的this 编码规范 常见编译错误 支持TypeScript的编辑器 BookStack.CN 构建 库结构 举例 最佳实践 深入 模板 发布 使用 工程配置 tsconfig.json 工程引用 NPM包的类型 编译选项 配置 Watch 在MSBuild里使用编译选项 与其它构建工具整合 使用TypeScript的每日构建版本 Wiki TypeScript里的this 编码规范 常见编译错误 支持TypeScript的编辑器 实用工具类型 如何书写声明文件 介绍 库结构 举例 最佳实践 深入 模板 发布 使用 工程配置 tsconfig.json 工程引用 NPM包的类型 编译选项 配置 Watch 在MSBuild里使用编译选项 与其它构建工具整合 使用TypeScript的每日构建版本 Wiki TypeScript里的this 编码规范 常见编译错误 支持TypeScript的编辑器0 码力 | 683 页 | 6.27 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 11 现代 CMake 进阶指南
自动调用本地的构建系统在 build 里构建,即: make -C build -j4 // 调用本地的构建系统执行 install 这个目标,即安 装 -D 选项:指定配置变量(又称缓存变量) • 可见 CMake 项目的构建分为两步: • 第一步是 cmake -B build ,称为配置阶段( configure ),这时只检测环境并生成构建规则 • build 目录下生成本地构建系统能识别的项目文件( Makefile 或是 .sln ) • 第二步是 cmake --build build ,称为构建阶段( build ),这时才实际调用编译器来编译代码 • 在配置阶段可以通过 -D 设置缓存变量。第二次配置时,之前的 -D 添加仍然会被保留。 • cmake -B build -DCMAKE_INSTALL_PREFIX=/opt/openvdb-8 第二次配置时没有 -D 参数,但是之前的 -D 设置的变量都会被保留 • (此时缓存里仍有你之前定义的 CMAKE_BUILD_TYPE 和 CMAKE_INSTALL_PREFIX ) -G 选项:指定要用的生成器 • 众所周知, CMake 是一个跨平台的构建系统,可以从 CMakeLists.txt 生成不同类型的构建系 统(比如 Linux 的 make , Windows 的 MSBuild0 码力 | 166 页 | 6.54 MB | 1 年前3Kotlin 官方文档中文版 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 年前3Kotlin 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 年前3Nim 2.0.2 中文手册
个可选的 a ,圆括号⽤来 分组元素。 & 是预先运算符; &a 表示期望⼀个 a ,但没有⽤掉,⽽在之后的规则中被消耗。 | 和 / 符号⽤来标记备选项,优先级最低。 / 是有序选择,要求解析器按照给定的顺序来尝试备选项, / 常⽤来消除语法⼆义 性。 ⾮终结符号以⼩写字⺟开头,抽象终结符号字⺟全⼤写,逐字的终结符号(包括关键词)⽤ ' 引起来。例如: ⼆元的 ^* 运算符表示为 值,这取决于上下⽂。 Nim program "程序"由⼀个或多个包含 Nim 代码的⽂本 source �les "源⽂件"组成,由Nim compiler "编译器"处理成 executable "可 执⾏"⽂件,这个可执⾏⽂件的性质取决于编译器实现,例如,它可能是⼀个本地⼆进制⽂件或 JavaScript 源代码。 常规的 Nim 程序,⼤部分代码被编译⾄可执⾏⽂件,⽽有些代码可能会在 compile-time 包括常量表达式、宏定义 和宏定义使⽤的 Nim 程序。 编译期执⾏⽀持 Nim 语⾔的⼤部分,但有限制 -- 详情查看编译期执⾏限制。 其术语 runtime "运⾏ 时"涵盖了编译期执⾏和可执⾏⽂件的代码执⾏。 编译器将 Nim 源码解析成称为 abstract syntax tree (AST) "抽象语法树"的内部数据结构,在执⾏代码或将其编译为可执⾏⽂件之 前,通过 semantic analysis "语0 码力 | 127 页 | 7.05 MB | 1 年前3C++高性能并行编程与优化 - 课件 - 01 学 C++ 从 CMake 学起
,后半段主要介绍并行编程与优化。 1.课程安排与开发环境搭建: cmake 与 git 入门 2.现代 C++ 入门:常用 STL 容器, RAII 内存管理 3.现代 C++ 进阶:模板元编程与函数式编程 4.编译器如何自动优化:从汇编角度看 C++ 5.C++11 起的多线程编程:从 mutex 到无锁并行 6.并行编程常用框架: OpenMP 与 Intel TBB 7.被忽视的访存优化:内存带宽与 cpu 用户) CMake 3.12 及以上(跨平台作业) Git 2.x (作业上传到 GitHub ) CUDA Toolkit 10.0 以上( GPU 专题) 关于作者 • 我是 Taichi 编译器的贡献者之一( https://github.com/taichi-dev/taichi ) 关于作者(续) • 我是 Taichi Blend 的作者( https://github.com/ 关于作者(再续) • 主导 Zeno 节点仿真框架的开发( https://github.com/zenustech/zeno ) 什么是编译器 • 编译器,是一个根据源代码生成机器码的程序。 • > g++ main.cpp -o a.out • 该命令会调用编译器程序 g++ ,让他读取 main.cpp 中的字符串(称为源码),并根据 C+ + 标准生成相应的机器指令码,输出到 a.out0 码力 | 32 页 | 11.40 MB | 1 年前3跟我一起写 Makefile (PDF 重制版)
1003.2-1992 标准的(POSIX.2)。 在这篇文档中,将以 C/C++ 的源码作为基础,所以必然涉及一些关于 C/C++ 的编译的知识。关 于这方面的内容,还请各位查看相关的编译器的文档。这里所默认的编译器是 UNIX 下的 GCC 和 CC。 1.1 关于程序的编译和链接 在此,我想多说关于程序编译的一些规范和方法。一般来说,无论是 C 还是 C++,首先要把源文 件编译成中间代码文件,在 量的 Object File 合成可执行文件,这个动作叫作链接(link)。 编译时,编译器需要的是语法的正确,函数与变量的声明的正确。对于后者,通常是你需要告诉编 译器头文件的所在位置(头文件中应该只是声明,而定义应该放在 C/C++ 文件中),只要所有的语法正 1 , 发行版本 1.0 确,编译器就可以编译出中间目标文件。一般来说,每个源文件都应该对应于一个中间目标文件(.o 文 件或 Archive File,也就是 .a 文件。 总结一下,源文件首先会生成中间目标文件,再由中间目标文件生成可执行文件。在编译时,编译 器只检测程序语法和函数、变量是否被声明。如果函数未被声明,编译器会给出一个警告,但可以生成 Object File。而在链接程序时,链接器会在所有的 Object File 中找寻函数的实现,如果找不到,那到就 会报链接错误码(Linker Error),在0 码力 | 81 页 | 628.51 KB | 1 年前3
共 706 条
- 1
- 2
- 3
- 4
- 5
- 6
- 71