Perry 是一个工具,能够将 TypeScript 代码编译为可在 10 个不同平台上运行的原生图形用户界面和命令行界面应用程序,实现跨平台开发。
#compiler
23 条相关内容
Gecko是一个基于广义LR(GLR)算法的快速解析器,能够自动处理语法错误并生成有用的错误信息。它通过创新的错误恢复机制,在解析过程中遇到语法错误时能够继续分析代码,为开发者提供更好的调试体验。
Fable 5 是 F# 编译器的一个重要版本更新,带来了性能改进和新特性。该版本优化了编译速度,增强了对现代 JavaScript 生态系统的支持,并改进了与 .NET 生态的互操作性。Fable 5 还引入了更好的错误处理和调试体验,使 F# 开发者能够更高效地将代码编译为 JavaScript。
Kdts 是一款优化优先的 TypeScript 编译器,它不在早期阶段擦除类型信息,而是在整个编译过程中利用类型来指导优化,实现仅凭未知类型无法完成的代码转换。目前仅支持 Bun 运行时,提供 fast(快速)和 opt(优化)两种模式。opt 模式以 Google Closure Compiler(的分支)为后端,执行类型驱动的深度优化,适用于经过精确类型标注的 TypeScript 子集。开发者已在包含密码学与去中心化身份代码的 kimlikdao-lib 项目中实际使用该工具。
Perry是一个用Rust语言实现的TypeScript编译器,能够将TypeScript代码编译到九个不同的目标平台,包括WebAssembly、JavaScript、Node.js等,提供高性能的编译体验。
CheerpJ 4.3是一款基于WebAssembly的Java虚拟机,允许开发者直接在浏览器中运行未经修改的Java应用程序,无需插件或本地Java安装,为传统Java应用提供了现代化的Web部署方案。
Rip语言是一种将代码编译为ES2022 JavaScript的编程语言,其特色在于内置了响应式编程功能,使开发者能够更便捷地处理数据流和状态变化。
Kefir 是一个用 Rust 编写的 C17/C23 编译器,支持 C23 标准的大部分功能,包括 typeof、属性、标签表达式、二进制字面量、十进制浮点数等特性。它能够生成 x86-64 汇编代码,并提供了完整的 C 预处理器实现。
别名
1.0了解编译器何时无法进行优化同样重要。本文探讨了别名(aliasing)这一概念,解释了编译器在存在别名情况下无法进行某些优化的原因,这对于编写高效代码至关重要。
Zig 词法分析器
1.0本文介绍了 Zig 编程语言的词法分析器实现,探讨了其设计原理、工作原理以及如何将源代码转换为标记流的过程,为理解 Zig 编译器的前端处理提供了技术细节。
Zig 解析器
2.0本文介绍了 Zig 编程语言的解析器实现,探讨了其语法解析的设计原理和技术细节。Zig 解析器负责将源代码转换为抽象语法树,是编译器前端的关键组成部分。
Zig AstGen 是 Zig 编译器中的一个关键组件,负责将抽象语法树(AST)转换为 Zig 中间表示(ZIR)。这一转换过程是编译流程中的重要步骤,为后续的语义分析和代码生成奠定基础。
Zig Sema 是 Zig 编译器的语义分析阶段,负责将 ZIR(Zig 中间表示)转换为 AIR(分析中间表示),执行类型检查、错误检测和语义验证等关键任务。
本文探讨了如何在 Zig 语言中利用编译期特性实现带标签联合子集,通过编译时计算确保类型安全,同时避免运行时开销。
借用检查器常见问题解答
1.0本文提供了处理Rust借用检查器的实用技巧和策略,帮助开发者更好地理解和应对所有权、借用和生命周期相关的编译错误。
本文探讨了编译器自举的概念,即使用编译器自身来编译其后续版本。这种技术可以确保编译器的可靠性和可移植性,是构建可信软件系统的重要方法。
本文探讨了运行 <code>cargo clippy</code> 时背后的工作原理,解释了 rustc_driver 在 Rust 编译器工具链中的核心作用,以及如何构建自定义的编译器驱动程序来扩展 Rust 的编译功能。
Swift类型检查器缓慢的根源在于十年前的设计选择,至今仍影响着编译性能。文章深入分析了这一历史决策如何导致现代Swift代码编译时的效率问题。
本文探讨了优化编译器如何跟踪中间表示指令的副作用,并对比了Cinder和JavaScriptCore等编译器采用的位集与抽象堆两种主要表示方法。作者通过分析不同编译器的实现细节,展示了副作用跟踪在指令重排、死代码消除等优化中的关键作用。
GDB JIT 接口
2.5GDB 的 JIT 接口允许运行时在编译函数时注册调试信息,使 GDB 能够显示 JIT 编译代码的符号和堆栈跟踪。文章介绍了传统接口需要生成内存中的 ELF/Mach-O 对象,以及新的自定义调试信息接口,并探讨了适配 Linux perf 映射接口的可能性。
多入口CFG设计难题
2.0本文探讨了ZJIT编译器在处理Ruby默认参数时面临的多入口控制流图设计困境,分析了三种可能的解决方案:特殊处理入口块、创建超级入口块或复制整个CFG,最终选择了超级入口块方案。
值编号是一种编译器优化技术,用于识别在编译时已知会在运行时产生相同值的指令,从而消除重复计算。它类似于静态单赋值形式,但能更有效地跨基本块进行公共子表达式消除。
Nanopass Framework 是一个用于构建编译器的领域特定语言,它通过将编译过程分解为一系列小型、可管理的转换步骤,帮助开发者创建更清晰、更易维护的编译器实现。