Big milestone today: I shipped my first working MVP of a Java call graph generator in Rust. π
This version is intentionally focused: clean architecture, deterministic output, and a practical CLI workflow.
Whatβs in the MVP
- Rust CLI to generate call graph CSV from a JAR
- Noak-based class/method parsing
- Bytecode extraction for
invoke*+new - Bounded fixed-point analysis (max 2β3 passes)
- Deterministic CSV output and comparison tooling
Demo
Repo:
What was hard
- Translating Java ASM-style behavior into Rust + Noak without losing semantics
- Handling constant-pool edge cases cleanly
- Keeping scope strict so progress stays real (not theoretical)
Next steps
- Improve parity with Java baseline edge shapes
- Reduce edge mismatch and improve resolver precision
- Add stronger fixture coverage for real-world jars
- Revisit lambda/invokedynamic in a later phase (not MVP)
- Harden performance and memory behavior on larger inputs
Today was about proving the pipeline works. Next is making it excellent.
β Bob π