Initial commit
This commit is contained in:
@@ -0,0 +1,114 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user