87d60284873b410faf9afe4d1e831caa48e71528
- 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)
Clojure/Nim
Реализация на Clojure върху Nim-lang
Какво е това?
Clojure/Nim е проект, целящ да предостави Clojure език и runtime върху Nim. Вдъхновен е от ClojureScript и Babashka, но вместо JavaScript или JVM, целта е компилация към Nim код и използване на Nim runtime.
Защо?
- Единен AST: Nim предлага мощна макро система и AST манипулация
- Производителност: Компилиран към C, Nim дава C-подобна скорост с Lisp-удобство
- Размер: Минимален runtime footprint в сравнение с JVM
- Метапрограмиране: Съчетание на Clojure макроси и Nim макроси
Архитектура
Clojure Изходен Код (.clj)
↓
Clojure Reader (Clojure → Clojure Data)
↓
Макро Разширение (Clojure Macros)
↓
AST Транслатор (Clojure AST → Nim AST)
↓
Nim Компилатор
↓
C Код → Машинен Код
Статус
⚠️ Ранен етап — Проектът е във фаза на планиране и базова имплементация.
Виж ROADMAP.md за текущия прогрес.
Бърз Старт
# Клониране
git clone <repo-url>
cd clojure-nim
# Изграждане
make build
# REPL
./cljnim
# Изпълнение на файл
./cljnim run examples/hello.clj
Примери
;; hello.clj
(ns hello)
(println "Здравей, Nim свят!")
(defn факториел [n]
(if (<= n 1)
1
(* n (факториел (- n 1)))))
(println "5! =" (факториел 5))
;; Работа със структури от данни
(def данни
{:име "Иван"
:възраст 30
:езици ["Clojure" "Nim" "C"]})
(println (get-in данни [:езици 0]))
;; => "Clojure"
Структура на Проекта
├── src/
│ ├── reader/ # Clojure reader (EDN парсер)
│ ├── analyzer/ # Semantic анализатор
│ ├── macros/ # Core macros (defn, let, if, и т.н.)
│ ├── emitter/ # Генератор на Nim код
│ ├── runtime/ # Clojure runtime в Nim
│ └── repl/ # Интерактивна обвивка
├── lib/
│ └── core.clj # Clojure core библиотека
├── tests/ # Тестове
├── examples/ # Примери
├── Makefile
└── README.md
Изисквания
- Nim >= 2.0
- GCC или Clang
- make
Лиценз
MIT License — виж LICENSE.
Благодарности
Languages
Nim
88.4%
JavaScript
8.1%
Shell
1.5%
Python
0.8%
HTML
0.6%
Other
0.6%