starbaser
09/06/2026, 3:19 AMbaml-sam
09/08/2026, 6:16 PMavery (BAML)
09/08/2026, 8:56 PMstarbaser
09/08/2026, 9:14 PMstarbaser
09/08/2026, 9:15 PMstarbaser
09/08/2026, 9:16 PMstarbaser
09/08/2026, 9:17 PMbaml-sam
09/09/2026, 1:51 AMstarbaser
09/09/2026, 5:17 AMbaml-sam
09/09/2026, 6:31 PM@@ingot comes in?)
- you also have a symbolic execution compiler stage that is implemented by consuming the MIR
- and then you have custom bytecode extensions, and your own symbolic execution VM
Is that right?starbaser
09/09/2026, 9:25 PM@ingot / @@ingot annotation layer is just source preprocessing that harvests annotation data for code generation and runtime use, where it's exposed through _meta.ingot. It's intentionally general purpose, I use it for MCP annotations, CLI help/usage, and other external integrations.
I avoid syntax extensions wherever possible, and no custom bytecode extension is needed for this approach. My earlier “custom bytecode” wording muddied that, sorry.
[§4.1 of the SymCC paper](https://www.s3.eurecom.fr/docs/usenixsec20_symcc.pdf) is relevant here: the compiler prepares instrumentation, but the symbolic computations happen when the program executes. The program still executes concretely; alongside that, the instrumentation builds symbolic expressions and records the conditions that led down the actual path.
That's the principle I'm borrowing, rather than SymCC's execution target. SymCC instruments LLVM IR and ultimately produces native code; here, BEX remains the concrete executor. The compiler prepares symbolic transfer information tied to the BEX instructions it emits, and an opt-in extension tracks the corresponding symbolic state during execution. So I do make compiler/runtime changes, but not a separate replacement VM or a new symbolic language constructs.
This is also where the MIR interface helps. I want a small, compiler-owned interface to the resolved program and its semantics, rather than independently reconstructing those facts. I must avoid depending on the internal MIR detail, or else I lose that shared boundary to implement the symbolic machinery and other consumers like packing against.
And one correction to the first point: the target is general concolic execution of BAML programs, not specifically bags of tensors
Training is an application of it. BAML can describe data preparation, packing, model composition and control, while bindings call ordinary PyTorch through Python and still owns tensor operations and autograd.
So: ordinary BAML is the program being analyzed, the compiler prepares the symbolic tracking, and BEX executes it with that tracking enabled when requested.starbaser
09/09/2026, 9:53 PMRectangleDimensions. Packing is evaluating CenterRectangle symbolically, leaving two categories of inputs missing: input tensors (symbolic expressions whose inputs are ffi functions), and the gradients, which pytorch supplies.