5.8 KiB
5.8 KiB
Пътна Карта: Clojure/Nim
Фаза 0: Инфраструктура и Планиране ✅
- Определяне на цели и архитектура
- Избор на подход (изходен Nim код vs директен C)
- Създаване на структура на проекта
- 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
- Специални форми:
deffn/defnlet/letfnif/when/conddoquoteloop/recurthrow/try/catch/finallyvarbinding(dynamic vars)
- Core макроси:
defmacro->,->>and,orcond->,cond->>dotofor,doseqlazy-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,reducefirst,rest,next,lastconj,intoassoc,dissoc,get,get-inupdate,update-inkeys,valscount,empty?,seqtake,drop,partitionconcat,interleave
5.2 Функции за Низове
str,pr-str,println,prnsubs,clojure.string/namespace
5.3 Функции за IO
slurp,spitread-line
5.4 Функции за Мета
meta,with-meta,vary-metatype,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, който може да парсира:
- Числа и низове
- Символи и keywords
- Специални знаци (
',`,~,@) - Списъци и вектори
Първият milestone е работещ reader, който може да обработи (+ 1 2) и да върне правилна Clojure data structure.