Welcome to the Kite language implementation documentation. This directory contains detailed architectural and design documentation for developers working on the Kite interpreter.
Comprehensive guide to the resource dependency resolution mechanism:
-
What it covers:
- Observer pattern implementation for lazy dependency resolution
- 4-phase dependency resolution process
- Performance optimizations (batched cycle detection, counter-based re-evaluation)
- Complete sequence diagrams and examples
-
When to read this:
- Understanding how
@dependsOndecorator works - Debugging resource evaluation order issues
- Optimizing resource dependency performance
- Adding features that interact with resource dependencies
- Understanding how
-
Key classes:
Interpreter.resolveDependencies()- Main orchestrationDeferredObservable- Observer registryResourceStatement.notifyDependencyResolved()- Observer callbackDeferred- Unresolved dependency markerDependency- Resolved resource reference
How resource dependencies work inside loops with context-aware name resolution:
-
What it covers:
- Translation from user code (
vpc.name) to indexed names (vpc[0]) - Loop context tracking and dependency resolution
- Complete flow from source code to engine execution
- Parallel execution opportunities
- Translation from user code (
-
When to read this:
- Understanding loop-based resource creation
- Debugging "resource not found" errors in loops
- Understanding how dependencies are stored for looped resources
- Implementing features that work with resource loops
-
Key concepts:
- Context-aware resource resolution
- Fully qualified indexed names
- Dependency graph with loop iterations
- Engine execution order
| Task | Reference |
|---|---|
| Add a new decorator | See Interpreter constructor (line 115) |
| Understand resource evaluation | See DEPENDENCY_RESOLUTION.md |
| Debug cycle detection | See CycleDetection.detect() and dependency diagrams |
| Add observer patterns | See DeferredObservable implementation |
lang/src/main/java/io/kite/
βββ Runtime/
β βββ Interpreter.java # Main evaluation engine
β βββ DeferredObservable.java # Observer registry
β βββ CycleDetection.java # Dependency cycle detection
β βββ Values/
β βββ Deferred.java # Unresolved dependency marker
β βββ Dependency.java # Resolved reference wrapper
β βββ DeferredObserverValue.java # Observer interface
β
βββ Frontend/Parser/Expressions/
β βββ ResourceStatement.java # Resource AST node + observer
β
βββ TypeChecker/Types/Decorators/
βββ DependsOnDecorator.java # @dependsOn implementation
When adding new features or making significant changes:
- Update existing docs - If your change affects documented behavior
- Add diagrams - ASCII diagrams are preferred for terminal rendering
- Include examples - Show real Kite code demonstrating the feature
- Link from code - Add Javadoc
@seereferences to documentation files
- Use GitHub-flavored Markdown
- Include ASCII diagrams for architecture (they render everywhere)
- Add code examples with expected behavior
- Keep performance notes where relevant
- Reference specific line numbers for code locations (e.g.,
Interpreter.java:690)
- Main README:
/README.md- Project overview and getting started - Tests:
/lang/src/test/java/io/kite/- Examples of all language features - Type System:
TypeChecker/- Type inference and validation
This documentation is maintained alongside the codebase. If you find outdated information, please update it!