Gecko is a fast GLR parser generator with automatic syntax error recovery. It uses a novel algorithm that combines GLR parsing with error recovery to handle syntax errors efficiently. The parser is designed for compilers and can parse complex grammars while providing helpful error messages.
#compiler
22 items
Fable 5.0.0, a new version of the F# to JavaScript compiler, has been released. The update includes various improvements and changes to the compiler.
kdts is an optimization-first TypeScript compiler that uses types throughout compilation for aggressive transformations. It supports Bun, with a fast mode wrapping bun build and an opt mode using Google Closure Compiler for type-driven optimizations on accurately typed code.
Perry is a TypeScript compiler written in Rust that targets nine different platforms. The tool aims to provide efficient compilation across multiple target environments.
CheerpJ 4.3 enables running unmodified Java applications directly in web browsers. The update includes performance improvements and enhanced compatibility with various Java libraries and frameworks.
Rip is a programming language that compiles to ES2022 JavaScript and features built-in reactivity. The language is designed to provide reactive programming capabilities directly within its syntax.
Kefir is a C17/C23 compiler project that supports modern C language standards. The project is hosted on a public repository and appears to be under active development.
Aliasing
1.0The article discusses aliasing in programming, explaining when compilers cannot optimize code due to potential memory overlaps. Understanding these limitations helps developers write more efficient code.
The article presents a tokenizer implementation in Zig programming language, demonstrating how to parse source code into tokens. It explains the tokenizer's design and provides practical code examples for lexical analysis.
Zig Parser
2.0The article discusses Zig's parser implementation, highlighting its design choices and technical approach to parsing the Zig programming language. It explains how the parser handles syntax and language features.
Zig AstGen is a compiler component that transforms Abstract Syntax Trees (AST) into Zig Intermediate Representation (ZIR). This intermediate representation serves as a lower-level format for further compilation stages in the Zig programming language.
Zig Sema is a compiler component that transforms ZIR (Zig Intermediate Representation) into AIR (Analysis Intermediate Representation). This process is part of Zig's compilation pipeline for semantic analysis and optimization.
Zig's comptime feature enables creating tagged union subsets by filtering types at compile time. This approach allows developers to generate specialized union types from larger unions while maintaining type safety. The technique demonstrates Zig's powerful compile-time metaprogramming capabilities.
The article provides frequently asked questions and practical advice for working with Rust's borrow checker. It offers tips and techniques to help developers understand and manage ownership and borrowing rules effectively.
The article discusses bootstrapping compilers, where a compiler is written in its own language and can compile itself. This approach creates self-hosting systems that can evolve independently of other toolchains.
The article explains how to build a custom rustc_driver, which is the compiler interface used by tools like Clippy. It discusses the process of creating a custom driver that can analyze and transform Rust code similar to how Clippy works.
Swift's type checker remains slow due to a 10-year-old design choice that continues to impact performance today. The article examines how this architectural decision from Swift's early development still affects compilation speed.
The article explores how optimizing compilers track instruction side effects to enable optimizations like dead code elimination and instruction reordering. It examines two main approaches: Cinder's bitset-based representation and JavaScriptCore's hierarchical abstract heap system. These effect tracking systems help compilers determine when operations can be safely reordered or eliminated.
GDB's JIT interface allows debugging JIT-compiled code by registering debug information. The traditional method requires generating in-memory ELF/Mach-O objects, while a newer custom interface uses specialized readers. Many projects implement these interfaces to enable proper debugging of JIT code.
The ZJIT compiler for Ruby faces a design challenge with multiple entrypoints in control-flow graphs due to Ruby's handling of default positional parameters. The article explores three approaches to address this conundrum, ultimately concluding with implementing a superblock approach.
Value numbering is a compiler optimization technique that identifies instructions known at compile-time to always produce the same value at run-time. It extends beyond static single assignment (SSA) form by enabling reuse of identical computations through hashing and mapping approaches.
Nanopass Framework 是一个用于构建编译器的领域特定语言,它通过将编译过程分解为一系列小型、可管理的转换步骤,帮助开发者创建更清晰、更易维护的编译器实现。