115 lines
3.1 KiB
Markdown
115 lines
3.1 KiB
Markdown
# 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 <repo-url>
|
||
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
|