Files
bara-lang/docs/ROADMAP.md
T
dimgigov b67962dbba Phase 5/6 complete: Transients, meta/with-meta, instance?
T5.5 Transients (transient/persistent!/conj!/assoc!)
  - Mutable builder for batch vector/map operations
  - Use with let bindings for proper ordering

T6.10 meta/with-meta — metadata on any CljVal via ref object field
T6.11 instance? — type predicate (instance? :integer 42)

Also marked T9.1 Atoms as done (already implemented earlier)

86 tests pass, all examples work.
Phases 0-6 now complete. Phase 7: 2/4 tasks done.
2026-05-08 19:48:35 +03:00

3.5 KiB

Development Roadmap

Phase 0: Compiler Core

  • Clojure Reader (EDN parser)
  • Reader supports: lists (), vectors [], maps {}, strings, keywords, symbols, numbers, booleans, nil
  • Reader supports: quote ', syntax-quote `, unquote ~, unquote-splicing ~@
  • Reader supports: comments ;, read-all
  • AST → Nim Emitter
  • CLI (compile, run, read, repl)
  • Special forms: def, defn, fn, let, if, do, quote
  • Special forms: when, cond
  • Arithmetic operators: +, -, *, /
  • Comparison operators: =, not=, not, <, >, <=, >=
  • Core functions: println, map, filter, reduce
  • Runtime type system: CljVal with nil, bool, int, float, string, keyword, symbol, list, vector, map, fn, atom

Phase 1: Macro System

  • macroexpand, macroexpand-1
  • syntax-quote, unquote, unquote-splicing
  • gensym
  • defmacro (user-defined macros)
  • Built-in macros: ->, ->>, and, or, when, when-not, cond
  • Built-in macros: cond->, cond->>, doto, as->, some->, some->>
  • Built-in macros: for, doseq, dotimes
  • Built-in macros: when-let, if-let
  • Built-in macros: comment, assert, with-open

Phase 2: REPL & Tooling

  • Human REPL (:help, :defs, :clear, :ns, :quit)
  • JSON REPL (--json) with structured I/O
  • Batch evaluation (eval-batch)
  • Structured errors (type, message, form, line)
  • Session persistence for def/defn definitions

Phase 3: Nim Interop

  • Call Nim functions: (nim/math/sin x), (nim/strutils/toUpper s)
  • C FFI via Nim importc

Phase 4: AI-Native Tooling

  • File operations: (file/read "path"), (file/write "path" "content"), (file/append "path" "content")
  • File operations: (file/ls "dir"), (file/exists? "path")
  • Git operations: (git/status), (git/commit "msg"), (git/push)
  • Git operations: (git/diff), (git/log)
  • nREPL protocol compatibility
  • Tool-call format for AI framework integration

Phase 5: Persistent Data Structures

  • Persistent Vector (Hash Array Mapped Trie, 32-way branching)
  • Persistent Map (HAMT) — pmapAssoc, pmapDissoc, pmapGet in O(log₃₂ n)
  • Persistent Set — backed by HAMT map, conj/disj/contains?/get
  • conj, assoc, dissoc, get, get-in
  • nth, first, rest, last, count on persistent collections
  • Transients for batch mutations
  • conj!, assoc!, persistent!

Phase 6: Clojure Core Library (Complete)

  • range (0/1/2/3 args), repeat, cycle, iterate
  • take, drop, partition, interleave, concat
  • str, pr-str, println, prn
  • slurp, spit, read-line
  • meta, with-meta, vary-meta
  • type, instance?, satisfies?

Phase 7: Project Compilation

  • Compile entire projects (not just single files)
  • Namespace system (ns, (:require [lib :as alias]))
  • Module caching for faster REPL startup
  • Dependency resolution

Phase 8: Self-Hosted REPL

  • Compile forms in memory (no temp files)
  • Fast REPL startup (< 100ms)
  • Hot code reloading

Phase 9: Concurrency

  • Atoms (compare-and-swap)
  • Agents
  • core.async channels (simplified)

Known Issues

  • ->> threading macro with nested map/reduce requires proper macro expansion context
  • REPL definitions are re-compiled from scratch on each evaluation (slow but correct)