4.0 KiB
4.0 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:
CljValwithnil,bool,int,float,string,keyword,symbol,list,vector,map,fn,atom
Phase 1: Macro System ✅
macroexpand,macroexpand-1syntax-quote,unquote,unquote-splicinggensymdefmacro(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/defndefinitions
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 (JSON over TCP,
--tcp PORT) - Tool-call format for AI framework integration
Phase 5: Persistent Data Structures ✅ (Complete)
- Persistent Vector (Hash Array Mapped Trie, 32-way branching)
- Persistent Map (HAMT) —
pmapAssoc,pmapDissoc,pmapGetin O(log₃₂ n) - Persistent Set — backed by HAMT map,
conj/disj/contains?/get conj,assoc,dissoc,get,get-innth,first,rest,last,counton persistent collections- Transients for batch mutations
conj!,assoc!,persistent!
Phase 6: Clojure Core Library ✅ (Complete)
range(0/1/2/3 args),repeat,cycle,iteratetake,drop,partition,interleave,concatstr,pr-str,println,prnslurp,spit,read-linemeta,with-meta,vary-metatype,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 (deps.edn, Git deps to .deps/)
Phase 8: Self-Hosted REPL ✅
- Compile forms in memory (tree-walking interpreter, <1ms eval)
- Fast REPL startup (~0.02ms per eval vs 1133ms compiled)
- Hot code reloading (def/defn update env immediately)
Phase 9: Concurrency ✅
- Atoms (compare-and-swap)
- Agents (send, await, deref — sync dispatch in interpreter)
- core.async channels (chan, >!, <!, close!, go — interpreter-first)
Known Issues
->>threading macro with nestedmap/reducerequires proper macro expansion context
Recent Bug Fixes (2026-05-08)
- Fixed: ffi/interop examples — temp files now use isolated subdirectories to avoid shadowing Nim stdlib modules (e.g.,
math.nimshadowingimport math) - Fixed:
quot/rem— addedcljQuot/cljRemto runtime + interpreter support - Cleanup: removed unused
processAgentActionsproc, unusedsequtilsimport in repl.nim