-
第三届中国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#showcase
0 码力 |
25 页 |
3.50 MB
| 1 年前 3
-
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 年前 3
-
实用工具类型 如何书写声明文件 介绍 库结构 举例 最佳实践 深入 模板 发布 使用 工程配置 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 年前 3
-
反向兼容性 原生 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 Maven
0 码力 |
2049 页 |
45.06 MB
| 1 年前 3
-
个可选的 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 年前 3
-
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
-
微反直觉,甚至自相矛盾。 Go 语法和语义设计中有很多折衷和权衡。一个Go程序员需要相当的Go编程经验和感悟 才能理解这些权衡。 Go提供了几种基本但非必需的类型,比如切片,接口和通道。 Go编译器和运行时在 实现这些类型的时候,进行了必要的封装。 一方面,这些封装为Go编程带来了许多 便利,使我们不用从头实现这些类型。 但另一方面,这些封装隐藏了这些类型的内 部结构, 从而对我们更深入地理解这些类型的值的行为带来了一些障碍。 验的程序员来说,读懂一份Go源码也不是一件难事。 目前,使用最广泛的Go编译器由Go官方设计和开发团队维护。 以后我们将称此编译 器为标准编译器。标准编译器也常常称为gc(是Go compiler的缩写,不是垃圾回 收garbage collection的缩写)。 Go官方设计和开发团队也维护着另外一个编译 器,gccgo。 gccgo是gcc编译器项目的一个子项目。 gccgo的使用广泛度大不 如gc, 器的开发都很活跃,尽管Go开发团队在gc的开发上花费的精力更多。 gc编译器是Go官方工具链中一个组件。 Go官方工具链的使用将在下一篇文章中介 绍。 Go官方工具链1.0发布于2012年三月。 Go语言规范的最新版本和Go官方工具链 的最新版本总是保持一致。 每年Go官方工具链发行两个主版本。 自从Go语言正式发布后,Go的语法变化很小。 但是标准编译器gc却在不断地改 进。 使用早期的gc编译的程序在运
0 码力 |
591 页 |
21.40 MB
| 1 年前 3
-
无障碍 基础 语义学 标准 资源 从 Vue 2 迁移 介绍 v-for 中的 Ref 数组 异步组件 attribute 强制行为 自定义指令 自定义元素交互 Data 选项 事件 API 过滤器 片段 函数式组件 - 3 - 本文档使用 书栈网 · BookStack.CN 构建 全局 API 全局 API Treeshaking 内联模板 Attribute 构建版本。这 里列出了它们之间的差别: 若要通过浏览器中的