[Fikir] Modernlik için Go Tarzı Tasarım Kararları (Basitlik, Hızlı Geri-Bildirim, Tek Binary) #110

Open
opened 2026-06-14 22:26:32 +03:00 by saqut · 0 comments
Owner

Giriş (Nedir, Neden Önemli?)

Go'nun başarısının çoğu dil özelliklerinden değil, geliştirici deneyiminden geliyor: çok hızlı derleme, yerleşik formatter (gofmt), tek-binary dağıtım, anlaşılır hata mesajları, "az ama öz" bir standart kütüphane. saQut zaten küçük/basit bir dil — bu issue, Go'nun araç zinciri (toolchain) felsefesini saQut'a nasıl taşıyabileceğimizi listeler.


Gelişme (Tavsiyeler)

  • Tek binary, sıfır bağımlılık: saqut CLI'sı tüm komutları (tokens, ast, symbols, ileride run, fmt, lsp) tek bir çalıştırılabilir dosyada barındırır — kullanıcı hiçbir ek paket/runtime kurmaz. Header-only C++ (ADR-003) bu hedefe zaten doğal olarak uygun; bu issue sadece bunu bir hedef olarak yazıya dökmek.
  • Hızlı derleme = hızlı geri-bildirim: Go'nun derleme hızı, "kodu yaz → hemen çalıştır" döngüsünü mümkün kılıyor. saQut için bu, saqut run (IR+VM) ile birleşince "saQut programını derleyip çalıştırmak, C++ programını derlemekten çok daha hızlı olmalı" gibi somut bir hedef olabilir — VM yorumlayıcı olduğu için bu zaten doğal bir avantaj.
  • gofmt zaten bir issue olarak var (#93, saqut fmt) — Go'nun "tartışmasız tek doğru format" felsefesi: format ayarlanabilir olmamalı (yapılandırma dosyası yok), bu da formatter'ın tasarımını basitleştirir.
  • Anlaşılır hata mesajları (#98 ile ilişkili): Go'nun hata mesajları kısa ve doğrudandır (undefined: x). saQut'un hata kataloğu (E001 vb.) zaten bu yönde — bu issue, mesaj dilinin (Türkçe/İngilizce) ve tonunun (kısa cümle + örnek) standartlaştırılmasını önerir.
  • Yerleşik test çalıştırıcı (#96 ile ilişkili) ve modül sistemi (#81-83) — Go'nun go test ve go mod'u, dilin "etrafına" değil içine gömülü araçlar. saQut'un CLI'sı da bu felsefeyle büyümeli: her yeni özellik (test, format, modül) ayrı bir 3. parti araç değil, saqut alt-komutu olmalı.

Açık Sorular

  • "Tek binary" hedefi, FFI (#88) ile gerilim yaratabilir mi — kullanıcı kendi C++ host fonksiyonlarını eklemek isterse, bu "tek binary"yi nasıl etkiler (dinamik kütüphane yükleme mi, yeniden derleme mi)?
  • Hata mesajı dili: şu anki dokümantasyon Türkçe — CLI çıktısı da Türkçe mi olacak, yoksa İngilizce + Türkçe explain (#issue) mi? Bu, uluslararası kullanıcı kitlesi hedefleniyorsa önemli bir erken karar.

İmza/Yorum: saQut'un "alet çantası" kimliği ile Go'nun "az şey, ama hepsi birlikte ve iyi çalışıyor" felsefesi doğal bir eşleşme — bu issue, var olan diğer issue'ları (#91-98) tek bir "araç zinciri vizyonu" şemsiyesi altında toplama denemesidir.

### Giriş (Nedir, Neden Önemli?) Go'nun başarısının çoğu **dil özelliklerinden değil, geliştirici deneyiminden** geliyor: çok hızlı derleme, yerleşik formatter (`gofmt`), tek-binary dağıtım, anlaşılır hata mesajları, "az ama öz" bir standart kütüphane. saQut zaten küçük/basit bir dil — bu issue, Go'nun **araç zinciri (toolchain) felsefesini** saQut'a nasıl taşıyabileceğimizi listeler. --- ### Gelişme (Tavsiyeler) - **Tek binary, sıfır bağımlılık:** `saqut` CLI'sı tüm komutları (`tokens`, `ast`, `symbols`, ileride `run`, `fmt`, `lsp`) **tek bir çalıştırılabilir dosyada** barındırır — kullanıcı hiçbir ek paket/runtime kurmaz. Header-only C++ (ADR-003) bu hedefe zaten doğal olarak uygun; bu issue sadece **bunu bir hedef olarak yazıya dökmek**. - **Hızlı derleme = hızlı geri-bildirim:** Go'nun derleme hızı, "kodu yaz → hemen çalıştır" döngüsünü mümkün kılıyor. saQut için bu, `saqut run` (IR+VM) ile birleşince **"saQut programını derleyip çalıştırmak, C++ programını derlemekten çok daha hızlı olmalı"** gibi somut bir hedef olabilir — VM yorumlayıcı olduğu için bu zaten doğal bir avantaj. - **`gofmt` zaten bir issue olarak var (#93, `saqut fmt`)** — Go'nun "tartışmasız tek doğru format" felsefesi: format ayarlanabilir **olmamalı** (yapılandırma dosyası yok), bu da formatter'ın tasarımını basitleştirir. - **Anlaşılır hata mesajları (#98 ile ilişkili):** Go'nun hata mesajları kısa ve doğrudandır (`undefined: x`). saQut'un hata kataloğu (E001 vb.) zaten bu yönde — bu issue, mesaj **dilinin** (Türkçe/İngilizce) ve **tonunun** (kısa cümle + örnek) standartlaştırılmasını önerir. - **Yerleşik test çalıştırıcı (#96 ile ilişkili)** ve **modül sistemi (#81-83)** — Go'nun `go test` ve `go mod`'u, dilin "etrafına" değil **içine** gömülü araçlar. saQut'un CLI'sı da bu felsefeyle büyümeli: her yeni özellik (test, format, modül) **ayrı bir 3. parti araç değil, `saqut` alt-komutu** olmalı. --- ### Açık Sorular - "Tek binary" hedefi, FFI (#88) ile gerilim yaratabilir mi — kullanıcı kendi C++ host fonksiyonlarını eklemek isterse, bu "tek binary"yi nasıl etkiler (dinamik kütüphane yükleme mi, yeniden derleme mi)? - Hata mesajı dili: şu anki dokümantasyon Türkçe — CLI çıktısı da Türkçe mi olacak, yoksa İngilizce + Türkçe `explain` (#issue) mi? Bu, uluslararası kullanıcı kitlesi hedefleniyorsa önemli bir erken karar. *İmza/Yorum:* saQut'un "alet çantası" kimliği ile Go'nun "az şey, ama hepsi birlikte ve iyi çalışıyor" felsefesi doğal bir eşleşme — bu issue, var olan diğer issue'ları (#91-98) tek bir "araç zinciri vizyonu" şemsiyesi altında toplama denemesidir.
saqut added the
fikir
kalite-mimari
labels 2026-06-14 22:26:32 +03:00
Sign in to join this conversation.
No description provided.