ADR-001: İç modüller, artımlı derleme ve grafik doğrulama temeli #2

Open
opened 2026-07-28 16:06:05 +03:00 by saqut · 0 comments
Owner

Durum

Kabul edildi.

Bağlam

Kubbe; C++22, SDL3, Skia ve ilerleyen aşamalarda V8 üzerinde gelişecek büyük bir gömülü web motorudur. HTML, DOM, CSS, layout, grafik, JavaScript ve WASM gibi katmanların tek bir derleme ve debug birimine dönüşmesi; geliştirme süresi ilerledikçe gereksiz yeniden derlemelere ve hataların kaynağını bulmayı zorlaştıran bir yapıya yol açar.

Karar

  • Kubbe, mimari sorumluluklara göre ayrılmış bağımsız build target'larından oluşacak.
  • Her ana modül kendi library target'ına, testlerine ve gerektiğinde tek başına çalıştırılabilen küçük bir test/araç executable'ına sahip olabilecek.
  • Ana Kubbe programı bu iç kütüphanelerin tamamını bağlayarak birleşik motoru oluşturacak.
  • Bu modüller dışarıya sunulan plugin veya bağımsız ürünler değildir. Kararlı C/C++ ABI, geriye dönük modül uyumluluğu veya modüllerin farklı sürümlerini birlikte çalıştırma taahhüdü verilmeyecek.
  • Tüm Kubbe modülleri aynı kaynak ağacının ve aynı sürümün parçalarıdır; gerektiğinde bütün iç arayüzler birlikte değiştirilebilir.
  • Bir modülün eksik olması ana programı çalışmaz hale getirebilir. Modüllerin ayrılması dağıtım esnekliği için değil; artımlı derleme, bağımsız test ve hata izolasyonu içindir.
  • V8, Skia ve benzeri ağır üçüncü taraf bağımlılıklar ayrı build çıktıları olarak bir kez üretilecek; sürümleri veya build ayarları değişmedikçe yeniden derlenmeyecek.
  • Kaynak bağımlılık grafiği, yalnızca değişen kaynakları ve bunlardan etkilenen hedefleri yeniden derleyecek şekilde kurulacak.

İlk teknik kilometre taşı

C++22 ile SDL3 pencere ve olay döngüsü başlatılacak; Skia pencerenin Vulkan veya OpenGL bağlamına bağlanarak basit bir kırmızı dikdörtgen çizecek. Kapanma sinyali temiz biçimde işlenecek.

Bu grafik köprüsü doğrulanmadan HTML parser, DOM, CSS layout, JavaScript/V8 veya diğer üst katmanlara geçilmeyecek.

Test ve debug ilkesi

  • Her modül ana tarayıcı çalıştırılmadan test edilebilecek.
  • Parser ve layout gibi deterministik katmanlar metinsel/strüktürel golden testlerle sınanacak.
  • Grafik katmanı sabit sahneleri framebuffer veya ekran görüntüsüne çizerek referans görüntülerle karşılaştırılacak.
  • GPU doğrulama katmanları, sanitizers ve sembollü debug build'leri geliştirme sürecinin parçası olacak.
  • Modüller arası bağımlılıklar tek yönlü ve build sistemi tarafından görünür tutulacak.

Sonuçlar

Bu karar runtime plugin sistemi getirmez. Kazanım; değişmeyen kodun yeniden derlenmemesi, her katmanın ayrı çalıştırılıp gözlemlenebilmesi ve hatanın ait olduğu modülün daha erken belirlenebilmesidir. İç API değişiklikleri bağımlı hedefleri yeniden derletebilir; bu kabul edilen bir maliyettir.


Orijinal Yorumlar

abdussamedulutas (2026-07-28T11:37:18Z):
Bu issue için ilk uygulanacak iş SDL3 pencere döngüsü ve Skia çizim köprüsüdür. Hedef: C++22 tabanlı minimal main.cpp, boş pencere, event loop, kırmızı dikdörtgen renderı ve temiz shutdown akışı. HTML/DOM/CSS/V8 katmanlarına şimdilik girilmeyecek.

