3.2 KiB
TODO — Teknik Borçlar ve Ertelenen Kararlar
Bu dosya, kasıtlı olarak ertelenen teknik kararları ve ileride ele alınması gereken tasarım noktalarını tutar. Her giriş hangi issue'ya bağlı olduğunu belirtir.
✅ TAMAMLANDI — GC-hazır nesne modeli + array runtime (2026-06-20)
ADR-020…024 (değer/referans semantiği, null güvenliği, mark-sweep GC, eşitlik) doğrultusunda uçtan uca array çalışıyor:
src/vm/object.hpp— Object, ArrayObject, Heap (v1: toplama yok, GC-hazır header)src/vm/value.hpp— ValueKind::Ref + Nil eklendisrc/ir/instruction.hpp— ARRAY_NEW/GET/SET/LEN eklendi- Array literal parser (
[1,2,3]),int[]tip sözdizimi (Java/C# stili) - Referans semantiği, kimlik
==(ADR-023), sınır kontrolü - Golden test:
tests/golden/array/ref_semantics.sqt✓
🚀 SIRADAKİ İŞ (docs/sonnet-handoff.md Bölüm 2)
- Struct runtime — StructObject : Object, alan erişimi, E010 revizyonu
- String cilası (ADR-024) — içerik
==, UTF-8 concat+print - Null akış-analizi (ADR-021) —
Type?, flow-narrowing,a! - float/double (#44) — Value::Float + FADD/FSUB/… opcodes
- mark-sweep GC v2 (#56) — header+kök kancası üstünde aç
Açık mimari borç: #56 (döngüsel referans sızıntısı → mark-sweep GC v2).
#modül-scope — IRFunction.moduleId: Modül-düzeyi değişken izolasyonu
Etkilenen dosyalar:
src/ir/instruction.hpp—LOAD_GLOBAL/STORE_GLOBALyorumlarısrc/ir/ir_program.hpp—globalCount,globalNamessrc/vm/interpreter.hpp—globalSlots_src/vm/interpreter.cpp—LOAD_GLOBAL/STORE_GLOBALcase'leri
Mevcut durum (tek dosya):
LOAD_GLOBAL dest, N → globalSlots_[N] — düz vektör, tek modül varsayımı.
Tek dosyada bu doğru çalışır; globalSlots_[0] her zaman bu dosyanın 0. modül-değişkenidir.
Çok modüllü derlemede yapılması gereken:
Her IRFunction'a std::string moduleId (veya int moduleIndex) alanı ekle.
Interpreter'da globalSlots_ yerine std::unordered_map<std::string, std::vector<Value>> moduleSlots_ tut.
LOAD_GLOBAL çalışırken frame.function->moduleId ile doğru modülün slot alanına bak.
// Hedef tasarım (modül sistemi gelince):
case Opcode::LOAD_GLOBAL:
frame.slots[instr.dest] = moduleSlots_[frame.function->moduleId][instr.intValue];
break;
Ne zaman: Modül sistemi issue'ları (#3 import sözdizimi, #4 görünürlük, #5 çoklu dosya) ele alınırken bu değişikliği de kapsama al.
#sembol-modül — Symbol.sourceModule: Sembol tablosunda açık modül kimliği
Etkilenen dosyalar:
src/symbol/symbol.hpp—Symbolstruct
Mevcut durum:
Symbol.definitionLoc.filePath dosya yolunu tutuyor — modül bilgisi dolaylı olarak var.
Ama doğrudan moduleId / moduleName alanı yok; filtre/lookup için her seferinde
definitionLoc.filePath'i ayrıştırmak gerekir.
Yapılması gereken:
Symbol struct'ına std::string sourceModule alanı ekle (modül adı veya dosya yolu).
Özellikle cross-module sembol çözümleme, LSP "tanıma git" ve hata mesajlarında
"hangi modülden geldi" bilgisi için kritik.
Ne zaman: #3 (import sözdizimi) veya #4 (görünürlük) issue'larında.