Skip to content

Glossary

Definitions for terms used throughout these docs.


OBJECT library A CMake library type (add_library(foo OBJECT ...)) that compiles source files to object files without linking them into an archive or shared library. Each component in a just-makeit project is an OBJECT library so its compiled code can be linked into both the Python extension and the combined C shared library without being compiled twice.


dispatch loop The outer loop that drives a DSP object over a block of samples — calling step() once per sample and managing any scratch buffer or SIMD stride. In generated projects this is <obj>_steps() (hand-written) or the body produced by JM_DEFINE_STEPS (macro-generated).


stateful object An object with persistent state between calls: delay lines, coefficient arrays, running accumulators. The default just-makeit object shape. State lives in a heap-allocated <obj>_state_t struct; the Python type holds a pointer to it. See Stateful vs Pure.


pure function An object shape with no persistent state. Every call is independent; the C function takes only its input parameters and returns a result. Scaffolded with --no-state or other flags that suppress state generation.


step function The per-sample inner function — <obj>_step(state, x) — implemented by the user in <obj>_core.h as a static inline for maximum inlining opportunity. step() is the algorithm; the dispatch loop calls it.


module subpackage A Python extension module that groups multiple types into one .so file and one subpackage import (from my_pkg.filter import Fir, Biquad). Created with just-makeit module; types added with just-makeit object --module.


standalone object A Python type with its own .so file and top-level package import (from my_pkg import Gain). Created with just-makeit object (no --module).


extension module The Python C extension — the compiled .so or .pyd file that CPython loads when you import. In standalone mode each object has its own extension module. In module mode multiple types share one.


perf tier The SIMD instruction set selected when building with -DENABLE_SIMD=ON. jm_simd.h supports three tiers: AVX-512F (16 floats/cycle), AVX2+FMA (8 floats/cycle), and scalar (1 float/cycle, compiler-autovectorisable). The tier is detected at compile time; no runtime dispatch.


property A Python accessor pair (get_<name> / set_<name>) added to a generated type with just-makeit property. Can be backed by a struct field (--field, auto- implemented) or implemented manually in the C extension.


method An arbitrary C function exposed as a Python method on a generated type, added with just-makeit method. Supports scalar and array parameters, and void or scalar return types.


just-makeit.toml The project manifest — the source of truth for all subsequent commands. Records the project name, version, all declared objects and modules, and every flag (--perf, --arg-type, --return-type, etc.) so that just-makeit add and just-makeit apply regenerate files consistently with the original scaffold.


glue file A generated file that is rebuilt from the manifest on every just-makeit apply: <comp>_ext.c (CPython binding), <comp>.pyi (type stub), and CMakeLists.txt. Editing the TOML propagates straight into the glue. <comp>_core.h is mixed: apply injects a missing method/property declaration, but the inline step() body and the state struct are sacred — never re-rendered (a new state field reaches the struct via a rebuild: jm add / jm regenerate).


sacred file A generated file that apply never overwrites once it exists — <comp>_core.c (your steps() and lifecycle bodies) and the generated tests. To intentionally rebuild a sacred file from the manifest, use just-makeit regenerate <comp> (git stash first, since it discards hand-written bodies).


bind The jm bind command reads a hand-written <comp>_core.h and synthesises the CPython binding (<comp>_ext.c and <comp>.pyi) from it — the "point at your C, get Python" path. The current MVP handles the simple processor shape (scalar state struct, scalar-in/scalar-out step()). See just-makeit bind for usage and --check (CI gate). Expansion to methods, init_params, opaque state, and variable-output is the active work on the roadmap.