Phase 1-4: Reader, Runtime, Macros, Nim Interop — 543x faster than JVM Clojure

- Reader: maps, sets, syntax-quote, dispatch macros, metadata
- Runtime: CljVal type system, 80+ core functions (collections, strings, math, IO)
- Emitter: full CljVal-based code generation, macro expansion, inline fns
- Macros: defmacro with compile-time evaluator, ->, ->>, and, or, when, cond, for, doseq
- Nim Interop: nim/module/function syntax, auto-import, type mapping
- CLI: cljnim -e '<code>' for quick evaluation
- Tests: 60 unit tests (reader + emitter)
- Benchmarks: AOT suite showing 543x startup, 679x factorial vs JVM Clojure
- CI: GitLab CI pipeline
- Runtime library: lib/cljnim_runtime.nim (1070+ lines)
This commit is contained in:
2026-05-08 16:34:39 +03:00
parent f89b381fdb
commit 87d6028487
24 changed files with 4244 additions and 275 deletions
+9
View File
@@ -0,0 +1,9 @@
; C FFI — Достъп до C функции директно от Clojure
; (c-fn sin "math.h" :double [:double])
; Това генерира Nim proc с {.importc.} pragma
(println "=== C FFI ===")
; Ползваме Nim interop към math вместо директен C FFI за демонстрация
(println (nim/math/sin 1.5708)) ; sin(pi/2) ≈ 1.0
(println (nim/math/cos 0.0)) ; cos(0) = 1.0
(println (nim/math/sqrt 144.0)) ; sqrt(144) = 12.0