C ++ 'da SFINAE ve metaprogramlama kasıtlı mı yoksa şablonların bir yan ürünü müydü?


11

SFINAE ve templatemetaprogramlama harika şeyler yapabilir ve birçok kütüphane de bunları önemli ölçüde kullanır.

Tarihsel olarak bu "sihirli kavramların" her ikisi de C ++? Yoksa daha sonra orijinal templateprogramlamanın yararlı yan ürünleri (yan ürünler) olarak keşfedildiler mi?

Yanıtlar:


19

Yaklaşık on yıl önce bir konferans gününden sonra kendimi Erwin Unruh ve bir kaç kişi ile birlikte bir barda buldum ve ona VJoviç'in bahsettiği program hakkında sorular sordum . O zamana kadar birkaç bira içtik, resmi olmayan bir toplantıydı ve on yıl boyunca kafamda yaşadı, bu yüzden bunu bir tane tahılla al, ama anılarıma göre:

STL'ye daha iyi hizmet verebilmek için şablon özellikleri eklediklerini söyledi. Ona göre, komitedeki bazı / birçok kişi tam yeteneklerini bilmeden bir şeyler yarattıklarını hissetti. Kendisi, tüm şablon şeylerin, özellikle de kısmi uzmanlaşmanın Turing-tam bir dil oluşturduğundan şüphelendi ve her zaman bunun resmi bir kanıtını yapmak istediğini, ancak bunu asla çözmediğini söyledi.

Bunun yerine bir gece bir standardizasyon toplantısında asal sayıları derleme sırasında hesapladığı hata mesajlarını (modern derleyicilerle çalışması gereken bir sürüm burada ) basan bu programla geldi. Şablon meta programı olarak bugünün standartlarına göre çok etkileyici değil, ama sonuçta bir ilkti. Birisi resmi bir ISO standardizasyon belgesi haline gelmek için resmi olarak sunarak şaka olarak gördüğü şeyi yaptı.

Ona özellikle Bjarne Stroustrup'un programa tepkisini sorduğumu hatırlıyorum ve yanıt olarak Erwin gözlerini eliyle kaplayarak onu taklit etti. :)

Geziden pişmanlık duydum , o konferansta da olan Todd Veldhuizen'e nasıl ifade şablonları bulduğunu sormamıştım . (Kesinlikle konuşmak için güzel bir adamdı.) Ama ondan çok daha gençtim ve yaşam boyu fırsatın geçmesine izin verdim.:(


+1, ilginç bir deneyim. O zaman SFINAE hakkında bir şey konuştular mı?
iammilind

@iammilind: Bence SFINAE, STL'yi daha iyi desteklemek için eklenen özelliklerden sadece biri, ancak "SFINAE" lakabı bundan sadece yıllar sonra ortaya çıktı.
sbi

11

1994 yılında, c ++ standardizasyon komitesinin bir toplantısında, E. Unruh şablonların derleme zamanında bir şeyi hesaplamak için kullanılabileceğini keşfetti. Asal sayıları basan bir program yazdı. Bu egzersizin ilgi çekici kısmı, asal sayıların üretiminin derleyici tarafından çalışma zamanında değil derleyici tarafından gerçekleştirilmesiydi. Bu program tamamen taşınabilir olmasa da, program şablon örnekleme mekanizmasının derleme zamanında önemsiz hesaplamalar yapabilen ilkel özyinelemeli bir dil olduğunu göstermiştir.

Bu alıntı Vandevoorde ve Josuttis tarafından "c ++ şablonlarından" alınmıştır (bölüm 17).

Gördüğünüz gibi, erken keşfedildi ve gücü hemen tanındı.


2
İyi bir. İnternette de okuduğum bu tür bir yazı, kaynağı hatırlamıyorum. Bu SFINAE için de geçerli mi?
iammilind

@iammilind "SFINAE için de geçerli mi?"
BЈовић

1
SFINAE genellikle derleyiciden biraz desteğe ihtiyaç duyar. Bu nedenle, yanlışlıkla keşfedilmemiş olabilir.
iammilind

@iammilind Kitaptan benzer bir metin içeren bir bilgilendirme makalesi buldum: informit.com/articles/article.aspx?p=30667&seqNum=8
BЈовић

@iammilind Cevabı düzenledi. Yanlışlıkla söyleyebilirim, çünkü şablonlar için derleyici desteği sınırlıydı. Program taşınabilir değildi ve bence sadece bir derleyici üzerinde çalıştı
BЈовић
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.