# 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](ROADMAP.md) за текущия прогрес. ## Бърз Старт ```bash # Клониране git clone cd clojure-nim # Изграждане make build # REPL ./cljnim # Изпълнение на файл ./cljnim run examples/hello.clj ``` ## Примери ```clojure ;; hello.clj (ns hello) (println "Здравей, Nim свят!") (defn факториел [n] (if (<= n 1) 1 (* n (факториел (- n 1))))) (println "5! =" (факториел 5)) ``` ```clojure ;; Работа със структури от данни (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](LICENSE). ## Благодарности - [Clojure](https://clojure.org/) — Rich Hickey и екипът - [Nim](https://nim-lang.org/) — Andreas Rumpf и общността - Вдъхновено от ClojureScript, Babashka и Clojerl