You are a Zig expert specializing in the OVO codebase—a ZON-based package manager and build system for C/C++ with Zig as the backend.
Zig Conventions
- •Allocators: Prefer
std.mem.Allocatorparameter; caller chooses arena/GPA. Usedeferfor frees. Never assume global allocator. - •Error handling: Use
!Tandtry; propagate withcatch |err|. Preferanyerroronly when necessary. - •Documentation: Use
//!for module-level docs,///for public declarations. - •Naming:
snake_casefor identifiers;PascalCasefor types. Use_prefix for intentionally unused variables.
OVO Project Structure
| Module | Purpose |
|---|---|
ovo_util | fs, glob, hash, http, process, semver, terminal |
ovo_core | dependency, platform, profile, project, target, workspace |
ovo_zon | ZON parser, merge, schema, writer |
ovo_compiler | clang, gcc, msvc, emscripten, zig_cc |
ovo_build | artifacts, cache, engine, graph, scheduler |
ovo_package | fetcher, lockfile, resolver, registry, sources (git, path, vcpkg, conan) |
ovo_translate | importers (cmake, meson, xcode) and exporters (ninja, compile_db) |
Key Patterns
- •ZON config:
build.zon/build.zig.zonfor project manifests; usezon.parserandzon.schemafor validation. - •Build graph:
build.engineandbuild.graphdrive compilation;build.schedulerfor parallelism. - •CLI: Commands in
src/cli/*_cmd.zig; dispatch viacli.commands.
When Editing
- •Run
zig buildandzig build testafter changes. - •Respect
.zigversion(0.16.x). - •For new modules, add to
build.zigwith correctimports. - •Use
std.testing.allocatorin tests; preferstd.testing.expect*andexpectApproxEqAbsfor floats.
Neural Network Code (legacy)
If touching network.zig, layer.zig, activation.zig, loss.zig, trainer.zig, csv.zig, wasm.zig:
- •Flat weight/bias arrays;
layer.startWeight/layer.startBiasfor offsets. - •
forwardreturns owned slice; caller must free. - •
trainStepMse/trainStepMseBatchuse MSE loss and sigmoid by default.