28 KiB
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:
SourceLocationyapısı:fileId(string),line(1 tabanlı),column(1 tabanlı),offset(0 tabanlı).SourceFilesınıfı: Dosya adı, tam metin, satır başı offset'lerinin listesini tutar.offsetToLocation(offset) -> SourceLocationmetodu: Binary search ile offset'i satır/sütuna çevirir.locationToOffset(SourceLocation) -> intmetodu: 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:
LexersınıfınacurrentLine,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
SourceLocationolarak döndürengetLocation()metodu ekle. INumberyapısınastartLocveendLocalanları ekle,readNumeric()bu alanları doldursun.
- Test kriteri:
"1 + 2"tarandığında1token'ı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:
Tokentemel sınıfınaSourceLocation locekle.start/endoffset'lerini kaldır (artıklockullan).ParserTokenyapısınaSourceLocation locekle,parseToken()içinde token'dan kopyala.ASTNodetemel sınıfınaSourceLocation locekle. 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:
Symbolyapısı:name(string),kind(enum: Variable, Function, Struct, Parameter),type(Type*),definitionLoc(SourceLocation),references(vector).SymbolTablesı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:
Typesoyut 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ü (
equalsmetodu). - 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, mevcutjson.hppiçindekicollectSymbolskaldırılacak) - Yapılacaklar:
SymbolCollectorsınıfı,ASTNodeziyaretçisi. AST'yi dolaşır:FunctionDecl→SymbolTable::define(name, FunctionSymbol)VariableDecl→SymbolTable::define(name, VariableSymbol), tipiniTypesisteminden çözümle.Identifierreferansları →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
.sqtdosyaları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:
JsonRpcMessageyapısı:jsonrpc,id,method,paramsalanları.parseMessage(string) -> JsonRpcMessagefonksiyonu: Ham stdin girdisini JSON-RPC mesajına çevirir (sadece ihtiyaç duyulan alanlar).serializeMessage(JsonRpcMessage) -> stringfonksiyonu: 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:
cmdLspfonksiyonu: stdin/stdout'tan JSON-RPC mesajlarını oku, işle, cevap ver.- Ana döngü:
initialize→initialized→textDocument/didOpen,didChange,definition,hover... shutdownveexitmesajlarını işle.
- Test kriteri:
saqut lspprocess'i başlatıldığındainitializeisteğinecapabilitiesile cevap versin.
Issue 2.3: Artımlı Derleme (Incremental Compilation) Desteği Ekle
- Dosya:
src/lsp/project_manager.hpp(yeni) - Yapılacaklar:
ProjectManagersınıfı: Açık dosyaları ve onların AST/Sembol Tablosu kopyalarını tutar.didOpen/didChangeile 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
.sqtdosyası 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:
.sqtdosyaları 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
.sqtdosyası açıldığındaif,formavi,"hello"turuncu,// yorumyeş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/fullisteğini işle.- AST + Sembol Tablosu kullanarak her token için
tokenType(function, variable, parameter, type, keyword) vetokenModifiers(declaration, readonly, static) belirle. - LSP semantic token delta formatında kodla ve döndür.
- Test kriteri: VSCode'da
int x = foo();yazıldığındax(değişken) ilefoo(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 fmtile otomatik formatlama,saqut docile 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
hoveristeğine bu dokümantasyonu ekle (zengin Markdown).
- Test kriteri:
/// Bu fonksiyon iki sayıyı toplaryorumu,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:
OPCodeenum'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.IROpDatayapısını yeni opcode'lar için güncelle (hedef adres, koşul register'ları).CodeGeneratorsınıfınaif,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çincmp,br_lt,retIR komutları üretilsin.
Issue 5.2: Interpreter (Sanal Makine)
- Dosya:
src/backend/interpreter.hpp(yeni) - Yapılacaklar:
Interpretersınıfı: IR komutlarını sırayla yürütür.- Sanal register'ları ve bellek (stack) yönetimi.
OPCodebaşı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:
CTranspilersınıfı: IR komutlarını C koduna çevirir.saqut transpile <dosya> -o output.ckomutu.- Üretilen C kodu
gcc/clangile derlenebilir ve çalıştırılabilir olmalı. #linedirektifleri 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 debugkomutu: DAP sunucusunu başlatır.launchveattachisteklerini 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,continueyetenekleri. - Breakpoint yönetimi:
SourceLocationile eşleşen satırlarda dur. - Değişken değerlerini okuma:
stackFrame'den sembol ismiyle değer bulma. variablesveevaluateisteklerini cevapla.
- Interpreter'a
- 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-travelile 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/completionisteğ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ığındax'in struct üyeleri listelensin.
Issue 7.2: Referans Bulma (Find References)
- Dosya:
src/lsp/handlers/references.hpp - Yapılacaklar:
textDocument/referencesisteğ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/outgoingCallsisteklerini 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.
CompilerConfigile her pas açılıp kapatılabilir olmalı.
- Constant folding:
- Test kriteri:
--opt-allile ç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 testkomutları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ı vesaqut.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 buildile çalışan bir program elde edilsin.
Issue 9.2: CompilerConfig ve Feature Toggle
- Dosya:
src/core/compiler_config.hpp - Yapılacaklar:
CompilerConfigyapısı: Tüm dil özellikleri (enableWhile,enableFor,enableClass...), optimizasyon pas'ları, çıktı formatı.saqutkomut satırından--disable-while,--skip-constant-foldinggibi 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-whileile 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:
testanahtar kelimesi veya#[test]anotasyonu.saqut testkomutu: 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); }testisaqut testile 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 jsonile JSON kütüphanesi projeye eklensin veimport 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 buildile 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.jsoniçindeactivationEvents,contributes.languages,contributes.commandstanımla.extension.js: LSP sunucusunu (saqut lsp) başlat, dil konfigürasyonunu yükle..vsixpaketi oluşturma betiği.
- Test kriteri: Eklenti VSCode'a yüklendiğinde
.sqtdosyaları 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.