İçeriğe geç
Bir geliştiricinin saQut maskotuna (gülümseyen, üzerinde "sqt" yazan yuvarlak köşeli bir kare karakter) bir akış şeması uzattığını, yanında bellek, depolama ve ağ simgelerinin bulunduğunu gösteren bir illüstrasyon.

saQut

Programını yaz, sonra derleyicinin nasıl düşündüğünü izle. saQut, derleyicisi hiçbir şeyi saklamayan prosedürel bir dildir: kaynaktan çalışan koda kadar her adım çalıştırabileceğin, okuyabileceğin ve kendi araçlarına bağlayabileceğin bir komuttur.

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
saqut tokens hello.sqt # token akışı (JSON)
saqut ast hello.sqt # soyut sözdizim ağacı (JSON)
saqut symbols hello.sqt # sembol tablosu (JSON)
saqut ir hello.sqt # 3 adresli ara kod
saqut run hello.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.

  • Bytecode VM: referans çalışma ortamı. Programın basit komutlara derlenir ve saQut içindeki bir döngü tarafından çalıştırılır. Diğer her parça buna göre doğrulanır: aynı girdi, her seferinde aynı çıktı.
  • JIT derleyici (--jit): aynı komutları program başlarken doğrudan makine koduna çevirir. Döngüler ve hesaplar çok daha hızlı çalışır. Deneysel durumdadır ve VM ile birebir aynı çıktıyı vermek zorundadır.
  • Çöp toplayıcı (GC): hiçbir yerden erişilemeyen string, dizi ve struct’lar (birbirini gösteren döngüler dahil) kendiliğinden serbest bırakılır. free yazmazsın; --gc-stats neyin toplandığını gösterir.
  • LSP (Dil Sunucusu): editörlerin “tanıma git”, tip ipucu, yeniden adlandırma ve anlık hata çizgileri için kullandığı protokol. saqut lsp bunu doğrudan konuşur.
  • DAP (Hata Ayıklama Adaptörü): editörlerin kesme noktası ve adım adım çalıştırma için kullandığı protokol. saqut dap ile programı durdurup değişkenlerine bakabilirsin.
  • Yakalanabilir çalışma zamanı hataları: sıfıra bölme, dizi sınırı aşımı, null erişimi ve yığın taşması, kodu, mesajı ve kaynak konumu olan ve catch ile yakalanabilen bir hata üretir.
  • Modüller ve standart kütüphane: kodu import / export ile dosyalara böl; dosyalara, yollara, metin kodlamaya, tarihe, terminale ve sürece fs, path, utf8, date, sys gibi modüllerle ulaş.
  • Her şey makinece okunabilir: token, AST, sembol, IR ve tanılar JSON ya da JSONL olarak çıkar; betikler ve CI derleyicinin ne gördüğünü okuyabilir.

  1. hello.sqt adında bir dosya oluşturun:

    int main() {
    print("Merhaba saQut!");
    return 0;
    }
  2. Çalıştırın (class veya hazır kalıp kod gerekmez; program main fonksiyonundan başlar):

    Terminal window
    saqut run hello.sqt
  3. Merak ettiğiniz herhangi bir aşamanın içine bakın:

    Terminal window
    saqut ast hello.sqt --json

Başlangıç rehberi derleyiciyi kurmayı ve daha uzun programlar yazmayı anlatır.


Sıralı bir dizide ikili arama. Her adım arama aralığını yarıya indirir; bu yüzden 10.000 elemanlı bir dizi en fazla 14 karşılaştırmada sonuçlanır.

int binarySearch(int[] values, int target) {
int low = 0;
int high = values.length() - 1;
while (low <= high) {
// (low + high) / 2 yerine (high - low) / 2:
// ilk biçim büyük dizilerde int taşmasına yol açabilir.
int mid = low + (high - low) / 2;
if (values[mid] == target) {
return mid;
}
if (values[mid] < target) {
low = mid + 1;
} else {
high = mid - 1;
}
}
return -1; // bulunamadı
}
int main() {
int[] sorted = [2, 5, 8, 12, 16, 23, 38, 56, 72, 91];
print(binarySearch(sorted, 23)); // 5
print(binarySearch(sorted, 7)); // -1
return 0;
}

