Yazılım geliştirme dünyasında, araçların sunduğu özelliklerin gerçekten çalışıp çalışmadığı her zaman kritik bir soru olmuştur. CrabPascal, bu soruya verilecek en iyi yanıtlardan biri haline geliyor. Proje, v2.21.0 sürümüyle birlikte exception işlemlerinde tam şeffaflık sunarak geliştiricilerin güvenini artırıyor. Artık derleyici, desteklenmeyen durumlarda sessizce geçiştirmek yerine, açık bir şekilde hata veriyor.
Gerçek Exception Desteği için İlk Adım: Dürüstlük
CrabPascal, iki farklı yürütme yolunu destekliyor: `run` (içsel yorumlayıcı) ve `build-exe` (C kodu üreten doğal derleyici). Eski versiyonlarda, build-exe komutu exception bloklarını destekliyormuş gibi görünen ancak aslında Delphi davranışından uzak olan yer tutucu kodlar üretiyordu. Bu durum, geliştiricilerin projelerini doğal derleyiciyle çalıştırdıklarında karşılaşabilecekleri hataları fark etmelerini engelliyordu.
Örneğin, tipik bir Delphi exception işleme bloğu şu şekilde görünür:
try
ProcessOrder(OrderId);
except
on E: Exception do
LogError(E.Message);
end;Bu kod, çalışma zamanında stack’in geri sarılmasını ve exception tiplerinin eşleştirilmesini gerektirir. Oysa eski C arka ucu, yalnızca derleme aşamasını geçirecek yer tutucu bloklar üretiyordu. Sonuç olarak, geliştiriciler kodlarını doğal derleyiciyle çalıştırdıklarında, beklenmedik davranışlarla karşılaşıyorlardı.
Bu durum, CrabPascal’in temel ilkelerinden biri olan dürüst araç kullanımı ilkesine tamamen ters düşüyordu. Eğer bir özellik henüz doğru şekilde uygulanamıyorsa, geliştiricilerin bunu açıkça bilmesi gerekiyordu.
v2.21.0’da Neler Değişti?
Yeni sürümde, kod üretim modülü aşağıdaki durumlar için doğrudan hata veriyor:
try/except/finallybloklarıraiseifadeleri
Bunun yerine, geliştiricilere run komutunu kullanmaları gerektiğini belirten net bir hata mesajı sunuluyor:
crab-pascal build-exe MyApp.dpr
# error: exception handling not supported in native codegen yet; use `crab-pascal run`Bu değişiklik, beklentilerin anında karşılanmasını sağlıyor. Sürekli tümleştirme (CI) borularında oluşan hatalar, artık sessizce geçiştirilmek yerine doğru nedenlerle sonlandırılıyor. Bu da projelerin daha güvenilir bir şekilde yönetilmesine olanak tanıyor.
Hangi Komutu Ne Zaman Kullanmalısınız?
CrabPascal’in sunduğu komutlar ve kullanım alanları aşağıdaki gibidir:
- `run`
- Geliştirme aşaması
- Horse API’leri
- Nesne yönelimli programlama (OOP) ve exception işlemleri
- Hızlı yineleme
- `check`
- IDE geri bildirimleri
- CI ortamında statik kod analizi
- `build-exe`
- Performans gerektiren kodlar
- Exception içermeyen alt kümeler (örneğin, JSON ve HTTP işlemleri)
Örneğin, CRUD örnek uygulaması exception içermeyen sıcak yollar için build-exe komutuyla derlenebiliyor:
crab-pascal check examples/crud/crud.dpr
crab-pascal run examples/crud/crud.dprGeri Dönüşüm Testleriyle Güvence Altına Alınmış Değişiklikler
Sprint 13 kapsamında, `codegen::tests::test_codegen_errors_on_try_raise` testi eklenerek bu davranış kalıcı hale getirildi. Testin amacı, kod üretiminin exception içeren bloklar için hata vermesini sağlamak ve asla yer tutucu C kodu üretmemesini garanti etmek:
// Pseudokod amaç: codegen'in try/raise için hata vermesi ve sahte C kodu üretmemesi
assert!(codegen_result.is_err());
assert!(message.contains("use `run`"));Gelecekte, gerçek exception indirgeme mekanizmaları (setjmp/longjmp, tablo tabanlı işleyiciler veya LLVM) geliştirildiğinde, bu testler başarılı olarak işaretlenecek. Ancak yer tutucu kodların sessizce geri dönmesi gibi eski hatalara asla izin verilmeyecek.
Gerçek Exception Desteği için Yol Haritası
Dürüst hata verme, yalnızca ilk adımdı. İkinci adım ise Delphi uyumlu exception tablolarının kod üretim modülüne eklenmesi olacak. Bu süreç, `System.SysUtils` modülündeki RTL tipleri ve çalışma zamanı nesne yerleşimiyle koordineli olarak ilerleyecek. Şimdilik, geliştiricilerin bu durumdan haberdar olmasını sağlamak için tüm belgelerde ve araçlarda bu ayrım net bir şekilde belirtiliyor.
Geliştiriciler İçin Çıkarımlar
Projeleriniz exception işlemlerine bağımlıysa — ki çoğu Delphi projesi böyledir — bugün desteklenen tek yol `run` komutudur. Doğal derleme, yalnızca dilin desteklenen alt kümeleri için geçerlidir. Sprint 13, kontrolsüz özelliklerin eklenmesindense güvenilirliği tercih etti. Bu yaklaşım, CrabPascal’in güvenle benimsenmesini kolaylaştırıyor.
Geliştiriciler, projelerini planlarken bu değişiklikleri göz önünde bulundurmalı ve exception işlemleri gerektiren bileşenler için run komutunu tercih etmelidir. Gelecekteki güncellemelerde, Delphi uyumlu exception desteğinin tam olarak uygulanmasıyla birlikte, geliştiricilerin projelerini daha güvenilir bir şekilde doğal derleyiciyle derlemeleri mümkün olacak.
Sorularınız varsa, @crabpascal adresinden veya Bitbucket üzerindeki sorun takipçisinden destek alabilirsiniz.
Yapay zeka özeti
CrabPascal 2.21.0, exception işlemlerinde dürüstlük prensibini benimseyerek geliştiricilere açık hata mesajları sunuyor. Doğal derleme için desteklenmeyen özellikler hakkında neler değişti?