saqut-compiler/CLAUDE.md

6.5 KiB
Raw Blame History

CLAUDE.md — saQut Proje Bağlamı

Bu dosya her oturumda yüklenir. Amaç: projenin kimliğini, kilitli kararları, mevcut durumu ve çalışma konvansiyonlarını hızlıca hatırlatmak.

İletişim

  • Kullanıcıyla TÜM yazışmalar Türkçe. (Sahibi: Abdussamed ULUTAŞ.)

Proje nedir?

saQut, programlanabilir ve incelenebilir bir derleyici — bir "alet çantası" (toolbox). Asıl varlık sebebi dilin kendisi değil, derleme sürecinin her aşamasının dışarıdan görülebilir/müdahale edilebilir olması: token'lar, AST, sembol tablosu, optimizasyon öncesi/sonrası ve IR ayrı ayrı incelenebilir. Uygulama dili C++ (header-only eğilimli, ADR-003). CMake + Ninja. build/ git'te izlenir.

Kilitli kararlar (değiştirme — gerekçeler ADR'lerde)

  • Çalıştırma modeli: IR + bytecode VM (yorumlayıcı döngü). Tree-walker DEĞİL, gerçek makine-kodu JIT DEĞİL (kapsam dışı; öncelik determinizm + incelenebilirlik, ham hız değil). C'ye transpile ileride geçerli 2. backend. İleride makine kodu gerekirse libgccjit/LLVM'e bağlanılır (çok uzak). Bellek = host C++ heap; özel allocator yok. (ADR-015)
  • Dil kimliği: prosedürel, C-ailesi sözdizimi, value semantics, zorunlu class/main boilerplate yok. Yok: class/OOP, closure, generic, kullanıcı pointer'ı (*/&), auto/tip çıkarımı, gizli int↔float (tek istisna sabit folding). Var: struct, tipli fonksiyonlar, array (int[]). interface ertelendi (reddedilmedi, ADR-018).
  • Analiz vs Optimizasyon: Analiz orijinal AST üstünde annotation; optimizasyon klon üstünde dönüşüm. ASTNode::clone() yük taşıyan merkezi bileşen (parent pointer'lar + sembol tablosu remap edilir, ADR-007). Fixpoint döngüsü + iterasyon tavanı (maxFixpointRounds, ADR-009).
  • Literal/tip kuralı: tamsayı literali bağlama-göre tiplenir (float x = 1; geçerli; int y = 1.5;→E003; değişken→değişken gizli dönüşüm yok). Döngüsel by-value struct → E010. (ADR-010/011)
  • FFI seam: kasıtlı "host fonksiyonu çağır" mekanizması (callhost); print ilk müşteri (ADR-016). Batteries = sınır/FFI problemi, "zlib'i yeniden yaz" değil; kripto asla elle yazılmaz (ADR-017).

Mevcut durum (yapılan vs planlanan)

  • Çalışıyor: lexer, tokenizer, Pratt parser, AST, AST'nin JSON serileştirmesi, CLI iskeleti (tokens/ast/symbols/run), konum takibi, basit aritmetiği düşüren minimal IR deneyi.
  • Planlı (henüz YOK): sembol tablosu, semantik analiz, tip sistemi, diagnostic motoru, optimizasyon, IR+bytecode VM ile çalıştırma.
  • Birinci kilometre taşı ("bitti" tanımı): examples/fibonacci.sqt (recursive + iterative) derlenip çalıştırılabilmeli.
  • İlke: Önce uçtan uca tek dikey dilim, sonra çerçeve. Erken soyutlamadan kaçın.

Belge haritası

  • readme.md — toolbox çerçevesi, built-vs-planned, dil kimliği, çalıştırma modeli.
  • docs/fikirler.md — ADR-001…005 (backend stratejisi, parser, header-only, token, IR).
  • docs/adr-frontend-analiz.md — ADR-006…019 (frontend, analiz/optimizasyon, çalıştırma modeli, FFI, interface, bellek).
  • docs/roadmap-frontend.md — faz-faz uygulama planı (Faz 04 → fibonacci).
  • docs/transkript-frontend-tasarim.md — tasarım oturumu transkripti.
  • examples/fibonacci.sqt — geçerli referans program.
  • examples/parser-stress/ — yalnızca parser'ı zorlayan, geçerli olmayan fixture'lar.

Gitea issue yönetimi

  • Repo: git.saqut.com/saqut/saqut-compiler (Gitea). Cloudflare, Python-urllib User-Agent'ını banlıyor → tarayıcı User-Agent'ı şart.
  • scripts/gitea.py — API istemcisi (~/.git-credentials'tan kimlik okur). Komutlar: list/get/create/edit/comment. Toplu issue üretimi: scripts/create_issues.py, create_future_issues.py, create_syntax_test_issues.py.
  • Issue yapısı (bu oturumda kuruldu):
    • #6973 faz-plani — Faz 04 (Tip+Diagnostic, AST refactor, Symbol Table, Semantik Analiz, Optimizasyon). Format: Giriş/Gelişme/Sonuç-Başarı Kriterleri + mühendis-olmayan analiz.
    • #7498, #111 fikir — IR/VM tasarımı, modül/import, tip genişletmeleri (decimal/date/enum/string), FFI/builtin/stdlib, tooling (LSP/highlight/fmt), gelecek vizyonu (time-travel debug, WASM playground, test bloğu, paket yöneticisi). Format: Giriş/Gelişme/ık Sorular (başarı kriteri YOK).
    • #99105 test-senaryosu — kaynak kod + beklenen çıktı içeren golden-test'ler.
    • #106110 cli-ux/kalite-mimari — CLI fikirleri, C/Java/Go tarzı tavsiyeler.
    • LSP (#91) ve CLI (#107) Tier 04 katmanlı yetenek haritası olarak yazıldı; #111 ekosistem bağımlılık sırası.

Lisans (LICENSE.md — bu oturumda yeniden yazıldı)

  • Model: "Kaynağıık — Ticari Kullanımı Kısıtlı" (açık kaynak ama özgür yazılım değil). Önceki GPL-tarzı copyleft metin niyetle çelişiyordu, değiştirildi.
  • Çekirdek ilke: Gelir saQut'un ürettiği Çıktıdan elde edilir, saQut'un kendisinden değil.
  • Serbest (ticari dahil): kod yazmak/derlemek, üretilen programları/exe/işlenmiş veriyi satmak, derleyiciyi özel araç olarak iç kullanım.
  • İzin gerektirir (telif sahibinden): derleyiciyi 3. tarafa kurup ücret almak, Web-IDE/derleme servisi, canlı backend motoru, otomasyon/AI aracı, alt-bileşen gömme, iç parçaları (AST/optimizatör) ticari yeniden kullanım. Runtime'a bağımlı sürümlerde sunucu-tarafı ticari kullanım da bu kapsamda.
  • Maddeler: §7 Katkı (PR herkese açık, merge kararı yalnızca Abdussamed ULUTAŞ; katkı sahipleri ticari lisanslama dâhil hakları telif sahibine verir), §8 Patent (lisans + dava açana otomatik fesih), §9 Marka ("saQut" adı korunur), §11 Fesih (ihlalde otomatik + 30 gün düzeltme; edinilmiş Çıktı korunur).
  • Üç dilde (TR/EN/DE), TR esas. Ticari lisans iletişimi: saqutsoftware+gitea@gmail.com
  • Not: Bespoke lisans; ciddi ticari aşamada hukukçu gözden geçirmesi önerilir. Telif yalnızca kodu/belgeyi korur, fikri/tasarımı değil (sıfırdan yeniden yazım engellenemez); isim ise marka ile korunur.

Çalışma konvansiyonları

  • Commit mesajları sonunda: Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>.
  • Ana dal master; commit/push kullanıcı isteyince yapılır.
  • Wiki API'si Gitea'da REST üzerinden çalışmadı; wiki içeriği wiki.md'ye yazılıp kullanıcı tarafından elle yapıştırılıyor.