Fonksiyonlar, diziler, kontrol akışı ve print(). Zorunlu tören kodu yok. Aynı program VM’de ve JIT’te aynı çıktıyı üretir.


Şeffaf işlem zinciri

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 ve VM ile bayt bayt eşleşmek zorundadı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.



Kaynak -> Sözcük Analizi -> Sözdizimi Analizi -> AST -> Sembol Toplama -> Tip Denetimi
-> Optimizasyon (sabit katlama + ölü kod temizliği) -> Ara Kod -> Bytecode VM -> çıktı

Her ok, çalıştırıp inceleyebileceğiniz bir CLI komutuna karşılık gelir.


3 Ekim 2026 · 1.0.1 · Çok İş Parçacığı, Keskinleşen Editör

Bölüm başlığı “3 Ekim 2026 · 1.0.1 · Çok İş Parçacığı, Keskinleşen Editör”
  • 37542b1 | Thread’ler önizleme olarak geliyor. thread { ... } hemen çalışan bir thread başlatır ve sana join(), stop() ve running() çağırabileceğin bir Thread verir. Her thread’in kendi heap’i, kendi çöp toplayıcısı ve globallerin kendi kopyası vardır; thread’ler birbirinin nesnesine hiç dokunmaz. VM referans backend’dir; JIT deneyseldir.
  • 46f8c35 | Thread’ler arası veri için yeni shared globaller (int, float, bool, Pool, List). Okuma/yazma atomiktir; +=, -=, ++, -- da atomiktir. Pool sınırlı ve bloklayan bir kuyruk, List yalnız sona eklenen bir listedir; içlerine konan her değer derin kopyalanır.
  • 46f8c35 | lock a, b; kilitleri sabit bir sırayla alır, bu yüzden iki kilit birbirini kilitleyemez; blok bitince kilitler bırakılır. Derleyici kuralları denetler (E014–E019), shared değişkende atomik olmayan x = x + 1 için (W008) ve kilit içindeki bloklayan çağrılar için (W009) uyarır.
  • c5d2140 | Thread’ler VM’de ve deneysel JIT’te (0b8eded) çalışır; örnekler ve kısa bir rehber docs/threading-guide.md içinde.
  • 5fecf75 | print ve dosya yazımları kilit altında tek parça olarak yazılır, farklı thread’lerin satırları birbirine karışmaz.
  • 19b99aa | Hata ayıklayıcı thread’leri tanır: listeler, başlama/bitiş olaylarını bildirir, durma noktasında tüm thread’leri durdurur, işçi thread’in yığınını incelemene izin verir ve bir Shared kapsamı gösterir. Debugger altındaki deadlock takılmak yerine raporlanır.
  • 6578af2 | Thread kullanmayan programlar bunun için yaklaşık %0,10 öder (donanım sayaçlarıyla ölçüldü).
  • 72bd1ca | s[i], string’in i’nci karakterini (0 tabanlı, Unicode kod noktası) tek karakterlik string olarak verir; VM’de ve JIT’te aynıdır. String değiştirilemez olduğundan s[i] = ... derleme hatasıdır.
  • 72bd1ca | Dizi indeksi artık null olmayan int, byte veya longint olmalı. d["x"], d[1.5], d[true] ve int? eskiden kabul edilip yanlış çalışıyordu; enum ile indekslemek artık as int ister.
  • 72bd1ca | VM artık dizi indeksini 32 bite kesmiyor: d[4294967297] eskiden d[1]’i okuyup yazıyordu, JIT ise doğru biçimde sınır dışı hatası veriyordu. İki backend de aynı sonucu veriyor.
  • 69913ef | 5 = 3;, 5 += 3; ve 5 &= 3; eskiden derleniyordu. Atamanın sol tarafı artık değişken, struct alanı veya dizi elemanı olmalı (E027).
  • 8ae879d | int a = 1 ? 2 : 3;, 7 ? 5 ve 5 ! 3 eskiden derlenip 0 basıyordu. Artık açık bir sözdizimi hatası (E901).
  • eb9937e | EOL adlı bir değişken artık programı sessizce kesmiyor.
  • 835f42e | Her şeyi kapsayan E003 kesin kodlara bölündü. E003 artık yalnız atama, argüman veya dönüş değerindeki tip uyuşmazlığıdır; gerisi E020–E027 oldu (literal, operatör, nullable, as, switch, çağrı, metot alıcısı, yazılabilir konum). Mesajlar değişmedi. Araçların eşleştirebileceği kodlar docs/compiler-errors.md içinde.
  • 46f6026 | Bir komut artık kabul etmediği seçeneği reddediyor (saqut tokens a.sqt --jit eskiden 0 ile çıkıyordu). Eski file:, output: ve ast: önekleri kalktı; düz yol kullanın.
  • 360bad2 | saqut ast tüm modül grafiğini yükler; import içeren programlar artık sahte E001/E007 vermez ve her birimi basar.
  • 539885f | Tamamlama kapsam bilinçli ve bozuk kodda çalışıyor: a.b.c, a[i], f(), enum adları ve Pool/List’in gerçek eleman tipini anlar; yazarken son temiz ayrıştırmaya düşer.
  • 962785e | Proje geneli indeks: referans bulma ve yeniden adlandırma dosyalar arasında çalışır, workspace/symbol desteklenir, tamamlama henüz import etmediğin export’ları önerir ve import’u senin yerine ekler.
  • 3687e5c | Katlama, sembol ağacı, soluk gösterilen kullanılmayan kod, kod eylemleri, kod mercekleri (“Referanslar: N”) ve parametre adı ipuçları.
  • 28f42c8 | 200 dosyalık import zincirinde ilk proje indeksi 2,84 sn’den 38 ms’ye indi.
  • 2ce7a11 | Hata dalgaları artık satırın tamamını değil ilgili token’ı işaretler; yeniden adlandırma struct tiplerini ve alanlarını kapsar; durma noktaları sonraki çalıştırılabilir satıra kayar, stepIn çağrıya girer ve girişte durma main’in ilk satırından başlar.
  • a5f5b46 | VS Code eklentisi (1.0.1) shared, thread, lock, unlock, wait, Pool, List ve Thread’i renklendirir ve thread snippet’leri getirir.
  • 835f42e | Komut listesi, seçenek tablosu, tanı kodları, keyword tablosu, built-in metot kuralları ve opcode sonuç tipleri artık elle senkron tutulan birkaç kopya yerine tek bir yerde duruyor; yenisini eklemek tek dosyalık iş.
  • 84495b8 | Release derlemeleri GCC 14 ve 16’da sıfır uyarıyla derleniyor.
  • 34c22b5 | Eskiden sessizce yanlış sonuçla çalışan programlar artık açık bir hatayla duruyor: eksik operand (5 +), eksik ;, "\x41" gibi bilinmeyen kaçışlar ve dilde olmayan >>> operatörü.
  • 34c22b5 | Değer verilmeden bildirilen değişkenler her döngü turunda tipine uygun sıfırla başlıyor; VM’de ve JIT’te aynı.
  • 34c22b5 | % artık float ve double üzerinde çalışıyor; d *= k gibi bileşik atamalar int sağ tarafı doğru genişletiyor.
  • 34c22b5 | Sonsuz özyineleme askıda kalmak ya da çökmek yerine yakalanabilir E_STACK_OVERFLOW veriyor; sınır --max-call-depth=N ile ayarlanıyor.
  • 34c22b5 | Null bir struct’ın alanına erişmek yakalanabilir E_NULL veriyor.
  • 34c22b5 | Modüllerin kendi ad alanı var: özel adlar dosyalar arasında çakışmıyor, import { x as y } kaynak dosyalarda çalışıyor ve standart kütüphane importu yalnız onu yapan dosyada görünüyor.
  • 34c22b5 | Bağlamsız ondalık literal, belgelendiği gibi double.
  • 34c22b5 | CLI bilinmeyen seçenekleri ve fazladan argümanları yok saymak yerine reddediyor; tüm çalışma zamanı mesajları İngilizce.
  • 87068da | ** üs alma, önek ++x ve her sayısal tipte, dizi elemanında ve struct alanında ++/--.
  • 100979f | byte aritmetiği 8 bit içinde sarıyor; açık as byte dönüşümü aralığı hâlâ denetliyor.
  • 1f4a119 | Optimizasyon varsayılan olarak açık; --dont-optimize kapatıyor.
  • b33d569 | VM ve JIT tek bir çöp toplayıcıyı paylaşıyor.
  • 2862123 | String’ler iki arka uçta da tek bir GC’li gösterim kullanıyor.
  • 4ec9c2e | Çalışma zamanı değerleri 112 bayttan 40 bayta küçüldü.
  • 0a0847d | JIT hata denetimini yalnız hata verebilen komutlardan sonra yapıyor; saf hesaplama VM’e göre 57 kata kadar hızlandı.
  • c54b157 | JIT’te dizi okuma ve yazma, her paketli eleman tipinde doğrudan bellek erişimi.
  • 41efa5e | Yeni standart kütüphane modülleri: path, utf8, process, stdin/stdout/stderr, os ve terminal.
  • 651b04f | readFile, seek ve size ile dosyanın bir parçasını okuyabiliyor.
  • b7aa4d5 | Importlar yeniden adlandırılabiliyor: import { readFile as oku } from fs;.

