@ -0,0 +1,452 @@
# saQut Derleyici ve Dil Ekosistemi — Aşamalı Yol Haritası (ROADMAP)
> **Son güncelleme:** 2026-05-26
> **Amaç:** Bu belge, saQut derleyicisinin ve onu çevreleyen araç zincirinin aşamalı olarak nası l inşa edileceğini, her aşamanı n ön koşulları nı , net hedeflerini ve hangi derleyici katmanı na denk geldiğini tanı mlar. Doğrudan GitHub issue'ları na dönüştürülebilecek netlikte yazı lmı ştı r.
---
## Vizyon (Kı sa Hatı rlatma)
saQut bir derleyici değil, bir **derleyici alet çantası dı r.** Amacı en hı zlı kodu üretmek değil, derleyicinin kendisini geliştiriciye açmaktı r. Her aşama (Lexer, Parser, Optimizer, Compiler) bağı msı z, parametrelerle yönlendirilebilen bir modüldür. Dil, geliştiricinin hiç sı kı lmadan binlerce fonksiyon yazabileceği, dosya sisteminden HTTP sunucusuna kadar her seviyede kod yazmaya izin veren, ancak aynı zamanda byte seviyesinde kontrol sağlayan, sı fı r bağı mlı lı kla dağı tı labilen bir yapı olacaktı r.
---
## Genel Bağı mlı lı k Haritası
Aşağı daki diyagram, hangi yeteneğin hangi derleyici katmanı na bağı mlı olduğunu gösterir.
```
Lexer ─────────────────────────────────────────────────────────────────────┐
│ │
├── TextMate Syntax Highlighting (regex tabanlı , hemen yapı labilir) │
│ │
└── Tokenizer ──────────────────────────────────────────────────────┐ │
│ │ │
└── Parser ────────────────────────────────────────────────┐ │ │
│ │ │ │
├── AST ────────────────────────────────────────┐ │ │ │
│ │ │ │ │ │
│ ├── AST Analizi (node sayı sı , derinlik) │ │ │ │
│ ├── Kod Biçimlendirici (pretty printer) │ │ │ │
│ └── Dokümantasyon Üretici (/// yorumlar) │ │ │ │
│ │ │ │ │
└── Sembol Tablosu ─────────────────────────┐ │ │ │ │
│ │ │ │ │ │
├── Tip Sistemi ──────────────┐ │ │ │ │ │
│ │ │ │ │ │ │ │
│ ├── LSP Diagnostics │ │ │ │ │ │
│ ├── LSP Hover (tip göster) │ │ │ │ │ │
│ ├── LSP Completion │ │ │ │ │ │
│ └── Linter / Statik Analiz │ │ │ │ │ │
│ │ │ │ │ │ │
├── LSP Go to Definition ──────┤ │ │ │ │ │
├── LSP Find References ───────┘ │ │ │ │ │
├── LSP Document Symbols │ │ │ │ │
├── LSP Semantic Tokens (renklendirme) │ │ │ │ │
└── Kod Haritası (Call Graph) │ │ │ │ │
│ │ │ │ │
┌───────────────────────────────────────┘ │ │ │ │
│ │ │ │ │
└── IR (Intermediate Representation) ───┐ │ │ │ │
│ │ │ │ │ │
├── C Transpile Backend │ │ │ │ │
├── Interpreter (Tree-walk / VM) │ │ │ │ │
├── QBE / Custom Backend │ │ │ │ │
├── Debugger (DAP, DWARF) │ │ │ │ │
└── Optimizasyonlar │ │ │ │ │
│ │ │ │ │
┌────────────────────────────────────────┘ │ │ │ │
│ │ │ │ │
└── Proje Sistemi / Build Tooling ─────────────┘ │ │ │
│ │ │ │
├── saqut init, saqut build, saqut test │ │ │
├── Paket Yöneticisi │ │ │
└── Derleyici Konfigürasyonu (CompilerConfig) │ │ │
│ │ │
┌────────────────────────────────────────────────────────────┘ │ │
│ │ │
└── LSP Sunucusu (JSON-RPC) ───────────────────────────────────────┘ │
│ │
├── VSCode Eklentisi │
├── Diğer IDE Desteği (Neovim, JetBrains, Emacs...) │
└── Debug Adapter Protocol (DAP) │
```
> **Okuma rehberi:** Yukarı daki haritada her bileşen, altı ndaki bileşenlere bağı mlı dı r. Örneğin LSP Semantic Tokens için Sembol Tablosu şarttı r, Sembol Tablosu için AST şarttı r, AST için Parser şarttı r.
---
# Aşama 0: Metadata ve Konum Takibi (Derleyici Katmanı : Tümü)
> **Ön Koşul:** Yok. Mevcut kod tabanı üzerine inşa edilir.
> **Hedef:** Her token ve AST düğümü kaynak koddaki konumunu bilsin. Hata mesajları satı r/sütun gösterebilsin.
> **Neden bu aşama ilk?** LSP dahil tüm geliştirici deneyimi özellikleri, konum bilgisine bağı mlı dı r.
### Issue 0.1: `SourceFile` ve `SourceLocation` Yapı ları nı Tanı mla
- **Dosya:** `src/core/location.hpp` (yeni)
- **Yapı lacaklar:**
- `SourceLocation` yapı sı : `fileId` (string), `line` (1 tabanlı ), `column` (1 tabanlı ), `offset` (0 tabanlı ).
- `SourceFile` sı nı fı : Dosya adı , tam metin, satı r başı offset'lerinin listesini tutar.
- `offsetToLocation(offset) -> SourceLocation` metodu: Binary search ile offset'i satı r/sütuna çevirir.
- `locationToOffset(SourceLocation) -> int` metodu: Satı r/sütunu offset'e çevirir (doğrulama için).
- **Test kriteri:** `SourceFile("a\nbc\n")` için offset 2'nin `{line:2, column:1}` olduğunu doğrula.
### Issue 0.2: Lexer'a Satı r/Sütun Takibi Ekle
- **Dosya:** `src/lexer/lexer.hpp`
- **Yapı lacaklar:**
- `Lexer` sı nı fı na `currentLine` , `currentColumn` üye değişkenleri ekle.
- `nextChar()` çağrı ldı ğı nda `'\n'` görürse satı rı artı r, sütunu sı fı rla.
- `skipWhiteSpace()` içinde de satı r takibi çalı şsı n.
- Mevcut konumu `SourceLocation` olarak döndüren `getLocation()` metodu ekle.
- `INumber` yapı sı na `startLoc` ve `endLoc` alanları ekle, `readNumeric()` bu alanları doldursun.
- **Test kriteri:** `"1 + 2"` tarandı ğı nda `1` token'ı nı n konumu `{line:1, column:1}` olmalı .
### Issue 0.3: Token'lara ve AST Düğümlerine Konum Bilgisi Ekle
- **Dosyalar:** `src/tokenizer/token.hpp` , `src/parser/ast.hpp`
- **Yapı lacaklar:**
- `Token` temel sı nı fı na `SourceLocation loc` ekle. `start` /`end` offset'lerini kaldı r (artı k `loc` kullan).
- `ParserToken` yapı sı na `SourceLocation loc` ekle, `parseToken()` içinde token'dan kopyala.
- `ASTNode` temel sı nı fı na `SourceLocation loc` ekle. Her düğüm oluşturulurken ilgili token'ı n konumunu ata.
- **Test kriteri:** `saqut tokens source.sqt` çı ktı sı nda her token için satı r:sütun bilgisi görünsün.
---
# Aşama 1: Sembol Tablosu ve Tip Sisteminin Temelleri (Derleyici Katmanı : Parser sonrası )
> **Ön Koşul:** Aşama 0 tamamlanmı ş olmalı .
> **Hedef:** Derleyici, kodda tanı mlanan her ismi (değişken, fonksiyon, struct) ve tipini bilsin. LSP'nin sorduğu temel sorulara cevap verebilsin.
### Issue 1.1: Sembol ve Sembol Tablosu Sı nı fları nı Yaz
- **Dosya:** `src/symbol/symbol.hpp` , `src/symbol/symbol_table.hpp` (yeni)
- **Yapı lacaklar:**
- `Symbol` yapı sı : `name` (string), `kind` (enum: Variable, Function, Struct, Parameter), `type` (`Type*`), `definitionLoc` (SourceLocation), `references` (vector< SourceLocation > ).
- `SymbolTable` sı nı fı : İç içe scope desteği. `enterScope()` , `exitScope()` , `define(name, Symbol)` , `resolve(name) -> Symbol*` , `addReference(name, location)` .
- Scope chain: Global → Function → Block. İsim çözümleme en iç scope'tan dı şa doğru.
- **Test kriteri:** İç içe bloklarda aynı isimli değişken gölgeleme (shadowing) çalı şsı n.
### Issue 1.2: Tip Sistemi Temellerini Kur
- **Dosya:** `src/symbol/type.hpp` (yeni)
- **Yapı lacaklar:**
- `Type` soyut sı nı fı ve alt sı nı fları : `PrimitiveType` (Int, Float, Bool, Char, String, Void), `StructType` , `FunctionType` (parametre tipleri + dönüş tipi), `ArrayType` .
- Tip eşitliği kontrolü (`equals` metodu).
- Tip uyumluluğu (atama için implicit cast kuralları ).
- **Test kriteri:** `int x = "hello";` için "tip uyuşmazlı ğı " hatası alı nsı n.
### Issue 1.3: Sembol Toplayı cı yı (SymbolCollector) AST Walker Olarak Yeniden Yaz
- **Dosya:** `src/symbol/symbol_collector.hpp` (yeni, mevcut `json.hpp` içindeki `collectSymbols` kaldı rı lacak)
- **Yapı lacaklar:**
- `SymbolCollector` sı nı fı , `ASTNode` ziyaretçisi. AST'yi dolaşı r:
- `FunctionDecl` → `SymbolTable::define(name, FunctionSymbol)`
- `VariableDecl` → `SymbolTable::define(name, VariableSymbol)` , tipini `Type` sisteminden çözümle.
- `Identifier` referansları → `SymbolTable::addReference(name, loc)`
- `StructDecl` → `SymbolTable::define(name, StructSymbol)`
- Ziyaret sı rası nda tanı msı z değişken, çift tanı m hataları nı topla.
- **Test kriteri:** `saqut symbols source.sqt` çı ktı sı `SymbolTable` 'dan gelen tam veriyi JSON olarak göstersin.
---
# Aşama 2: Temel LSP Altyapı sı (Derleyici Katmanı : Tümü, yeni `lsp` modu)
> **Ön Koşul:** Aşama 0 ve Aşama 1 tamamlanmı ş olmalı .
> **Hedef:** VSCode içinde `.sqt` dosyaları nda hataları görme, sembollere gitme, imleç altı bilgisi.
### Issue 2.1: JSON-RPC 2.0 Altyapı sı nı Yaz
- **Dosya:** `src/lsp/json_rpc.hpp` (yeni)
- **Yapı lacaklar:**
- `JsonRpcMessage` yapı sı : `jsonrpc` , `id` , `method` , `params` alanları .
- `parseMessage(string) -> JsonRpcMessage` fonksiyonu: Ham stdin girdisini JSON-RPC mesajı na çevirir (sadece ihtiyaç duyulan alanlar).
- `serializeMessage(JsonRpcMessage) -> string` fonksiyonu: Cevap mesajı nı JSON-RPC formatı nda üretir.
- Content-Length header'ı ile çerçeveleme (LSP standardı ).
- **Test kriteri:** El ile gönderilen `{"jsonrpc":"2.0","id":1,"method":"initialize","params":{...}}` mesajı doğru parse edilsin.
### Issue 2.2: `saqut lsp` Komutunu Ekle
- **Dosya:** `src/cli/commands/lsp.hpp` (yeni), `main.cpp` 'ye kayı t ekle
- **Yapı lacaklar:**
- `cmdLsp` fonksiyonu: stdin/stdout'tan JSON-RPC mesajları nı oku, işle, cevap ver.
- Ana döngü: `initialize` → `initialized` → `textDocument/didOpen` , `didChange` , `definition` , `hover` ...
- `shutdown` ve `exit` mesajları nı işle.
- **Test kriteri:** `saqut lsp` process'i başlatı ldı ğı nda `initialize` isteğine `capabilities` ile cevap versin.
### Issue 2.3: Artı mlı Derleme (Incremental Compilation) Desteği Ekle
- **Dosya:** `src/lsp/project_manager.hpp` (yeni)
- **Yapı lacaklar:**
- `ProjectManager` sı nı fı : Açı k dosyaları ve onları n AST/Sembol Tablosu kopyaları nı tutar.
- `didOpen` / `didChange` ile dosya içeriği güncellendiğinde sadece o dosyayı yeniden parse et, sembol tablosunu güncelle.
- Hata listesini (diagnostics) güncelle.
- **Test kriteri:** Bir dosyada değişiklik yapı ldı ğı nda sadece o dosyanı n yeniden derlenmesi, diğer dosyaları n etkilenmemesi.
### Issue 2.4: İlk LSP Yeteneklerini Uygula
- **Dosya:** `src/lsp/handlers/` (yeni dizin)
- **Yapı lacaklar:**
- `textDocument/publishDiagnostics` : Sembol toplayı cı dan gelen hataları LSP formatı nda bildir.
- `textDocument/definition` : İmleç konumundaki sembolü bul, tanı mlandı ğı `SourceLocation` 'ı döndür.
- `textDocument/documentSymbol` : Dosyadaki tüm sembolleri hiyerarşik olarak listele.
- `textDocument/hover` : İmleç altı ndaki sembolün tipini ve tanı mı nı göster.
- **Test kriteri:** VSCode'da `.sqt` dosyası açı ldı ğı nda hatalar kı rmı zı alt çizgi ile gösterilsin, Ctrl+Tı k tanı ma gitsin.
---
# Aşama 3: Syntax Highlighting (TextMate + Semantik)
> **Ön Koşul:** TextMate için: sadece keyword listesi (hemen yapı labilir). Semantik için: Aşama 1 (Sembol Tablosu).
> **Hedef:** `.sqt` dosyaları VSCode'da doğru ve zengin renklendirme alsı n.
### Issue 3.1: TextMate Dilbilgisi Dosyası Oluştur
- **Dosya:** `editors/vscode/syntaxes/saqut.tmLanguage.json` (yeni)
- **Yapı lacaklar:**
- Keyword'ler, operatörler, sayı lar, string'ler, yorum satı rları için regex desenleri.
- Mevcut `keywords[]` dizisindeki tüm keyword'leri kapsa.
- String interpolation (ileride) için temel yapı .
- **Test kriteri:** VSCode'da `.sqt` dosyası açı ldı ğı nda `if` , `for` mavi, `"hello"` turuncu, `// yorum` yeşil görünsün.
### Issue 3.2: Semantik Token Desteği Ekle
- **Dosya:** `src/lsp/handlers/semantic_tokens.hpp` (yeni)
- **Yapı lacaklar:**
- `textDocument/semanticTokens/full` isteğini işle.
- AST + Sembol Tablosu kullanarak her token için `tokenType` (function, variable, parameter, type, keyword) ve `tokenModifiers` (declaration, readonly, static) belirle.
- LSP semantic token delta formatı nda kodla ve döndür.
- **Test kriteri:** VSCode'da `int x = foo();` yazı ldı ğı nda `x` (değişken) ile `foo` (fonksiyon) farklı renkte olsun.
---
# Aşama 4: Kod Biçimlendirici ve Dokümantasyon Üretici (Derleyici Katmanı : AST)
> **Ön Koşul:** Aşama 0, Aşama 1. (AST ve konum bilgisi yeterli)
> **Hedef:** `saqut fmt` ile otomatik formatlama, `saqut doc` ile dokümantasyon üretimi.
### Issue 4.1: Pretty Printer (Kod Biçimlendirici)
- **Dosya:** `src/tools/pretty_printer.hpp` (yeni)
- **Yapı lacaklar:**
- AST'yi dolaşarak, standart girintileme ve boşluk kuralları yla kaynak kod üret.
- `saqut fmt <dosya>` komutu: dosyayı oku, parse et, pretty print yap, orijinal dosyayı güncelle (veya stdout'a bas).
- Kural seti: 4 boşluk girinti, operatör etrafı nda boşluk, virgülden sonra boşluk, süslü parantez aynı satı rda.
- **Test kriteri:** `saqut fmt source.sqt` çalı ştı rı ldı ğı nda dosya tutarlı formata dönüşsün, aynı kod tekrar formatlanı rsa değişmesin (idempotent).
### Issue 4.2: Dokümantasyon Üretici
- **Dosya:** `src/tools/doc_generator.hpp` (yeni)
- **Yapı lacaklar:**
- `///` veya `/** */` ile başlayan yorum blokları nı AST düğümlerine bağla (önceki satı rdaki yorum, sonraki fonksiyon/değişken için doc sayı lı r).
- `saqut doc <dosya>` komutu: Markdown formatı nda API dokümantasyonu üret.
- LSP `hover` isteğine bu dokümantasyonu ekle (zengin Markdown).
- **Test kriteri:** `/// Bu fonksiyon iki sayı yı toplar` yorumu, `int add(int a, int b)` için hover'da görünsün.
---
# Aşama 5: IR Güçlendirme ve Interpreter (Derleyici Katmanı : IR + Backend)
> **Ön Koşul:** Aşama 1 (Sembol Tablosu ve Tip Sistemi).
> **Hedef:** Yazı lan kodun çalı ştı rı labilmesi. Hem interpreter (REPL + dosya) hem de C transpile.
### Issue 5.1: IR'ye Kontrol Akı şı ve Fonksiyon Opcode'ları Ekle
- **Dosya:** `src/ir/ir.hpp`
- **Yapı lacaklar:**
- `OPCode` enum'una ekle: `br` (koşulsuz dal), `br_eq` , `br_lt` , `br_gt` (koşullu dal), `cmp` (karşı laştı r), `call` , `ret` , `param` , `load` , `store` , `alloca` .
- `IROpData` yapı sı nı yeni opcode'lar için güncelle (hedef adres, koşul register'ları ).
- `CodeGenerator` sı nı fı na `if` , `while` , `for` , `do-while` , fonksiyon çağrı sı , return için IR üretme mantı ğı nı ekle.
- **Test kriteri:** `if (x < 5) return x;` kodu için `cmp` , `br_lt` , `ret` IR komutları üretilsin.
### Issue 5.2: Interpreter (Sanal Makine)
- **Dosya:** `src/backend/interpreter.hpp` (yeni)
- **Yapı lacaklar:**
- `Interpreter` sı nı fı : IR komutları nı sı rayla yürütür.
- Sanal register'ları ve bellek (stack) yönetimi.
- `OPCode` başı na yürütme mantı ğı (switch-case).
- `saqut run <dosya>` komutu: Interpreter'ı kullanarak kodu çalı ştı r.
- `saqut` (argümansı z): REPL modu, her satı rı anı nda yorumla.
- **Test kriteri:** `int main() { return 42; }` kodu çalı ştı rı ldı ğı nda çı kı ş kodu 42 olsun.
### Issue 5.3: C Transpile Backend
- **Dosya:** `src/backend/transpile_c.hpp` (yeni)
- **Yapı lacaklar:**
- `CTranspiler` sı nı fı : IR komutları nı C koduna çevirir.
- `saqut transpile <dosya> -o output.c` komutu.
- Üretilen C kodu `gcc` /`clang` ile derlenebilir ve çalı ştı rı labilir olmalı .
- `#line` direktifleri ile orijinal kaynak koda geri referans ver.
- **Test kriteri:** `int main() { return 1+2; }` kodu C'ye çevrilip GCC ile derlendiğinde çalı şan binary 3 çı kı ş kodu versin.
---
# Aşama 6: Debugger (DAP Tabanlı )
> **Ön Koşul:** Aşama 5 (Interpreter).
> **Hedef:** VSCode içinden breakpoint koyma, adı m adı m çalı ştı rma, değişken izleme.
### Issue 6.1: Debug Adapter Protocol (DAP) Altyapı sı
- **Dosya:** `src/debug/dap_server.hpp` (yeni)
- **Yapı lacaklar:**
- JSON-RPC üzerine DAP mesajları nı işleyen sunucu (JSON-RPC altyapı sı zaten LSP'den var, ortak kullan).
- `saqut debug` komutu: DAP sunucusunu başlatı r.
- `launch` ve `attach` isteklerini işle.
- **Test kriteri:** VSCode'dan "Debug" başlatı ldı ğı nda DAP el sı kı şması (handshake) başarı lı olsun.
### Issue 6.2: Interpreter'a Debugging Yetenekleri Ekle
- **Dosya:** `src/backend/interpreter.hpp` (güncelle)
- **Yapı lacaklar:**
- Interpreter'a `stepOver` , `stepInto` , `stepOut` , `pause` , `continue` yetenekleri.
- Breakpoint yönetimi: `SourceLocation` ile eşleşen satı rlarda dur.
- Değişken değerlerini okuma: `stackFrame` 'den sembol ismiyle değer bulma.
- `variables` ve `evaluate` isteklerini cevapla.
- **Test kriteri:** VSCode'da bir satı ra breakpoint koyup F5 ile debug başlatı ldı ğı nda, o satı rda dursun ve değişken değerleri gösterilsin.
### Issue 6.3: Zaman Yolculuğu Debugging (Opsiyonel, İleri Seviye)
- **Dosya:** `src/debug/time_travel.hpp` (yeni)
- **Yapı lacaklar:**
- Interpreter her adı mda program durumunu (stack, register'lar) bir listeye kaydetsin.
- Geri adı m (`stepBack`) desteği.
- `saqut debug --time-travel` ile açı lı r.
- **Test kriteri:** Debug sı rası nda "Step Back" yapı ldı ğı nda bir önceki satı ra dönülsün ve değişken eski değerini göstersin.
---
# Aşama 7: Gelişmiş LSP Yetenekleri (Derleyici Katmanı : Tümü)
> **Ön Koşul:** Aşama 1, Aşama 5 (Interpreter çalı şı yor olmalı ).
> **Hedef:** VSCode'da tam kod tamamlama, referans bulma, kod haritası .
### Issue 7.1: Kod Tamamlama (Completion)
- **Dosya:** `src/lsp/handlers/completion.hpp`
- **Yapı lacaklar:**
- `textDocument/completion` isteğini işle.
- İmleç konumundaki scope'a göre görünür tüm sembolleri listele.
- Fonksiyon parametre bilgisi (signature help).
- **Test kriteri:** `x.` yazı ldı ğı nda `x` 'in struct üyeleri listelensin.
### Issue 7.2: Referans Bulma (Find References)
- **Dosya:** `src/lsp/handlers/references.hpp`
- **Yapı lacaklar:**
- `textDocument/references` isteğini işle.
- Sembol tablosundan sembolün tüm referans konumları nı döndür.
- **Test kriteri:** Bir değişkene sağ tı klanı p "Find All References" dendiğinde tüm kullanı mlar listelensin.
### Issue 7.3: Kod Haritası / Çağrı Grafiği (Call Hierarchy)
- **Dosya:** `src/lsp/handlers/call_hierarchy.hpp`
- **Yapı lacaklar:**
- `textDocument/prepareCallHierarchy` , `callHierarchy/incomingCalls` , `callHierarchy/outgoingCalls` isteklerini işle.
- AST ve Sembol Tablosu'ndan çağrı ilişkilerini çı kar.
- **Test kriteri:** Bir fonksiyona sağ tı klanı p "Show Call Hierarchy" dendiğinde çağrı ağacı gösterilsin.
---
# Aşama 8: Optimizasyonlar ve Analiz Araçları
> **Ön Koşul:** Aşama 5 (IR ve Interpreter).
> **Hedef:** Kod kalitesini artı ran, geliştiriciye içgörü sağlayan araçlar.
### Issue 8.1: Linter ve Statik Analiz
- **Dosya:** `src/tools/linter.hpp`
- **Yapı lacaklar:**
- `saqut lint <dosya>` komutu.
- Kullanı lmayan değişken, import, fonksiyon tespiti.
- Karmaşı klı k metrikleri (cyclomatic complexity).
- Null olabilecek değerlere erişim kontrolü (basit veri akı şı analizi).
- **Test kriteri:** Kullanı lmayan bir değişken için `[WARN] Unused variable 'x' at line 5` çı ktı sı alı nsı n.
### Issue 8.2: Optimizasyon Pas'ları
- **Dosya:** `src/optimizer/optimizer.hpp` , `src/optimizer/passes/`
- **Yapı lacaklar:**
- Constant folding: `4 + 1` → `5` .
- Dead code elimination: `if (false) { ... }` bloğunu sil.
- Unused variable elimination: Kullanı lmayan değişken tanı mları nı kaldı r.
- `CompilerConfig` ile her pas açı lı p kapatı labilir olmalı .
- **Test kriteri:** `--opt-all` ile çalı ştı rı lan kod, optimizasyonsuz halinden daha az IR komutu üretsin.
### Issue 8.3: Performans Profili (Profiler)
- **Dosya:** `src/tools/profiler.hpp`
- **Yapı lacaklar:**
- `saqut profile run <dosya>` komutu.
- Interpreter modunda her fonksiyon çağrı sı nı n süresini ölç.
- Sonuçları flame graph formatı nda (katlanabilir JSON) dı şa aktar.
- **Test kriteri:** Profiler çı ktı sı , en çok zaman harcanan fonksiyonu belirtsin.
---
# Aşama 9: Proje Sistemi, Derleyici Konfigürasyonu ve Feature Toggle
> **Ön Koşul:** Aşama 5 (Interpreter), Aşama 8 (Optimizasyon altyapı sı ).
> **Hedef:** `saqut init` , `saqut build` , `saqut test` komutları nı n çalı şması .
### Issue 9.1: Proje Başlatma ve Build Sistemi
- **Dosya:** `src/cli/commands/init.hpp` , `src/cli/commands/build.hpp`
- **Yapı lacaklar:**
- `saqut init <proje-adı >` : Standart dizin yapı sı ve `saqut.json` (proje manifesti) oluştur.
- `saqut build` : Manifest'i oku, tüm kaynak dosyaları derle, tek bir çalı ştı rı labilir üret (C transpile + GCC veya interpreter bytecode).
- **Test kriteri:** `saqut init myapp && cd myapp && saqut build` ile çalı şan bir program elde edilsin.
### Issue 9.2: CompilerConfig ve Feature Toggle
- **Dosya:** `src/core/compiler_config.hpp`
- **Yapı lacaklar:**
- `CompilerConfig` yapı sı : Tüm dil özellikleri (`enableWhile`, `enableFor` , `enableClass` ...), optimizasyon pas'ları , çı ktı formatı .
- `saqut` komut satı rı ndan `--disable-while` , `--skip-constant-folding` gibi bayraklarla konfigüre edilebilsin.
- Tokenizer ve Parser, `CompilerConfig` 'e göre davranı ş değiştirsin (kapalı keyword'leri identifier olarak tanı sı n).
- **Test kriteri:** `saqut run --disable-while` ile while döngüsü içeren kod hata versin.
### Issue 9.3: Test Çerçevesi (Built-in)
- **Dosya:** `src/cli/commands/test.hpp` , `src/core/test_framework.hpp`
- **Yapı lacaklar:**
- `test` anahtar kelimesi veya `#[test]` anotasyonu.
- `saqut test` komutu: Projedeki tüm test fonksiyonları nı bul, çalı ştı r, sonuçları raporla.
- Test sonuçları TAP ve JUnit XML formatı nda çı kı ş.
- **Test kriteri:** `test "iki kere iki dort" { assert(2*2 == 4); }` testi `saqut test` ile geçsin.
---
# Aşama 10: Paket Yöneticisi ve Dağı tı m (Gelecek)
> **Ön Koşul:** Aşama 9 (Proje sistemi).
> **Hedef:** Harici kütüphaneleri projeye ekleme ve dilin resmi paket kaydı .
### Issue 10.1: Paket Yöneticisi (saqut add)
- **Dosya:** `src/cli/commands/add.hpp` , `src/package/registry.hpp`
- **Yapı lacaklar:**
- `saqut add <paket-adi>` : Merkezi paket kaydı ndan (GitHub tabanlı ) paketi indir, `saqut.json` 'a ekle.
- Bağı mlı lı k çözümleme (dependency resolution).
- **Test kriteri:** `saqut add json` ile JSON kütüphanesi projeye eklensin ve `import json;` kullanı labilsin.
### Issue 10.2: Kendi Kendini Derleme (Self-Hosting)
- **Dosya:** Proje geneli.
- **Yapı lacaklar:**
- saQut derleyicisinin kaynak kodu, saQut dilinde yazı labilsin ve saQut ile derlenebilsin.
- Bu, dilin olgunluğunun nihai testidir.
- **Test kriteri:** `saqut build` ile derleyici kendi kaynak kodunu derleyip çalı şan bir binary üretsin.
---
# Aşama 11: Dil Spesifikasyonu ve Resmi Dokümantasyon
> **Ön Koşul:** Aşama 9 (dil özellikleri stabilize olmalı ).
> **Hedef:** Geliştiricilerin referans alabileceği eksiksiz bir dil tanı mı .
### Issue 11.1: Dil Spesifikasyonu Yaz
- **Dosya:** `docs/lang_spec.md` (kitap formatı nda)
- **Yapı lacaklar:**
- Sözdizimi grameri (EBNF).
- Tip sistemi ve dönüşüm kuralları .
- Çalı şma zamanı davranı şları (bellek modeli, hata yönetimi).
- Standart kütüphane sözleşmeleri.
- **Test kriteri:** Spesifikasyon, tüm dil özelliklerini kapsası n ve derleyici davranı şı yla tutarlı olsun.
### Issue 11.2: Resmi Web Sitesi ve Öğretici
- **Dosya:** `docs/website/`
- **Yapı lacaklar:**
- saqut-lang.org için statik site.
- "Başlangı ç" rehberi, örnekler, API referansı (doc generator çı ktı sı ).
- **Test kriteri:** Site yayı nda ve tüm örnekler çalı ştı rı labilir olsun.
---
# Ek: VSCode Eklentisi Paketleme
> **Ön Koşul:** Aşama 3 (Syntax Highlighting), Aşama 4 (LSP handlers).
> **Hedef:** VSCode marketplace'te yayı nlanabilir bir eklenti.
### Issue E.1: VSCode Eklenti Manifesti ve Paketleme
- **Dosya:** `editors/vscode/package.json` , `editors/vscode/extension.js`
- **Yapı lacaklar:**
- `package.json` içinde `activationEvents` , `contributes.languages` , `contributes.commands` tanı mla.
- `extension.js` : LSP sunucusunu (`saqut lsp`) başlat, dil konfigürasyonunu yükle.
- `.vsix` paketi oluşturma betiği.
- **Test kriteri:** Eklenti VSCode'a yüklendiğinde `.sqt` dosyaları tanı nsı n ve LSP başlatı lsı n.
---
> **Yol haritası sonu.** Her aşamadaki issue'lar sı rası yla yapı ldı ğı nda, saQut hem kendi kendini derleyebilen bir dil hem de geliştiricisine benzersiz içgörü sağlayan bir araç zinciri haline gelir.