Küçük, prosedürel bir dil. Ama asıl olay derleyicisinde: her aşama şeffaf. Token, AST, sembol tablosu, IR; hepsi isimlendirilmiş, okunabilir, makineye aktarılabilir.
Tipik bir derleyici yalnızca kaynak girdisini ve son çıktısını gösterir;
aradaki aşamalar gözlemlenemez. saQut her aşamayı, isimlendirilmiş ve makinece
okunabilir bir sonuç üreten ayrı bir komut olarak sunar:
Terminal window
saquttokenshello.sqt# token akışı (JSON)
saqutasthello.sqt# soyut sözdizim ağacı (JSON)
saqutsymbolshello.sqt# sembol tablosu (JSON)
saqutirhello.sqt# 3 adresli ara kod
saqutrunhello.sqt# derle ve çalıştır
Dil bilinçli olarak küçük ve C benzeri tutuldu. Amacı, incelenebilir işlem
zincirine derlenecek bir kaynak sağlamaktır.
Token, AST, sembol tablosu ve ara kodun her biri isimlendirilmiş ve
makinece okunabilir bir çıktıdır. saqut ast çıktısını kendi aracınıza
yönlendirin, optimize edilmiş ağacı karşılaştırın ya da yalnızca
saqut symbols çıktısından bir LSP kurun.
Prosedürel ve açık
C ailesi sözdizimi. Nesne yönelimi yok, jenerik tip yok, gizli tip
dönüşümü yok. int ile float karıştığında belirtilmiş tek bir kural
geçerli. Derleyici yazdığınız şeyi çalıştırır.
Değer ve referans, işaretçi yok
Temel tipler (int, float, bool, byte) kopyalanır. Bileşik tipler
(string, struct, array) referans ile paylaşılır. Programcının
görebileceği & veya * yoktur.
Nullable isteğe bağlıdır
Bir değer, siz T? olarak bildirmedikçe null olamaz. Tip
denetleyici, null olamaz bir değerin null olamayacağını kullanımdan önce
doğrular; bu yüzden çalışma zamanında null denetimi yapılmaz.
Belirlenimci sanal makine
Referans arka uç bir bytecode sanal makinesidir: aynı girdi her çalıştırmada
aynı çıktıyı üretir. LLVM bilinçli olarak kullanılmaz. Deneysel bir MIR JIT
–jit ile çalışır; sırada gömülü çalışma zamanlı AOT var.
Yakalanabilir hatalar
try / catch / throw ile struct tabanlı
hata yönetimi. Sınır aşımı, sıfıra bölme ve null referans hataları programı
sessizce sonlandırmak yerine yakalanabilir bir hata fırlatır.
2cb8c99 | Parser artık eksik kapanış parantezi, köşeli parantez ya da
süslü parantez gibi 25 farklı sözdizimi hatasını açık ve net bir hata
mesajıyla bildiriyor.
87d1f46 | run, check ve ir komutlarının hepsi artık aynı türden
bir hata için aynı çıkış kodunu (exit code) veriyor; hangi komutu
kullandığın sonucu değiştirmiyor.
28d9439 | exec komutu artık parser hatalarını gösteriyor.
301eaf6 | ast ve symbols komutları da parser hatalarını artık
exec ve run ile aynı şekilde raporluyor.
443d590 | saqut ir komutu artık her IR talimat türünü çıktıda
gösteriyor.
5490018 | Bir fonksiyon açık bir return olmadan sona eriyorsa, saqut ir bu örtük dönüşü de artık gösteriyor.
ebf9538 | saqut ir çıktısındaki renkler artık yalnızca gerçek bir
terminalde basılıyor; çıktı bir dosyaya veya başka bir programa
yönlendirildiğinde renk kodları karışmıyor.
c015519 | Bir switch ifadesinin tüm dalları return ediyorsa,
derleyici bunu artık doğru tespit ediyor.
793622d | Dizi olmayan bir değere [index] ile erişmek artık derleme
zamanında hata veriyor.
7f871b7 | VM ile JIT’in her sonuçta aynı şeyi ürettiğini otomatik
olarak doğrulayan bir test altyapısı kuruldu.
2f31cb2 | int32, longint64, float32 ve double64 artık VM’de ve
JIT’te birebir aynı sonucu veriyor.
16 Temmuz 2026 · 0.8.0 🏆 · Deneysel JIT’in İlk Nefesi
c3451f7 | sys modülü geldi: rastgele sayı üretme, ortam
değişkenlerini okuma, bekleme (sleep) ve komut satırı argümanlarına
erişim.
76c9bc6 | date tipi geldi: UTC zaman damgasını milisaniye cinsinden
tutuyor.
35790a2 | math::PI ve math::E sabitleri geldi.
5433cb3 | İzin (capability) sistemi geldi: dosya ve ağ erişimi,
--allow-fs / --allow-net / --allow-sys bayrakları açıkça
verilmeden artık reddediliyor.
1e0fbd3 | caps::drop ve caps::has geldi: çalışan bir program kendi
izinlerinden bilerek vazgeçebiliyor ya da hangi izinlere sahip olduğunu
sorgulayabiliyor.
04d90b5 | Bir blok içinde, dıştaki bir değişkeni aynı isimle
gölgeleyen yeni bir değişken tanımlandığında, derleyici artık doğru
değişkene erişiyor.
7c5d90a | Çöp toplayıcı (GC) artık bellek kullanımı belirli bir eşiği
aştığında kendiliğinden çalışıyor.
587bb57 | Yerleşik (builtin) fonksiyonların çağrılma şekli yenilendi:
artık deger.metod() gibi nokta ile çağrılabiliyor ve ad alanlarına
(namespace) ayrılıyor.
845588d | byte tipi geldi: 8-bit işaretsiz değer, 0-255.
025a667 | Hata ayıklama protokolü (DAP) baştan doğru şekilde yazıldı:
editörler artık bir saQut programını adım adım çalıştırıp
durdurabiliyor, değişkenleri inceleyebiliyor.
e4abc6f | Bir programı hata ayıklarken artık gerçekten
duraklatabiliyorsun; program dondurulmadan (non-blocking) bekletiliyor.
75e3dd1 | Adım adım çalıştırma (step) artık her komutu kapsıyor ve
duraklama tam olarak doğru satırda gerçekleşiyor.
d26575b | Editördeki otomatik tamamlama (code completion) daha
güvenilir hale getirildi.
11af652 | Editörden artık değişken/fonksiyon isimlerini güvenle
değiştirebiliyorsun (rename) ve bir fonksiyonu çağırırken parametre
ipuçlarını görebiliyorsun.
b9ca166 | İki modül birbirini dolaylı olarak import ederse (döngüsel
bağımlılık), derleyici bunu artık E_MODULE_CYCLE hatasıyla
bildiriyor.
11 Temmuz 2026 · 0.4.0 · Editör Artık İçeri Bakabiliyor
ad45bd5 | Editör desteğinin temelleri atıldı: sözdizimi vurgulama
(TextMate grameri), bir dil sunucusu (LSP) ve hata ayıklama protokolü
(DAP) iskeleti geldi.
b66226b | Dil sunucusu (LSP) artık bir dosyayı diske kaydetmeden,
editördeki anlık haliyle derleyebiliyor.
f3a7853 | Dil sunucusu artık dosya içindeki konumları (satır/sütun)
çok daha güvenilir hesaplıyor, çok dosyalı projelerde de doğru
çalışıyor.
934a903 | AST, sembol tablosu ve IR çıktılarına pastel renklendirme
eklendi.
6651a91 | Bir struct başka bir struct’ı alan olarak içeriyorsa,
değişken tanımlanır tanımlanmaz iç içe geçmiş tüm alanlar da otomatik
olarak hazırlanıyor.
d6dd530 | saqut bench komutu geldi.
585b8eb | İkinci bir çalıştırma arka ucu olarak MIR tabanlı bir JIT ve
gömülü çalışma zamanlı bir AOT derleyicisine karar verildi.
24 Haziran 2026 · 0.3.0 · Dil Parçalara Ayrılabiliyor