24 Ağustos 2026 · 0.9.4 · Hatalar Artık Yakalanıyor

Bölüm başlığı “24 Ağustos 2026 · 0.9.4 · Hatalar Artık Yakalanıyor”
  • a08c756 | try / catch / throw artık JIT tarafında da çalışıyor: VM ile aynı çıktı ve çıkış koduyla; sıfıra bölme, başarısız dönüşüm ve dizi sınır aşımı gibi yakalanabilir çalışma zamanı hataları dahil. (Planlanan setjmp/longjmp tasarımının bir JIT’te tanımsız davranış olduğu ortaya çıktı; yerine talimat başına bekleyen-hata denetimi getirildi ve try içermeyen fonksiyonlar hâlâ sıfır maliyet ödüyor.)
  • a68cad7 | JIT çöp toplayıcısında bir hata düzeltildi: tahsis yapan özyinelemeli çağrılarda canlı bir nesne kullanılmaktayken süpürülüp yeniden kullanılabiliyordu. Gölge-yığın çerçeveleri artık çağrı başına düzgün geri sarılıyor.
  • 2095564 | Daha önce “JIT’te bilinçli bozuk” işaretli altı test programı artık VM ile bayt bayt eşleşmek zorunda; bu alanda parite yeniden ve istisnasız zorunlu.
  • 4568aac | Capability (izin) sistemi kaldırıldı (ADR-043): host çağrıları varsayılan olarak açık ve dosya işlemleri JIT’te de aynı şekilde çalışıyor.
  • 5aeec2b | String indeksleme ve length() artık bayt değil Unicode code point sayıyor.
  • 1cea6bf | upper() ve lower() artık gerçek Unicode harf dönüşümü yapıyor.
  • 4bc1b2b | Dosya içerikleri uçtan uca byte[] olarak işlenebiliyor.
  • b2ed2f8 | 64-bit hex sabitleri longint olarak tam bit desenini koruyor.
  • ec4174c | Init’siz string artık 0 yerine "" ile başlıyor; local değişkenler, struct alanları ve globaller dahil.
  • b9f5c62 | Dizi tipli struct alanları artık boş diziyle başlıyor: önce değer atamaya gerek olmadan record.items.push(x) çalışıyor.
  • 690025b | Hiç değer atanmamış modül-düzeyi int?, string? veya longint? artık gerçekten null okunuyor. Önce x == null slot sessizce 0 tuttuğu için false yanıtı veriyordu.
  • 2469bbf | Nullable değerle sıralama karşılaştırmaları (<, >, <=, >=) artık aritmetikteki gibi derleme hatası: önce null kapısından geçin (if (x != null) { x < 26 }). Eşitlik (==, !=) değişmedi.
  • 74296d6 | Yerleşik metodu çağırmadan kullanmak (parantezsiz s.length) artık sessizce 0 üretmek yerine derleme hatası.
  • dd8a493 | Modül kapsamında statement’lar (x = 5; gibi, herhangi bir fonksiyonun dışında) artık C++’daki gibi net bir hatayla reddediliyor; en üst düzey yalnızca bildirim kabul ediyor.
  • 030f4bd | Fonksiyonu zorunlu argümanları olmadan çağırmak artık derleme hatası; dil sunucusu da bu girdiyi zarifçe atlatıyor.
  • 907d904 | JIT sıcak dizi erişimlerini doğrudan bellek işlemine indiriyor ve derlenmiş kodu yeniden kullanıyor; dizi ağırlıklı döngüler daha hızlı.
  • 2645978 | Belgeler, dilde hiç var olmamış ?: üçlü operatörünü artık varmış gibi tanıtmıyor.
  • 2d6395c | --help artık standart bir kılavuz sayfası gibi okunuyor ve uygulanmayan komutlar CLI’dan tamamen çıkarıldı.
  • ee102a3 | Kağıt üzerinde var olup hiç koşulmayan on beş hata fixture’ı test koşucusuna bağlandı; sessiz hata sınıfları artık yakalanıyor.

