Layer Hierarchy
Presentar's vertical architecture.
Layer Diagram
┌─────────────────────────────────────────────────────────────────┐
│ Layer 9: App Runtime │
│ - YAML parser, .apr/.ald loaders, Pacha integration │
├─────────────────────────────────────────────────────────────────┤
│ Layer 8: Presentar (Reactive UI Framework) │
│ - Widget tree, layout engine, event dispatch, state │
├─────────────────────────────────────────────────────────────────┤
│ Layer 7: Trueno-Viz (GPU Rendering Primitives) │
│ - Paths, fills, strokes, text, charts, WGSL shaders │
├─────────────────────────────────────────────────────────────────┤
│ Layer 6: Trueno (SIMD/GPU Compute) │
│ - Tensor ops, backend dispatch, memory management │
└─────────────────────────────────────────────────────────────────┘
Layer 6: Trueno
Foundation layer
- SIMD-accelerated tensor operations
- Memory management
- Backend abstraction (CPU/GPU)
Layer 7: Trueno-Viz
Rendering primitives
- Paths, fills, strokes
- Text rendering
- WGSL shaders
Layer 8: Presentar
UI Framework
- Widget trait and tree
- Layout engine
- Event system
- State management
Layer 9: App Runtime
Application layer
- YAML manifest parsing
- Model loading (.apr)
- Dataset loading (.ald)
- Pacha registry integration
Dependencies Flow
App Runtime
↓ uses
Presentar
↓ uses
Trueno-Viz
↓ uses
Trueno
Verified Test
#[test]
fn test_layer_independence() {
// Each layer can be tested independently
use presentar_core::{Size, Constraints};
// Core layer works without higher layers
let c = Constraints::loose(Size::new(100.0, 100.0));
assert_eq!(c.biggest(), Size::new(100.0, 100.0));
}