yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
2d775b54d
master
+# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Repository: shader-slang/slang - A shading language for GPU programming
Primary Language: C++ with custom Slang language
MCP Tool Available: mcp__deepwiki__ask_question with repoName: "shader-slang/slang"
Reference other instruction files as well:
- @.github/copilot-instructions.md
Build System and Common Commands
IMPORTANT: On Windows, always use cmake.exe (not cmake) to ensure proper GPU test execution. Using cmake without the .exe extension may invoke WSL's cmake, which cannot run GPU tests.
Building the Project
# Configure with default settings (Ninja Multi-Config) cmake --preset default# Configure with visual studio 2022 settings (Preferred on Windows) cmake.exe --preset vs2022# Build Release/Debug binaries. # It can take from 5 minutes to 20 minutes depending on the machine. cmake --build --preset debug# Debug binary cmake --build --preset release# Release binary # Build specific targets cmake --build --preset debug--target slangccmake --build --preset debug--target slang-test
PR Workflow
- Label your PR: Use "pr: non-breaking" (default) or "pr: breaking" (for ABI/language breaking changes)
- Include tests: Add regression tests as
.slangfiles undertests/
Testing
slang-test must run from repository root
# Run all tests with multiple servers (takes from 10 to 30 minutes) ./build/Release/bin/slang-test -use-test-server -server-count 8# Run specific test # The test file must be placed under "tests/" directory ./build/Release/bin/slang-test tests/path/to/test.slang# Run unit tests ./build/Release/bin/slang-test slang-unit-test-tool/
Writing Tests Without GPU:
- Use CPU compute:
//TEST:COMPARE_COMPUTE(filecheck-buffer=CHECK):-cpu -output-using-type - Use interpreter:
//TEST:INTERPRET(filecheck=CHECK): - Example test structure in
tests/language-feature/lambda/lambda-0.slang
SPIRV Validation:
- Set
SLANG_RUN_SPIRV_VALIDATION=1when usingslangc -target spirv - Don't use system's
spirv-valtool (may be outdated)
Slang Command Line Usage
IMPORTANT: Slang uses single dashes for multi-character options (not double dashes like most tools):
- Use
-help(not--help) - Use
-target spirv(not--target spirv) - Use
-dump-ir(not--dump-ir) - Use
-stage compute(not--stage compute)
AVOID These Debugging Options
DO NOT USE these options as they are unmaintained, unreliable or unnecessary:
- slangc with
-dump-ast,-dump-intermediate-prefix,-dump-intermediates,-dump-ir-ids,-serial-ir,-dump-repro,-load-reproand-extract-repro. - slang-test with
-categoryand-api
Architecture Overview
Core Components
Compiler Pipeline:
- Lexer (
source/compiler-core/slang-lexer.cpp): Tokenizes source code - Preprocessor (
source/slang/slang-preprocessor.cpp): Handles #include, macros, conditionals - Parser (
source/slang/slang-parser.cpp): Recursive descent parser producing AST - Semantic Checker (
source/slang/slang-check.cpp): Type checking, name resolution, validation - IR Generation (
source/slang/slang-lower-to-ir.cpp): Converts AST to Slang IR - IR Passes (
source/slang/slang-ir-*.cpp): Optimization and lowering passes - Code Emission (
source/slang/slang-emit-*.cpp): Target-specific code generation
Key Directories:
source/core/: Core utilities (strings, containers, file system, platform abstractions)source/compiler-core/: Compiler infrastructure (diagnostics, downstream compilers)source/slang/: Main compiler implementation (frontend, IR, backend)source/slangc/: Command-line compiler tooltools/: Development and testing toolsinclude/: Public API headers (slang.h,slang-gfx.h)external/: - Third-party dependencies and submodulesprelude/: - Built-in language definitions and standard libraryexamples/: - Sample programs demonstrating Slang usagetests/: - Comprehensive test suitedocs/: - Project documentation
Compilation Model
Key Concepts:
- CompileRequest: Bundles options, input files, and code generation requests
- TranslationUnit: Collection of source files (HLSL: one per file, Slang: all files together)
- EntryPoint: Function name + pipeline stage to compile
- Target: Output format (DXIL, SPIR-V, etc.) + capability profile
Supported Targets:
- Direct3D 11/12 (HLSL output)
- Vulkan (SPIR-V, GLSL output)
- Metal (MSL output) - experimental
- WebGPU (WGSL output) - experimental
- CUDA/OptiX (C++ output)
- CPU (C++ output, executables, libraries)
Development Workflow
Adding New Language Features
- Update lexer for new tokens (
source/compiler-core/slang-lexer.cpp) - Extend parser for new syntax (
source/slang/slang-parser.cpp) - Add semantic analysis (
source/slang/slang-check-*.cpp) - Implement IR generation (
source/slang/slang-ir-*.cpp) - Add code generation for each target backend (
source/slang/slang-emit-*.cpp) - Write comprehensive tests under
tests/
Common Development Tasks
- Adding an IR instruction: Update the Lua definition files in
source/slang/slang-ir-insts.lua, then regenerate - Adding a built-in function: Add to appropriate module in
prelude/ - Adding a new target: Implement new emitter in
source/slang/slang-emit-*.cpp
Debugging tools
slangc with -dump-ir
slangc with -dump-ir option is most efficient way to investigate problems that can be observed at IR level.
It will often require a use of -target and the most common combination is -dump-ir -target spirv-asm.
When -dump-ir is used without -target, the compilation process may stop earlier than it should be.
Since it dumps many lines, it will be good to store the result into a file for a further investigation.
The dump prints multiple sections which of each is separated by ### header.
Each section visualizes the IR state on multiple steps during the compilation.
It is necessary to differentiate the information on one section from one section, because the issue might be observed at a specific section.
You can also modify Slang code and insert a call to dumpIRToString() at any point of interest to dump any part of the IR
to string. You can then write that string to a temp file with File::writeAllText() to analyze what is going on.
When checking the IR dump, look for type consistency or logical errors in the IR to locate the potential transformation pass at fault. Focus on passes that makes significant and systematic changes to the IR, such as specialization, inlining, type legalization, and buffer lowering passes. You may iterate this process multiple times to narrow down the issue.
InstTrace
Note that any issues in the generated target code could stem from IR passes or even the front-end type checking early in the pipeline, and you need to focus on tracking the root cause that breaks the consistency/invariants/assumptions of the IR instead of putting in band-aid fixes in the later passes or in the emit logic. The philosphy of the compiler is to keep the target code emission logic as simple and direct as possible, and most of the heavy lifting code transform is done in the IR passes.
If you encounter a bug related to a problematic instruction, it is often useful to trace the location where the instruction is created.
You can use the extras/insttrace.py script to do this. For example, during debugging you find that an instruction with _debugUID=1234
is wrong, you can run the following command to trace the callstack where the instruction is created:
# From workspace root: python3 ./extras/insttrace.py 1234 ./build/Debug/bin/slangc tests/my-test.slang-target spirv
slangc with -target spirv-asm
slangc with -target spirv-asm is the most common way to see how the given slang shader is compiled into spirv code.
When an environment variable, SLANG_RUN_SPIRV_VALIDATION=1, is set, it will also run a static SPIRV valdiation.
You can skip the validation, if needed, with a command-line argument, -skip-spirv-validation.
When SPIRV validation fails, the actual spirv code is not printed.
You can skip the validation with the option and print the spirv code even when it fails the validation.
slangc with -target spirv-asm -emit-spirv-via-glsl
By default, slang uses -emit-spirv-directly and slang emits from slang shader to spirv directly.
When -emit-spirv-via-glsl is used, slang will translate the input slang shader to glsl and let glslang to generate spirv code.
This can be useful when we want to generate a reference spirv code for a comparison.
IR System
- Slang uses a custom SSA-based IR (not LLVM)
- IR instructions defined in
slang-ir-insts.h(generated from Lua) - Extensive IR pass framework for optimization and lowering
- Target-specific legalization passes before code emission
Language Server
- Language Server Protocol implementation in
source/slang/slang-language-server.cpp - Supports IntelliSense, completion, diagnostics, formatting
- Used by VS Code and Visual Studio extensions
Module System
- Slang supports separate compilation via modules
- Modules can be compiled to IR and linked at runtime
- Optional obfuscation for distributed modules
- Core language features defined as modules in
prelude/
Generated files
- The enum values starting with
kIROp_are defined in a generated file,build/source/slang/fiddle/slang-ir-insts-enum.h.fiddle
Git commit message
- Don't mention Claude on the commit message
Cross-Platform Considerations
Supported Platforms: Windows (x64/ARM64), Linux (x64/ARM64), macOS (x64/ARM64), WebAssembly
Platform Abstractions: Use utilities in source/core/ for file system, process management, platform detection
Graphics APIs: Code generation supports all major APIs but runtime testing requires appropriate drivers/SDKs
Additional documents
The most important documents are the end-user facing user-guide documents.
And it can be found under docs/user-guide/.
There is a dedicated repo, https://github.com/shader-slang/spec.git
If needed, you should clone the repo under external/ directory.
Formal Specification (external/spec/specification/)
specification/index.bs- Main specification documentspecification/types.md- Type system specificationspecification/generics.md- Generics and templates specificationspecification/interfaces.md- Interface system specificationspecification/expressions.md- Expression evaluation rulesspecification/declarations.md- Declaration syntax and semanticsspecification/statements.md- Statement execution semanticsspecification/checking.md- Type checking rulesspecification/conversion.md- Type conversion rulesspecification/overloading.md- Overload resolutionspecification/lookup.md- Name lookup rulesspecification/modules.md- Module systemspecification/capabilities.md- Capability systemspecification/autodiff.md- Automatic differentiationspecification/attributes.md- Attribute systemspecification/lexical.md- Lexical analysisspecification/parsing.md- Parsing rulesspecification/preprocessor.md- Preprocessor behaviorspecification/execution.md- Execution modelspecification/extensions.md- Language extensionsspecification/subtyping.md- Subtyping relationshipsspecification/visibility.md- Visibility and access control
Feature Proposals (external/spec/proposals/)
Template and Active Proposals:
000-template.md- Template for new proposals001-where-clauses.md-whereclauses for generic constraints (Partially implemented)002-type-equality-constraints.md- Type equality constraints in generics003-atomic-t.md- Atomic operations and types004-initialization.md- Initialization syntax improvements005-write-only-textures.md- Write-only texture support007-variadic-generics.md- Variadic generic types and functions (Implemented)008-tuples.md- Tuple types built on variadic generics (Implemented)009-ifunc.md- Function interface types for callbacks010-new-diff-type-system.md- New automatic differentiation type system011-structured-binding.md- Structured binding declarations012-language-version-directive.md- Language version directives013-aligned-load-store.md- Aligned memory load/store operations014-extended-length-vectors.md- Extended vector length support015-descriptor-handle.md- Descriptor handle types016-slangpy.md- Python binding for Slang017-shader-record.md- Shader record data structures018-packed-data-intrinsics.md- Packed data manipulation intrinsics019-cooperative-vector.md- Cooperative vector operations020-stage-switch.md- Stage-specific code switching022-C++20-migration.md- C++20 feature migration023-cooperative-matrix.md- Cooperative matrix operations024-any-dyn-types.md- Any and dynamic types025-lambda-1.md- Lambda expressions with immutable capture (In Implementation)026-error-handling.md- Error handling mechanisms027-tuple-syntax.md- Tuple syntax improvements028-cooperative-matrix-2.md- Extended cooperative matrix support029-conditional.md- Conditional compilation features030-interface-method-default-impl.md- Default interface method implementations (In Experiment)
1+# CLAUDE.md 2 3This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. 4 5**Repository**: shader-slang/slang - A shading language for GPU programming 6**Primary Language**: C++ with custom Slang language 7**MCP Tool Available**: `mcp__deepwiki__ask_question` with repoName: "shader-slang/slang" 8 9Reference other instruction files as well: 10 11- @.github/copilot-instructions.md 12 13## Build System and Common Commands 14 15**IMPORTANT:** On Windows, always use `cmake.exe` (not `cmake`) to ensure proper GPU test execution. Using `cmake` without the `.exe` extension may invoke WSL's cmake, which cannot run GPU tests. 16 17### Building the Project 18 19``` bash 20# Configure with default settings (Ninja Multi-Config) 21cmake --preset default 22 23# Configure with visual studio 2022 settings (Preferred on Windows) 24cmake.exe --preset vs2022 25 26# Build Release/Debug binaries. 27# It can take from 5 minutes to 20 minutes depending on the machine. 28cmake --build --preset debug # Debug binary 29cmake --build --preset release # Release binary 30 31# Build specific targets 32cmake --build --preset debug --target slangc 33cmake --build --preset debug --target slang-test 34``` 35 36### PR Workflow 37 381. **Label your PR**: Use "pr: non-breaking" (default) or "pr: breaking" (for ABI/language breaking changes) 392. **Include tests**: Add regression tests as `.slang` files under `tests/` 40 41### Testing 42 43slang-test must run from repository root 44 45``` bash 46# Run all tests with multiple servers (takes from 10 to 30 minutes) 47./build/Release/bin/slang-test -use-test-server -server-count 8 48 49# Run specific test 50# The test file must be placed under "tests/" directory 51./build/Release/bin/slang-test tests/path/to/test.slang 52 53# Run unit tests 54./build/Release/bin/slang-test slang-unit-test-tool/ 55``` 56 57**Writing Tests Without GPU**: 58 59- Use CPU compute: `//TEST:COMPARE_COMPUTE(filecheck-buffer=CHECK):-cpu -output-using-type` 60- Use interpreter: `//TEST:INTERPRET(filecheck=CHECK):` 61- Example test structure in `tests/language-feature/lambda/lambda-0.slang` 62 63**SPIRV Validation**: 64 65- Set `SLANG_RUN_SPIRV_VALIDATION=1` when using `slangc -target spirv` 66- Don't use system's `spirv-val` tool (may be outdated) 67 68### Slang Command Line Usage 69 70**IMPORTANT:** Slang uses single dashes for multi-character options (not double dashes like most tools): 71 72- Use `-help` (not `--help`) 73- Use `-target spirv` (not `--target spirv`) 74- Use `-dump-ir` (not `--dump-ir`) 75- Use `-stage compute` (not `--stage compute`) 76 77### AVOID These Debugging Options 78 79**DO NOT USE** these options as they are unmaintained, unreliable or unnecessary: 80 81- slangc with `-dump-ast`, `-dump-intermediate-prefix`, `-dump-intermediates`, `-dump-ir-ids`, `-serial-ir`, `-dump-repro`, `-load-repro` and `-extract-repro`. 82- slang-test with `-category` and `-api` 83 84## Architecture Overview 85 86### Core Components 87 88**Compiler Pipeline**: 89 90- **Lexer** (`source/compiler-core/slang-lexer.cpp`): Tokenizes source code 91- **Preprocessor** (`source/slang/slang-preprocessor.cpp`): Handles #include, macros, conditionals 92- **Parser** (`source/slang/slang-parser.cpp`): Recursive descent parser producing AST 93- **Semantic Checker** (`source/slang/slang-check.cpp`): Type checking, name resolution, validation 94- **IR Generation** (`source/slang/slang-lower-to-ir.cpp`): Converts AST to Slang IR 95- **IR Passes** (`source/slang/slang-ir-*.cpp`): Optimization and lowering passes 96- **Code Emission** (`source/slang/slang-emit-*.cpp`): Target-specific code generation 97 98**Key Directories**: 99 100- `source/core/`: Core utilities (strings, containers, file system, platform abstractions) 101- `source/compiler-core/`: Compiler infrastructure (diagnostics, downstream compilers) 102- `source/slang/`: Main compiler implementation (frontend, IR, backend) 103- `source/slangc/`: Command-line compiler tool 104- `tools/`: Development and testing tools 105- `include/`: Public API headers (`slang.h`, `slang-gfx.h`) 106- `external/`: - Third-party dependencies and submodules 107- `prelude/`: - Built-in language definitions and standard library 108- `examples/`: - Sample programs demonstrating Slang usage 109- `tests/`: - Comprehensive test suite 110- `docs/`: - Project documentation 111 112### Compilation Model 113 114**Key Concepts**: 115 116- **CompileRequest**: Bundles options, input files, and code generation requests 117- **TranslationUnit**: Collection of source files (HLSL: one per file, Slang: all files together) 118- **EntryPoint**: Function name + pipeline stage to compile 119- **Target**: Output format (DXIL, SPIR-V, etc.) + capability profile 120 121**Supported Targets**: 122 123- Direct3D 11/12 (HLSL output) 124- Vulkan (SPIR-V, GLSL output) 125- Metal (MSL output) - experimental 126- WebGPU (WGSL output) - experimental 127- CUDA/OptiX (C++ output) 128- CPU (C++ output, executables, libraries) 129 130## Development Workflow 131 132### Adding New Language Features 133 1341. Update lexer for new tokens (`source/compiler-core/slang-lexer.cpp`) 1352. Extend parser for new syntax (`source/slang/slang-parser.cpp`) 1363. Add semantic analysis (`source/slang/slang-check-*.cpp`) 1374. Implement IR generation (`source/slang/slang-ir-*.cpp`) 1385. Add code generation for each target backend (`source/slang/slang-emit-*.cpp`) 1396. Write comprehensive tests under `tests/` 140 141### Common Development Tasks 142 143- **Adding an IR instruction**: Update the Lua definition files in `source/slang/slang-ir-insts.lua`, then regenerate 144- **Adding a built-in function**: Add to appropriate module in `prelude/` 145- **Adding a new target**: Implement new emitter in `source/slang/slang-emit-*.cpp` 146 147### Debugging tools 148 149#### slangc with `-dump-ir` 150 151slangc with `-dump-ir` option is most efficient way to investigate problems that can be observed at IR level. 152 153It will often require a use of `-target` and the most common combination is `-dump-ir -target spirv-asm`. 154When `-dump-ir` is used without `-target`, the compilation process may stop earlier than it should be. 155 156Since it dumps many lines, it will be good to store the result into a file for a further investigation. 157The dump prints multiple sections which of each is separated by `### ` header. 158Each section visualizes the IR state on multiple steps during the compilation. 159It is necessary to differentiate the information on one section from one section, because the issue might be observed at a specific section. 160 161You can also modify Slang code and insert a call to `dumpIRToString()` at any point of interest to dump any part of the IR 162to string. You can then write that string to a temp file with `File::writeAllText()` to analyze what is going on. 163 164When checking the IR dump, look for type consistency or logical errors in the IR to locate the potential transformation 165pass at fault. Focus on passes that makes significant and systematic changes to the IR, such as specialization, inlining, 166type legalization, and buffer lowering passes. You may iterate this process multiple times to narrow down the issue. 167 168#### InstTrace 169 170Note that any issues in the generated target code could stem from IR passes or even the front-end type checking 171early in the pipeline, and you need to focus on tracking the root cause that breaks the consistency/invariants/assumptions 172of the IR instead of putting in band-aid fixes in the later passes or in the emit logic. The philosphy of the compiler is to 173keep the target code emission logic as simple and direct as possible, and most of the heavy lifting code transform is done 174in the IR passes. 175 176If you encounter a bug related to a problematic instruction, it is often useful to trace the location where the instruction is created. 177You can use the `extras/insttrace.py` script to do this. For example, during debugging you find that an instruction with `_debugUID=1234` 178is wrong, you can run the following command to trace the callstack where the instruction is created: 179 180``` bash 181# From workspace root: 182python3 ./extras/insttrace.py 1234 ./build/Debug/bin/slangc tests/my-test.slang -target spirv 183``` 184 185#### slangc with `-target spirv-asm` 186 187slangc with `-target spirv-asm` is the most common way to see how the given slang shader is compiled into spirv code. 188 189When an environment variable, `SLANG_RUN_SPIRV_VALIDATION=1`, is set, it will also run a static SPIRV valdiation. 190 191You can skip the validation, if needed, with a command-line argument, `-skip-spirv-validation`. 192When SPIRV validation fails, the actual spirv code is not printed. 193You can skip the validation with the option and print the spirv code even when it fails the validation. 194 195#### slangc with `-target spirv-asm -emit-spirv-via-glsl` 196 197By default, slang uses `-emit-spirv-directly` and slang emits from slang shader to spirv directly. 198When `-emit-spirv-via-glsl` is used, slang will translate the input slang shader to glsl and let glslang to generate spirv code. 199This can be useful when we want to generate a reference spirv code for a comparison. 200 201### IR System 202 203- Slang uses a custom SSA-based IR (not LLVM) 204- IR instructions defined in `slang-ir-insts.h` (generated from Lua) 205- Extensive IR pass framework for optimization and lowering 206- Target-specific legalization passes before code emission 207 208### Language Server 209 210- Language Server Protocol implementation in `source/slang/slang-language-server.cpp` 211- Supports IntelliSense, completion, diagnostics, formatting 212- Used by VS Code and Visual Studio extensions 213 214### Module System 215 216- Slang supports separate compilation via modules 217- Modules can be compiled to IR and linked at runtime 218- Optional obfuscation for distributed modules 219- Core language features defined as modules in `prelude/` 220 221### Generated files 222 223- The enum values starting with `kIROp_` are defined in a generated file, `build/source/slang/fiddle/slang-ir-insts-enum.h.fiddle` 224 225### Git commit message 226 227- Don't mention Claude on the commit message 228 229## Cross-Platform Considerations 230 231**Supported Platforms**: Windows (x64/ARM64), Linux (x64/ARM64), macOS (x64/ARM64), WebAssembly 232 233**Platform Abstractions**: Use utilities in `source/core/` for file system, process management, platform detection 234 235**Graphics APIs**: Code generation supports all major APIs but runtime testing requires appropriate drivers/SDKs 236 237## Additional documents 238 239The most important documents are the end-user facing user-guide documents. 240And it can be found under `docs/user-guide/`. 241 242There is a dedicated repo, https://github.com/shader-slang/spec.git 243If needed, you should clone the repo under `external/` directory. 244 245### Formal Specification (`external/spec/specification/`) 246 247- `specification/index.bs` - Main specification document 248- `specification/types.md` - Type system specification 249- `specification/generics.md` - Generics and templates specification 250- `specification/interfaces.md` - Interface system specification 251- `specification/expressions.md` - Expression evaluation rules 252- `specification/declarations.md` - Declaration syntax and semantics 253- `specification/statements.md` - Statement execution semantics 254- `specification/checking.md` - Type checking rules 255- `specification/conversion.md` - Type conversion rules 256- `specification/overloading.md` - Overload resolution 257- `specification/lookup.md` - Name lookup rules 258- `specification/modules.md` - Module system 259- `specification/capabilities.md` - Capability system 260- `specification/autodiff.md` - Automatic differentiation 261- `specification/attributes.md` - Attribute system 262- `specification/lexical.md` - Lexical analysis 263- `specification/parsing.md` - Parsing rules 264- `specification/preprocessor.md` - Preprocessor behavior 265- `specification/execution.md` - Execution model 266- `specification/extensions.md` - Language extensions 267- `specification/subtyping.md` - Subtyping relationships 268- `specification/visibility.md` - Visibility and access control 269 270### Feature Proposals (`external/spec/proposals/`) 271 272**Template and Active Proposals:** 273 274- `000-template.md` - Template for new proposals 275- `001-where-clauses.md` - `where` clauses for generic constraints (Partially implemented) 276- `002-type-equality-constraints.md` - Type equality constraints in generics 277- `003-atomic-t.md` - Atomic operations and types 278- `004-initialization.md` - Initialization syntax improvements 279- `005-write-only-textures.md` - Write-only texture support 280- `007-variadic-generics.md` - Variadic generic types and functions (Implemented) 281- `008-tuples.md` - Tuple types built on variadic generics (Implemented) 282- `009-ifunc.md` - Function interface types for callbacks 283- `010-new-diff-type-system.md` - New automatic differentiation type system 284- `011-structured-binding.md` - Structured binding declarations 285- `012-language-version-directive.md` - Language version directives 286- `013-aligned-load-store.md` - Aligned memory load/store operations 287- `014-extended-length-vectors.md` - Extended vector length support 288- `015-descriptor-handle.md` - Descriptor handle types 289- `016-slangpy.md` - Python binding for Slang 290- `017-shader-record.md` - Shader record data structures 291- `018-packed-data-intrinsics.md` - Packed data manipulation intrinsics 292- `019-cooperative-vector.md` - Cooperative vector operations 293- `020-stage-switch.md` - Stage-specific code switching 294- `022-C++20-migration.md` - C++20 feature migration 295- `023-cooperative-matrix.md` - Cooperative matrix operations 296- `024-any-dyn-types.md` - Any and dynamic types 297- `025-lambda-1.md` - Lambda expressions with immutable capture (In Implementation) 298- `026-error-handling.md` - Error handling mechanisms 299- `027-tuple-syntax.md` - Tuple syntax improvements 300- `028-cooperative-matrix-2.md` - Extended cooperative matrix support 301- `029-conditional.md` - Conditional compilation features 302- `030-interface-method-default-impl.md` - Default interface method implementations (In Experiment)