5971c062d18ff65fa9955bae2ec81b1fdbf2452a
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%