Jerry söyledi: ... sonuç oldukça C ++ artık değil benim metafor o iken, olduğu açıkça C ++, sadece biraz daha farklı bir lehçesi programları diğer formları, kongre ve yazılı stilleri kullanmak için.
İşte onları devre dışı bırakmak için başlıca nedenlerim:
İkili Uyumluluk
Dil ve çeviri sınırlarını geçmek, evrensel olarak iyi tanımlanmamış veya tanımlanmamış. Programınızın tanımlanmış davranış alanı içinde çalışacağını garanti etmek istiyorsanız, modül çıkış noktalarındaki istisnaları karantinaya almanız gerekir.
Çalıştırılabilir Boyut
İşte yazdığım, istisnasız ve özel durumların etkinleştirildiği bir şekilde yazılan bir istisna içermeyen programın ikili boyutları:
İstisnalar olmadan:
- çalıştırılabilir + bağımlılıklar: 330
- son soyulmuş çalıştırılabilir (sürüm derlemesi): 37
İstisnalar hariç:
- çalıştırılabilir + bağımlılıklar: 380
- son soyulmuş çalıştırılabilir (sürüm derlemesi): 44
Hatırlatma: Bu, sıfır atma / yakalama içeren bir kütüphane ve program koleksiyonudur. Derleyici bayrak yapar C ++ standart kütüphanesinde özel durumları etkinleştirin. Bu nedenle, gerçek dünyadaki maliyet bu örnekte% 19'dan fazladır.
Derleyici: elma gcc4.2 + llvm. MB cinsinden boyutlar.
hız
"Sıfır maliyet istisnaları" terimine rağmen, hiçbir şey atmadığında bile bazı ek yükler eklerler. Yukarıdaki durumda, performans açısından kritik bir programdır (Sinyal İşleme, Üretim, Sunum, Dönüşümler, büyük veri kümeleri / sinyalleri vb.). Bu tasarımda istisnalar gerekli bir özellik değilken, performans çok önemlidir.
Program Doğruluk
Tuhaf bir neden gibi görünüyor ... Eğer fırlatma bir seçenek değilse, programınızın doğru şekilde çalışmasını sağlamak için nispeten katı, doğru, iyi test edilmiş programlar yazmanız ve istemcilerin arayüzleri doğru kullanmaları (bana kötü bir argüman verirseniz veya yaparsanız) Bir hata kodunu kontrol etmiyorsanız, o zaman UB) hak ediyorsunuz. Sonuç? Uygulama kalitesi büyük ölçüde iyileşir ve sorunlar hızla çözülür.
Basitlik
İstisna işleme uygulamaları çoğu zaman güncel tutulmaz. Ayrıca bir çok karmaşıklık ekler çünkü bir uygulamada birçok çıkış dizisine sahip olabilir. Müşteri tarafından köpüren ve işlenen küçük bir iyi tanımlanmış, yazılı, çıkış stratejileri kümesi kullandıklarında oldukça karmaşık programları okumak ve sürdürmek daha kolaydır. Diğer durumlarda, uygulamalar zaman içinde daha fazla atış yapabilir veya bağımlılıkları bunları ortaya koyabilir. Müşteriler, tüm bu çıkışlara karşı kolayca veya uygun şekilde savunamazlar. Çok sayıda kütüphane yazıp güncellerim, sıklıkla evrim ve gelişme olur. Bunların istisna çıkış dizileriyle (büyük bir kod tabanında) tümüyle senkronize kalmaya çalışılması, zamanın iyi bir şekilde kullanılmayacağına ve muhtemelen çok fazla gürültü ve zahmete neden olacaktır. Artan program doğruluğu ve daha fazla test nedeniyle,
Tarihçe / Mevcut Kod
Bazı durumlarda, tarihsel nedenlerle asla tanıtılmadılar. Mevcut bir kod temeli onları kullanmadı, programları değiştirmek insan yıllarını alabilir ve sözleşmelerde ve uygulamalarda örtüşme nedeniyle bakım yapmayı gerçekten çirkin hale getirebilirdi.
Downsides
Tabii ki, dezavantajları var, en büyüğü: Diğer kütüphanelerle uyumsuzluk (ikili dahil) ve bu modele uyması için iyi miktarda program uygulamanız gerekeceği gerçeği.