1 Ağustos 2026 · 0.9.2 · Kendini Ölçmeyi Öğreniyor

Bölüm başlığı “1 Ağustos 2026 · 0.9.2 · Kendini Ölçmeyi Öğreniyor”
  • c2266ad | Tipine sığmayan bir int ya da longint sabiti artık sessizce başka bir değere dönüşmek yerine derleme zamanında yakalanıyor.
  • d85c7ee | decimal karşılaştırmaları artık decimal aritmetiğiyle aynı fikirde; para hesabı nihayet tutuyor.
  • fd7d082 | Node { Node? next; } gibi kendine referans veren struct’lar artık derleniyor ve T? alanlar null başlıyor.
  • 7c8f678 | JIT ve VM artık decimal değerlerde aynı cevabı, çalışma zamanı hatalarında aynı mesajı veriyor.
  • 3261321 | VM her talimatta debugger defteri tutmayı bıraktı: programlar yaklaşık 1.9 kat daha hızlı çalışıyor.
  • f4a60c8 | Parser her token’ı altı kez yerine bir kez okuyor.
  • 1a096ee | Kaynak konumları üçte bir boyutuna indi; uzun dosya yolları artık bellekte yer kaplamıyor.
  • 76d2340 | bench ölçtüğü programı %13 yerine %1.4 oranında etkiliyor ve tip denetimi kendi aşaması olarak görünüyor.
  • b576595 | Aynı programı AST, IR, VM ve JIT üzerinden çalıştırıp nerede anlaşamadıklarını raporlayan bir harness eklendi.
  • 77e9276 | 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.
  • a01f46e | 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.
  • c7d1d94 | exec komutu artık parser hatalarını gösteriyor.
  • fe90c0c | ast ve symbols komutları da parser hatalarını artık exec ve run ile aynı şekilde raporluyor.
  • 74e01a5 | saqut ir komutu artık her IR talimat türünü çıktıda gösteriyor.
  • c43e830 | Bir fonksiyon açık bir return olmadan sona eriyorsa, saqut ir bu örtük dönüşü de artık gösteriyor.
  • b48e0cf | 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.
  • f7a32f9 | Bir switch ifadesinin tüm dalları return ediyorsa, derleyici bunu artık doğru tespit ediyor.
  • 54881c8 | 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

