saqut-compiler/docs/roadmap.md

28 KiB
Raw Blame History

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).
    • 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:
      • FunctionDeclSymbolTable::define(name, FunctionSymbol)
      • VariableDeclSymbolTable::define(name, VariableSymbol), tipini Type sisteminden çözümle.
      • Identifier referanslarıSymbolTable::addReference(name, loc)
      • StructDeclSymbolTable::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ü: initializeinitializedtextDocument/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ıı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ıı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 + 15.
    • 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.