Files
bara-lang/ROADMAP.md
T
2026-05-08 14:51:47 +03:00

170 lines
5.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Пътна Карта: Clojure/Nim
## Фаза 0: Инфраструктура и Планиране ✅
- [x] Определяне на цели и архитектура
- [x] Избор на подход (изходен Nim код vs директен C)
- [x] Създаване на структура на проекта
- [ ] CI/CD pipeline
- [ ] Система за тестване
## Фаза 1: Reader (Clojure → Clojure Data Structures)
**Цел:** Правилно парсиране на Clojure синтаксис към Clojure структури от данни.
- [ ] Символи (`sym`, `foo/bar`)
- [ ] Ключови думи (`:key`, `:ns/key`)
- [ ] Числа (integers, floats, ratios, big ints)
- [ ] Низове с escape sequences
- [ ] Коментари (`;`)
- [ ] Колекции:
- [ ] Списъци `(...)`
- [ ] Вектори `[...]`
- [ ] Maps `{...}`
- [ ] Sets `#{...}`
- [ ] Цитиране (`'`, `` ` ``, `~`, `~@`, `#`)
- [ ] Четене на dispatch macros (`#'`, `#_`, `#{}`, etc.)
- [ ] Reader conditionals (`#?()`)
- [ ] Метаданни (`^`)
## Фаза 2: Runtime Структури от Данни
**Цел:** Имплементиране на Clojure структурите от данни в Nim.
- [ ] **Persistent Vector** (Hash-mapped trie, като Clojure's HMT)
- [ ] **Persistent Map** (Hash-mapped trie)
- [ ] **Persistent Set** (върху Map)
- [ ] **Linked List** (свързан списък за sequences)
- [ ] **Lazy Seq**
- [ ] **Atoms** (STM ще дойде по-късно)
- [ ] **Keywords** (interned)
- [ ] **Symbols**
- [ ] **Vars**
- [ ] **Namespaces**
## Фаза 3: Макро Система и AST
**Цел:** Clojure макроси, които работят върху Clojure структури.
- [ ] **Clojure AST** представяне в Nim
- [ ] **Macro expansion engine**
- [ ] Специални форми:
- [ ] `def`
- [ ] `fn` / `defn`
- [ ] `let` / `letfn`
- [ ] `if` / `when` / `cond`
- [ ] `do`
- [ ] `quote`
- [ ] `loop` / `recur`
- [ ] `throw` / `try` / `catch` / `finally`
- [ ] `var`
- [ ] `binding` (dynamic vars)
- [ ] Core макроси:
- [ ] `defmacro`
- [ ] `->`, `->>`
- [ ] `and`, `or`
- [ ] `cond->`, `cond->>`
- [ ] `doto`
- [ ] `for`, `doseq`
- [ ] `lazy-seq`
## Фаза 4: Nim Code Emitter
**Цел:** Транслиране на Clojure AST към Nim код.
- [ ] **Symbol мапинг** (Clojure → Nim naming)
- [ ] **Type inference** (основно)
- [ ] **Emitter за специални форми**:
- [ ] Функции (`proc` в Nim)
- [ ] Променливи (`var` / `let` / `const`)
- [ ] Условни изрази (`if` / `case`)
- [ ] Цикли
- [ ] Изключения (`try` / `except`)
- [ ] **Interop**:
- [ ] Извикване на Nim функции от Clojure
- [ ] Извикване на C библиотеки
- [ ] FFI механизъм
- [ ] **Type hints** поддръжка
## Фаза 5: Core Библиотека
**Цел:** Имплементация на Clojure core функции.
### 5.1 Функции за Колекции
- [ ] `map`, `filter`, `reduce`
- [ ] `first`, `rest`, `next`, `last`
- [ ] `conj`, `into`
- [ ] `assoc`, `dissoc`, `get`, `get-in`
- [ ] `update`, `update-in`
- [ ] `keys`, `vals`
- [ ] `count`, `empty?`, `seq`
- [ ] `take`, `drop`, `partition`
- [ ] `concat`, `interleave`
### 5.2 Функции за Низове
- [ ] `str`, `pr-str`, `println`, `prn`
- [ ] `subs`, `clojure.string/` namespace
### 5.3 Функции за IO
- [ ] `slurp`, `spit`
- [ ] `read-line`
### 5.4 Функции за Мета
- [ ] `meta`, `with-meta`, `vary-meta`
- [ ] `type`, `instance?`
## Фаза 6: REPL и Инструменти
**Цел:** Интерактивна среда за разработка.
- [ ] **REPL цикъл** (Read-Eval-Print-Loop)
- [ ] **Hot reloading** на код
- [ ] **Error reporting** с Clojure стек тракове
- [ ] **Auto-completion**
- [ ] **Doc strings** (`doc` функция)
- [ ] **Source** (`source` функция)
- [ ] **AOT компилация**
## Фаза 7: Многонишковост и STM (по-късно)
**Цел:** Clojure's конкурентност модел.
- [ ] **Atoms** (CAS)
- [ ] **Agents**
- [ ] **Refs + Software Transactional Memory**
- [ ] **Futures** / **Promises**
- [ ] **core.async** (channels, go blocks) — голяма задача
## Фаза 8: Оптимизации и Полиране
- [ ] **Protocol имплементация** (като Clojure protocols)
- [ ] **Multimethods**
- [ ] **Records и Types**
- [ ] **Бързо стартиране** (малък runtime)
- [ ] **Малък размер на бинарния файл**
- [ ] **Подобрена производителност** на persistent структурите
- [ ] **Tree shaking** / Dead code elimination
## Бъдещи Идеи
- **GraalVM нативен образ** алтернатива (Clojure/Nim като lighter alternative)
- **Babashka-подобен скриптов инструмент**
- **Nim библиотеки достъпни директно** от Clojure
- **ClojureScript съвместимост** (споделен код)
- **LSP/Language Server** за Clojure/Nim
- **nREPL съвместимост**
---
## Текущ Фокус
Следваща стъпка: **Фаза 1 — Reader**
Ще започнем с имплементация на базов Clojure reader, който може да парсира:
1. Числа и низове
2. Символи и keywords
3. Специални знаци (`'`, `` ` ``, `~`, `@`)
4. Списъци и вектори
Първият milestone е работещ reader, който може да обработи `(+ 1 2)` и да върне правилна Clojure data structure.