Bölüm başlığı “16 Temmuz 2026 · 0.8.0 🏆 · Deneysel JIT’in İlk Nefesi”

🏆 saQut’un ilk resmi build’ini burada aldık.

  • 2b53460 | Deneysel MIR JIT arka ucu geldi: --jit bayrağıyla denenebiliyor.
  • dcc8a04 | Artık tüm programlar --jit ile uçtan uca çalışabiliyor.
  • 62651cf | JIT artık float değerlerini de derleyip çalıştırabiliyor.
  • 24acdc7 | JIT artık string değerlerini de derleyip çalıştırabiliyor.
  • 748f992 | 32-bit int taşması artık VM’de ve JIT’te birebir aynı sonucu veriyor (tanımlı taşma davranışı: 2’nin tümleyeni).
  • 574ce3f | saqut --version bayrağı ve statik release build geldi.
  • 879a85e | saqut run --profile ile VM ve JIT’in ısınma ve çalışma süreleri artık ayrı ayrı ölçülebiliyor.

15 Temmuz 2026 · 0.7.0 · Dil Dış Dünyaya Açılıyor

Bölüm başlığı “15 Temmuz 2026 · 0.7.0 · Dil Dış Dünyaya Açılıyor”
  • a785d2a | FFI (yabancı fonksiyon arayüzü) desteği geldi: ffi anahtar kelimesiyle dilin dışındaki (host) fonksiyonlar tanıtılıp doğrudan çağrılabiliyor.
  • 2259bfb | fs modülü geldi: dosya okuma, yazma, varlık kontrolü ve silme.
  • 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: --allow verilmezse tüm capability’ler açık; verildiğinde --allow fs,net,sys açık whitelist olur.
  • 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.

