Yakın gelecekte bir derleyici yazmayı planlamıyorum; yine de, derleyici teknolojileriyle ve bunun nasıl daha iyi hale getirilebileceğiyle oldukça ilgileniyorum.
Derlenmiş dillerden başlayarak, çoğu derleyicinin iki hata düzeyi vardır: uyarılar ve hatalar, ilki çoğu zaman düzeltmeniz gereken ölümcül olmayan şeyler ve çoğu zaman makine- (veya bayt-) üretmenin imkansız olduğunu gösteren hatalar kodunu girin.
Yine de, bu oldukça zayıf bir tanım. Java gibi bazı dillerde, @SuppressWarning
yönergeleri kullanmadan bazı uyarıların kaldırılması imkansızdır . Ayrıca, Java bazı ölümcül olmayan sorunları hata olarak ele alır (örneğin, Java'daki erişilemeyen kod bilmek istediğim bir nedenden dolayı bir hatayı tetikler).
C # aynı sorunlara sahip değil, ama birkaç tane var. Derleme birkaç geçişte gerçekleşir ve başarısız bir geçiş daha sonraki geçişlerin yürütülmesini engelleyecektir. Bu nedenle, derlemeniz başarısız olduğunda aldığınız hata sayısı genellikle kaba bir şekilde küçümsenir. Bir koşuda iki hatanız olduğunu söyleyebilir, ancak bir kez düzelttikten sonra 26 yenisi alırsınız.
C ve C ++ 'a kazmak, Java ve C #' ın derleme tanı zayıflıklarında kötü bir kombinasyon gösterir (ancak Java ve C # 'ın her birinin yarısı ile yoluna gittiğini söylemek daha doğru olabilir). Bazı uyarılar gerçekten hata olmalıdır (örneğin tüm kod yolları bir değer döndürmediğinde) ve yine de uyarılardır, çünkü standart yazdıklarında derleyici teknolojisinin bu türden yapmak için yeterince iyi olmadığını düşünüyorum. zorunlu kontroller. Aynı şekilde, derleyiciler genellikle standardın söylediklerinden daha fazlasını kontrol eder, ancak yine de ek bulgular için "standart" uyarı hatası seviyesini kullanır. Çoğu zaman, derleyiciler bulabildikleri tüm hataları hemen rapor etmez; hepsinden kurtulmak için birkaç derleme gerekebilir. C ++ derleyicilerinin tükürmeyi sevdiği şifreli hatalardan bahsetmiyorum,
Şimdi, derleyiciler uyarı yayınladığında birçok derleme sisteminin arızaları bildirecek şekilde yapılandırılabildiğini ekleyerek, sadece garip bir karışım elde ediyoruz: tüm hatalar ölümcül değil, bazı uyarılar; tüm uyarılara hak edilmez, ancak bazıları varoluşlarından daha fazla söz edilmeden açıkça bastırılır; ve bazen tüm uyarılar hata olur.
Derlenmemiş diller hala berbat hata raporlama payına sahiptir. Python'daki yazım hataları kod çalıştırılıncaya kadar rapor edilmez ve komut dosyası bir tanıştıktan sonra yürütmeyi durduracağından, bir kerede birden fazla hatayı asla tekmeleyemezsiniz.
PHP, kendi tarafında, az çok önemli hata seviyeleri ve istisnalara sahiptir. Ayrıştırma hataları birer birer rapor edilir, uyarılar genellikle komut dosyanızı iptal etmeleri çok kötüdür (ancak varsayılan olarak değil), bildirimler gerçekten ciddi mantık sorunlarını gösterir, bazı hatalar komut dosyanızı durduracak kadar kötü değildir, ancak yine de PHP ile her zamanki gibi, orada gerçekten garip şeyler var (neden gerçekten ölümcül olmayan ölümcül hatalar için bir hata seviyesine ihtiyacımız var?, E_RECOVERABLE_E_ERROR
Seninle konuşuyorum).
Bana öyle geliyor ki derleyebileceğim her derleyici hatası raporlaması uygulaması bozuldu. Bu iyi bir utançtır, çünkü tüm iyi programcıların hatalarla doğru bir şekilde başa çıkmanın ne kadar önemli olduğu konusunda ısrar ettikleri ve yine de kendi araçlarını alamadıkları.
Derleyici hatalarını bildirmenin doğru yolu ne olmalı?