## Durum Kabul edildi. ## Bağlam Kubbe; C++22, SDL3, Skia ve ilerleyen aşamalarda V8 üzerinde gelişecek büyük bir gömülü web motorudur. HTML, DOM, CSS, layout, grafik, JavaScript ve WASM gibi katmanların tek bir derleme ve debug birimine dönüşmesi; geliştirme süresi ilerledikçe gereksiz yeniden derlemelere ve hataların kaynağını bulmayı zorlaştıran bir yapıya yol açar. ## Karar - Kubbe, mimari sorumluluklara göre ayrılmış bağımsız build target'larından oluşacak. - Her ana modül kendi library target'ına, testlerine ve gerektiğinde tek başına çalıştırılabilen küçük bir test/araç executable'ına sahip olabilecek. - Ana Kubbe programı bu iç kütüphanelerin tamamını bağlayarak birleşik motoru oluşturacak. - Bu modüller dışarıya sunulan plugin veya bağımsız ürünler değildir. Kararlı C/C++ ABI, geriye dönük modül uyumluluğu veya modüllerin farklı sürümlerini birlikte çalıştırma taahhüdü verilmeyecek. - Tüm Kubbe modülleri aynı kaynak ağacının ve aynı sürümün parçalarıdır; gerektiğinde bütün iç arayüzler birlikte değiştirilebilir. - Bir modülün eksik olması ana programı çalışmaz hale getirebilir. Modüllerin ayrılması dağıtım esnekliği için değil; artımlı derleme, bağımsız test ve hata izolasyonu içindir. - V8, Skia ve benzeri ağır üçüncü taraf bağımlılıklar ayrı build çıktıları olarak bir kez üretilecek; sürümleri veya build ayarları değişmedikçe yeniden derlenmeyecek. - Kaynak bağımlılık grafiği, yalnızca değişen kaynakları ve bunlardan etkilenen hedefleri yeniden derleyecek şekilde kurulacak. ## İlk teknik kilometre taşı C++22 ile SDL3 pencere ve olay döngüsü başlatılacak; Skia pencerenin Vulkan veya OpenGL bağlamına bağlanarak basit bir kırmızı dikdörtgen çizecek. Kapanma sinyali temiz biçimde işlenecek. Bu grafik köprüsü doğrulanmadan HTML parser, DOM, CSS layout, JavaScript/V8 veya diğer üst katmanlara geçilmeyecek. ## Test ve debug ilkesi - Her modül ana tarayıcı çalıştırılmadan test edilebilecek. - Parser ve layout gibi deterministik katmanlar metinsel/strüktürel golden testlerle sınanacak. - Grafik katmanı sabit sahneleri framebuffer veya ekran görüntüsüne çizerek referans görüntülerle karşılaştırılacak. - GPU doğrulama katmanları, sanitizers ve sembollü debug build'leri geliştirme sürecinin parçası olacak. - Modüller arası bağımlılıklar tek yönlü ve build sistemi tarafından görünür tutulacak. ## Sonuçlar Bu karar runtime plugin sistemi getirmez. Kazanım; değişmeyen kodun yeniden derlenmemesi, her katmanın ayrı çalıştırılıp gözlemlenebilmesi ve hatanın ait olduğu modülün daha erken belirlenebilmesidir. İç API değişiklikleri bağımlı hedefleri yeniden derletebilir; bu kabul edilen bir maliyettir. --- ### Orijinal Yorumlar **abdussamedulutas** (2026-07-28T11:37:18Z): Bu issue için ilk uygulanacak iş SDL3 pencere döngüsü ve Skia çizim köprüsüdür. Hedef: C++22 tabanlı minimal main.cpp, boş pencere, event loop, kırmızı dikdörtgen renderı ve temiz shutdown akışı. HTML/DOM/CSS/V8 katmanlarına şimdilik girilmeyecek.
Sign in to join this conversation.
No Label
No Milestone
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: saqut/kubbebrowser#2
No description provided.