13 Temmuz 2026 · 0.5.0 · Adım Adım Hata Ayıklama

Bölüm başlığı “13 Temmuz 2026 · 0.5.0 · Adım Adım Hata Ayıklama”
  • 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

Bölüm başlığı “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

Bölüm başlığı “24 Haziran 2026 · 0.3.0 · Dil Parçalara Ayrılabiliyor”
  • 8136773 | enum tip desteği geldi.
  • 2af0bce | decimal tipi geldi: derleyici ve sanal makine (VM) baştan sona destekliyor.
  • 878faa3 | struct dizileri (Point[]) ve çok boyutlu diziler desteği geldi.
  • b9a6176 | built-in method sistemi geldi: E::method(args) sözdizimi.
  • 4a84e59 | Modül sistemi geldi (import/export, çok dosyalı derleme); beraberinde exec komutu da geldi.
  • 4a64812 | Derleyici artık 37 gerçek algoritmaya (sıralama, arama ve daha fazlası) karşı test ediliyor.
  • 060b4a0 | Her hata mesajına, sorunu nasıl çözebileceğini gösteren bir ipucu eklendi.
  • 53823f1 | Çöp toplayıcı (GC) yenilendi: bellek artık bir fonksiyondan çıkıldığı anda, her çalıştırmada aynı şekilde temizleniyor.
  • 50c2615 | Nullable (T?) olarak tanımlanan struct alanları artık doğru ayrıştırılıyor ve tipleniyor.
  • d7872f7 | Kullanıcıya görünen tüm mesajlar Türkçeden İngilizceye çevrildi.
  • b8c2d95 | Sabit katlama (constant folding) artık bellek çökmesine (segfault) yol açmadan çalışıyor.
  • 3baa5e3 | Bir fonksiyon struct döndürüyorsa, dönüş tipi artık doğru şekilde tanınıyor.
  • 8545ce4 | Bitsel operatörler (&, |, ^, <<, >>) artık IR’a tam olarak dönüştürülüyor, test kapsamı genişletildi.

20 Haziran 2026 · 0.1.0 · Sıfırdan Bir Dil Doğuyor

Bölüm başlığı “20 Haziran 2026 · 0.1.0 · Sıfırdan Bir Dil Doğuyor”
  • 2bf52f5 | Kaynak kodu token’lara ayıran lexer/tokenizer tamamlandı. Derleyicinin ilk aşaması hazır.
  • 4839f37 | Sözdizimi çözümleyici (parser) tamamlandı: ifadeler artık operatör önceliğine göre doğru bir ağaca (AST) dönüşüyor.
  • e488f29 | fibonacci.sqt, kendi IR üreticimiz ve bytecode VM’imiz üzerinden ilk kez çalıştı.
  • d5a1b2c | Tip sistemi ve hata/tanı mesajları üreten tanılama motoru geldi.
  • c8ee926 | Sembol tablosu geldi: değişken/fonksiyon isimlerini çözümlüyor, kapsamları (scope) ve referansları takip ediyor.
  • 36ad5d0 | Optimize edici geldi: sabit ifadeleri derleme zamanında hesaplıyor (sabit katlama) ve hiç çalışmayacak kodu siliyor (ölü kod eleme).
  • b02a7da | string birleştirme, try/catch/throw ve nullable akış analizi eklendi.
  • 7b2258e | array desteği geldi: çöp toplayıcının (GC) yönetebileceği bir nesne modeliyle.
  • fab82ee | Bitsel operatörler ve dosya genelinde paylaşılan (global) değişkenler için IR üretimi eklendi.

0.1.0 → 0.2.0 · 0.2.0 → 0.3.0 · 0.3.0 → 0.4.0 · 0.4.0 → 0.5.0 · 0.5.0 → 0.6.0 · 0.6.0 → 0.7.0 · 0.7.0 → 0.8.0 · 0.8.0 → 0.9.0 · 0.9.0 → 0.9.4 · 0.9.4 → 1.0.0