Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Jennifer - User Guide

Jennifer is a small, experimental, interpreted programming language. This guide covers everything you can do in Jennifer. Run jennifer version to see which build you’re on; the language history lives in docs/milestones.md.

Design stances

A handful of decisions shape every feature in Jennifer. Read them before the topical chapters - they explain why the language looks the way it does and rule out the “but why don’t you just…” reflex.

See docs/design-stances.md for the full seven-stance table.

Contents

  • Installing & running - building the binary, running a program, the interactive REPL, the inspection and formatting commands.
  • Your first program - a one-screen hello.j and a walkthrough of what each line does.
  • Editor & AI support - syntax highlighting for your editor, and the drop-in JENNIFER.md that lets an AI assistant write Jennifer.
  • Syntax - tokens, comments, identifier rules.
  • Types and values - the primitive types, variables and constants, scoping rules, and the compound types list and map.
  • Methods - declaring methods, parameters, return values, recursion, hoisting, the no-shadowing rule for builtins.
  • Control flow - operators, precedence, if / while / for / for-each.
  • Imports - use LIB; for libraries, import "file.j"; for source files, the library catalog.
  • Examples - small programs that exercise the language end-to-end.
  • Style guide - the canonical source style that jennifer fmt produces; the spacing/indentation rules, the names convention, the [] and {} literal layout.
  • Best practices - stylistic guidance and code-smell heuristics for writing Jennifer that ages well. Not enforced by the language; click through if you want the “why”.
  • docs/libraries/ - one reference page per standard library (io, convert, math, strings, …).
  • docs/modules/ - the Jennifer-coded modules that ship with the interpreter, brought in with import (ansi, csv, mime, redis, …).
  • docs/technical/ - interpreter internals for contributors.
  • docs/glossary.md - canonical project terminology. When two words could plausibly name the same concept (function vs method, library vs module, list vs array), this page picks the one the project uses everywhere.
  • docs/milestones.md - what’s shipped, what’s planned.