3 Home
saqut edited this page 2026-06-14 23:03:39 +03:00
This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

saQut Nedir?

saQut, C ailesi sözdizimine sahip, basit ve prosedürel bir programlama dili için yazılan, açık kaynaklı bir derleyici projesidir. C++ ile geliştirilmektedir ve şu anda aktif olarak büyütülmektedir.

Projenin asıl amacı "harika bir programlama dili" yaratmak değil, derleme sürecinin her aşamasını dışarıdan görülebilir ve incelenebilir hâle getirmektir. Kaynak kodun token'lara ayrılması, bir ağaç yapısına (sözdizimi ağacı) dönüşmesi, isimlerin/tiplerin çözümlenmesi, kodun sadeleştirilmesi (optimizasyon) ve sonunda çalıştırılması — bu adımların her biri ayrı ayrı görüntülenebilir, kaydedilebilir ve karşılaştırılabilir. saQut bu yüzden kendisini bir "alet çantası" (toolbox) olarak tanımlıyor: dilin kendisi küçük bir vitrin, asıl değer bu vitrinin üzerinde çalışan aletlerde.

Bu proje; derleyicilerin nasıl çalıştığını öğrenmek isteyenler, küçük bir dilin baştan sona nasıl inşa edildiğini adım adım takip etmek isteyenler ve kendi küçük diller/araçlar üzerinde deney yapmak isteyen meraklılar için uygundur. Üretim ortamında kullanılan büyük, endüstriyel bir derleyici değildir — küçük, anlaşılır ve şeffaf kalması hedeflenir.


Proje kimliği ve dil

saQut'un derlediği dil; sınıf (class) kavramı, kalıtım, generic'ler veya kullanıcının doğrudan kullanabileceği pointer'lar gibi karmaşık kavramlar içermez. Bunun yerine fonksiyonlar, basit veri yapıları (struct), diziler ve klasik kontrol akışı yapıları (if, for, while, do-while) üzerine kurulu, C diline yakın, sade bir sözdizimine sahiptir. Bir programın doğrudan bir fonksiyon tanımıyla başlayabilmesi gibi, gereksiz kalıpları (boilerplate) azaltan küçük tercihler de vardır.

Derleyicinin kendisi C++ ile yazılmıştır ve CMake + Ninja ile derlenir. Proje deposunu klonladıktan sonra standart bir CMake akışıyla (yapılandırma ve ardından derleme) saqut adlı bir komut satırı aracı üretilir. Bu araç, bir .sqt dosyasını okuyup token listesini, sözdizimi ağacını (AST) ve (ilerleyen aşamalarda) sembol tablosunu, optimizasyon öncesi/sonrası hâlini ve ara temsilini (IR) görüntüleyebilir; nihai hedef ise bu programları doğrudan çalıştırabilen bir yorumlayıcıya (bytecode VM) sahip olmaktır.

Kim yazıyor, lisans ve kullanım

Proje Abdussamed ULUTAŞ (saqut nicname) tarafından geliştirilmekte ve depo üzerinde aktif olarak ilerletilmektedir. Kaynak kodu görülebilir (açık kaynak) olsa da, saQut özgür yazılım değildir — derleyicinin kendisiyle ilgili kullanım hakları sınırlıdır.

Kişisel/öğrenme amaçlı kullanım serbesttir: derleyiciyi kendi bilgisayarınızda kurabilir, üzerinde inceleme yapabilir, kendi ihtiyaçlarınız için değiştirebilirsiniz. Ancak derleyicinin kendisinin ticari amaçla kullanılması, çoğaltılması veya üzerinde değişiklik yapılarak dağıtılması/sunulması (örneğin derleyiciyi bir sunucuya kurup buna dayalı bir web-IDE veya "kodunu yapıştır, derlensin" tarzı bir servis sunmak) izin gerektirir.

Buna karşılık, saQut ile yazılıp derlenen programlar üzerinde hiçbir kısıtlama yoktur. Kendi bilgisayarınızda yazıp derlediğiniz bir saQut programını istediğiniz şekilde — ticari dahil — kullanabilir, bir sunucuda çalıştırabilir veya dağıtabilirsiniz. Kısıtlama yalnızca derleyicinin kendisini (ürünü/aracı) yeniden sunmaya yöneliktir, onunla üretilen çıktıya değil.

Diğer derleyicilerden farkı

Çoğu derleyici, kaynak kodu alıp doğrudan çalıştırılabilir bir çıktıya dönüştüren, ara adımları kullanıcıdan saklayan bir "kara kutu" gibi çalışır. saQut'un yaklaşımı tam tersi: her ara adımın çıktısı (token'lar, ham sözdizimi ağacı, sembol tablosu, optimize edilmiş hâl, ara temsil) ayrı komutlarla görülebilir ve birbirleriyle karşılaştırılabilir hâlde tutulur. Örneğin bir kod parçasının optimizasyondan önceki ve sonraki hâli yan yana incelenebilir. Bu, saQut'u "bir dili çalıştırmak için" değil, "bir derleyicinin içini görmek ve onunla deney yapmak için" kullanışlı kılar.

Geleceği — nereye gidiyor?

Şu an itibarıyla temel altyapı (kaynak kodu okuma, token'lara ayırma, sözdizimi ağacını oluşturma ve bu ağacı görüntüleme) çalışır durumdadır. Devam eden çalışma, programdaki isimlerin ve tiplerin anlaşılması (sembol tablosu ve tip denetimi), hataların düzenli biçimde raporlanması ve isteğe bağlı, öncesi/sonrasıyla karşılaştırılabilir bir optimizasyon adımı üzerinedir. Bunların hepsi tamamlandığında bir sonraki büyük hedef, programları gerçekten çalıştırabilen bir ara temsil ve yorumlayıcı (bytecode VM) eklemektir; bu sayede örnek bir Fibonacci programı baştan sona derlenip çalıştırılabilecektir.

Daha ileride; birden fazla dosyadan oluşan programların birbirini görebilmesi (modül/import sistemi), tarih, ondalıklı sayı gibi ek veri tipleri, dış kütüphanelerle bağlantı kurma (FFI), küçük bir standart fonksiyon kümesi, kod biçimlendirici, sözdizimi renklendirme ve editörler için akıllı tamamlama/hata gösterimi sunan bir dil sunucusu (LSP) gibi konular da yol haritasında yer alıyor. Tüm bu adımlar, projenin "her aşaması görülebilir ve incelenebilir" temel felsefesi korunarak, küçük ve anlaşılır adımlarla ilerletilmeyi hedefliyor.