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 (an INTERFACE library under --header-only) so its compiled code can be linked into both the Python extension and the combined C shared library without being compiled twice.


C symbol stem <c_prefix>_<comp> — the prefix of every C identifier jm derives for a component (<pkg>_<comp>_create, <pkg>_<comp>_state_t, …). jm new <pkg> sets c_prefix to the package name, so the stem is <pkg>_<comp> (or just <comp> when the name already starts <pkg>_); jm new --no-c-prefix leaves it bare (<comp>). File names, CMake targets and Python names keep the plain component name.


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 <pkg>_<comp>_steps() (scaffolded, yours to edit) 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 <pkg>_<comp>_state_t struct; the Python type holds a pointer to it. See Stateful vs Pure.


pure function A C function with no persistent state, exposed as a module-level Python function with just-makeit function NAME --module M. Every call is independent; the C function takes only its input parameters and returns a result. (just-makeit object --no-state is different: it scaffolds an empty state struct you fill yourself — see Stateful vs Pure.)


step function The per-sample inner function — <pkg>_<comp>_step(state, x) — implemented by the user in <comp>_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 four tiers: AVX-512F (16 float lanes), AVX2+FMA (8 float lanes), NEON on aarch64 (4 float lanes — always active there, since NEON is part of the mandatory ARMv8-A baseline rather than an opt-in flag like AVX2/AVX-512), and scalar (1 lane, compiler-autovectorisable). The tier is detected at compile time; no runtime dispatch.


property A Python attribute (obj.name; read-only unless --writable) added to a generated type with just-makeit property. By default it is backed by C accessors <pkg>_<comp>_get_<name> / <pkg>_<comp>_set_<name> that you implement in <comp>_core.c; it can instead be backed by a struct field (--field, auto-implemented), a C expression (--expr), a buffer view (--buf-field), an [[enum]] (--enum), or a container (--value-type).


method An arbitrary C function exposed as a Python method on a generated type, added with just-makeit method. Parameters may be scalars, arrays or writable --out-param buffers; results may be a scalar, None, a per-call or variable-length array (--out-type, --variable-output, --multi-output), records (--result-field, --single, --record-dtype) or a zero-copy view (--borrow). See Extend commands.


just-makeit.toml The project manifest — the source of truth for all subsequent commands. just-makeit.toml holds [project] (name, version, c_prefix, schema) and top-level tables such as [[enum]]; each object's and module's sections live in the objects/<name>.toml / modules/<name>.toml fragments it includes (jm new --no-fragments keeps everything in one file). Every flag (--perf, --arg-type, --return-type, etc.) is recorded 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), the umbrella <pkg>.h, and the component CMakeLists.txt (reconciled, keeping your riders; your own CMake goes in <comp>_extra.cmake). 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> — by default it lifts hand-written bodies and splices them back into the fresh scaffold, so git stash first regardless (the splice is best-effort); pass --discard for a clean reset that drops them for good.


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, for a component the manifest does not declare (a declared one's binding is jm apply's, and bind refuses it). It handles scalar or opaque state, constructor params, getter/setter properties, single-argument custom verbs and variable-output methods; see just-makeit bind for usage and --check (CI gate). Multi-parameter methods, result structs and a libclang fallback are the remaining work on the roadmap.