2026-05-08 14:51:47 +03:00
2026-05-08 14:51:47 +03:00
2026-05-08 14:51:47 +03:00
2026-05-08 14:51:47 +03:00
2026-05-08 14:51:47 +03:00
2026-05-08 14:51:47 +03:00
2026-05-08 14:51:47 +03:00
2026-05-08 14:51:47 +03:00
2026-05-08 14:51:47 +03:00

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.

Благодарности

  • Clojure — Rich Hickey и екипът
  • Nim — Andreas Rumpf и общността
  • Вдъхновено от ClojureScript, Babashka и Clojerl
S
Description
Clojure - NIM
Readme MIT 609 KiB
Languages
Nim 88.4%
JavaScript 8.1%
Shell 1.5%
Python 0.8%
HTML 0.6%
Other 0.6%