A compiled language, with its own tooling.
Jaguar is a compiled language with a syntax close to C: explicit types, classes, namespaces, and simple collections — with a runtime that keeps memory management out of reach of the code. A compiler, a build system, and a bindgen make up its toolchain.
Familiar syntax, a safer runtime.
Jaguar deliberately borrows several ideas from C while simplifying certain everyday aspects.
Classic compiler
jcc compiles your programs into native executables, with a --c89 mode for portability.
Explicit types
Classic C types and short aliases (i32, f64, u8…), normalized by the compiler.
Classes & inheritance
Fields, methods, constructors/destructors, virtual methods, override, and access control ($ / %).
Overloading & namespaces
Several functions with the same name, named arguments, and name mangling that avoids collisions between namespaces.
Simple collections
list, map, pair, container, and dynamic_list, with deliberately simple syntax.
Controlled runtime
No malloc/free or raw pointers exposed: the runtime manages strings, classes, and containers.
Close to C, with its own rules.
Jaguar embraces a few choices that deliberately set it apart from classic C.
Private by default, one symbol for the rest
A class member without a marker is private. $ makes it public, % makes it protected — checked by the compiler.
container<T> owns its data
A container automatically destroys the object it owns. Handy for a class allocated with new, without managing its release by hand.
Conditionless while, inclusive for_loop
Jaguar's while never takes a condition — you exit with break. for_loop includes its final bound.
Named arguments and default values
A parameter can have a default value, and be passed by name in any order — as long as no positional argument follows a named one.
Mangled namespaces, explicit output to C
A function inside a namespace is mangled to avoid collisions. @extern disables this mangling to call native C.
Core types
| Jaguar | Alias | Approximate C type |
|---|---|---|
int | i32 | int |
uint | u32 | unsigned int |
short / long | i16 / i64 | short / long long |
float / double | f32 / f64 | float / double |
char / byte | i8 / u8 | signed / unsigned char |
bool | — | _jBool |
string | — | Jaguar string object |
Three tools, one language.
jcc compiles, jbs orchestrates builds, jbg imports existing C APIs.
jcc, the Jaguar compiler
jcc is a classic compiler: it takes a Jaguar program and produces an executable. Under the hood, it goes through a transpilation step to C before calling a C compiler — an internal implementation detail rather than a constraint of the language.
jbs, the build orchestrator
jbs describes a project in a configuration file: compilation options, global macros, targets to build, and link steps.
jbg, importing a C API
jbg generates Jaguar declarations (@extern) from an existing C API, to call a C library without writing the signatures by hand.
The full documentation lives on its own site.
Compilation, syntax, classes, collections, the jcc:* standard library — each section is covered in detail separately.
Compilation & syntax
The jcc.py pipeline, --c89 mode, comments, preprocessor.
02Types, variables & operators
Core types, const, auto, literals, casts, and precedence.
03Functions
Overloading, default parameters, named arguments, @extern.
04Classes & structs
Access control, inheritance, virtual methods, constr/destr.
05Collections & memory
list, map, pair, container, dynamic_list, and runtime memory management.
06Tools: jcc, jbs, jbg
Compiler options, jbs configuration, jbg bindgen, and the jcc:* standard library.
Reference documentation
The full language documentation, as implemented by jcc.py, is available on the dedicated site.
GitHub releases, live.
This page queries the repository's releases on load. Until a first package is out, compiling from source remains the simplest route.
Compile and run a program
With Python and GCC installed.
-
git clone https://github.com/oscar-soirey/JaguarCC.gitFetches the jcc.py compiler and its sources. -
python jcc.py main.ja -o gameGeneratesgame.c, then calls GCC to produce thegameexecutable. -
python jcc.py main.ja > main.cWithout-o, only the generated C is written to standard output. -
python jcc.py main.ja --c89 -o gameGenerates C89-compatible C — Jaguar semantics stay identical.