jenerik programlama, endüstride ne sıklıkla kullanılır


11

Şu anda akademik bir ortamda programlama yapıyorum, böylece istediğimi kullanabilirim. Destek grafik kütüphanesini birkaç şey için kullanıyorum ve GP'yi daha derinlemesine anlama çabasına yatırım yapmanın buna değip değmeyeceğini merak ediyorum.

Merak ediyorum - jenerik programlama (GP) endüstride çok mu kullanılıyor? Tahminimce, çoğu programcı OOP ile çok daha rahattır veya GP'yi vurgulamayan veya desteklemeyen diller kullanmaktadır, böylece C ++ 'da STL veri yapılarını / fonksiyonlarını çağırmanın dışında, izlenim GP'nin bu kadar sık ​​kullanılmamasıdır uygulamada. Ancak, şu anda endüstri dışında olmak, bu konuda uygulayıcılardan duymak güzel olurdu.

(Bunu yazarken, jenerik programlamanın geçerli bir etiket olmadığını görüyorum!)


StackOverflow üzerindeki etiket dağılımı, istatistiksel kanıt olarak buradakinden çok daha yararlıdır. Bkz. Stackoverflow.com/questions/tagged/generic-programming , stackoverflow.com/questions/tagged/generics
Péter Török

Yanıtlar:


7

Merak ediyorum - jenerik programlama (GP) endüstride çok mu kullanılıyor?

Gerçekten büyük ölçüde ekibin ve projenin bağlamına bağlı.

Örneğin, video oyunlarında, kod genellikle mümkün olan en basit (hatta bazen çok basit) fakat büyük mimarilerde bulunur. Bunun nedeni, oyun geliştiricilerin düzeltmek için çok fazla sorunları olması ve meta programlama ile uğraşmak istememeleri (C ++ içinde ayrı bir çok soyut ve dili kavramak zor).

Aynı zamanda, bu mağazalarda bile şablonların temel kullanımı yaygındır ve bazı motorların bazı çok özel işlevlerinde bazı şablon tabanlı optimizasyonları görebilirsiniz.

Ancak oyun geliştirmede, çoğu insan herhangi bir metaprogramlamadan kaçınır.

Şimdi, diğer uç tarafta, yaygın olmayan bazı gerçekten karmaşık veya ağır işleme uygulamaları, yaygın olmayan performans ve esneklik (derleme zamanında) gereksinimleri nedeniyle bir tür ağır metaprogramlama gerektirir. Şu anda bir arada çalışıyorum.

Bu yaygın değildir, ancak vardır ve bazı niş alanlar (bazı bilimsel veya sayı çatırdayan gömülü bağlamlarda), insanların metaprogramlama veya öğrenmek isteyen hakkında çok şey bilmesini gerektirir.

Ortada, çoğu insan meta-programlamayı "tasarımcı" olarak değil, "istemci" olarak kullanacaktır. Çoğu meta-programlama kodu kütüphanelerde paketlenmiştir, çünkü kütüphaneler kod araçlarıdır ve şimdiye kadar birlikte çalıştığınız özel türlere uyum sağlayabilen bir kütüphaneden daha iyi olan nedir?

Boost (http://boost.org), bazıları ağır meta programlı kara büyüden yapılmış bir dizi kütüphanedir ve bir çok C ++ dükkanında STL'nin bir uzantısı olan "STL ++" olarak kullanılmaktadır (ve öyle). Her dükkan derleyici uyumluluğu gibi bazı nedenlerle kullanmaz (bazı yükseltme kütüphaneleri, derleyicinizi hissinize zarar verdiği her zaman affedebilir ...) ve daha sık çünkü bazı geliştiriciler anlayamamayı sevmez bir araç nasıl çalışır (Boost.Spirit'i anlamaya çalışın ...)

Çalışacağınız şirketler ne olursa olsun, bazıları bu paradigmayı kullanacak, bazıları daha az veya hiç olmayacak veya hatta yasaklayacaktır.

Fikir birliği yoktur çünkü kimse aynı ihtiyaçlara, bağlama veya takıma sahip değildir.

Ama yine de, açıkçası, kullanılıyor. Belki de posta listelerinde kimin destek kullandığını daha gerçek dünya örnekleri için isteyebilirsiniz?


1
Müşteri ve tasarımcı için +1. Deneyimlerime göre, yeterince az geliştirici, uygulamalarını, sürdürülebilirlikte büyük bir gelişme sağlamadığı sürece bir uygulamada yeni genel kod oluşturmanın mantıklı olmadığını anlar . Geniş yeniden kullanım için tasarlanmış kütüphaneler, bu koşullara bireysel uygulamalardan çok daha sık düşmektedir.
Karl Bielefeldt

Detaylı cevap için teşekkürler. Kendimi Boost hayranıyım ve diğer Boost kütüphanelerinden çok daha fazla GP bilgisi gerektiren BGL'ye girip girmemeyi düşündüğüm, bunu sormamı sağlayan şeydi. Oyun geliştirme dünyası hakkındaki yorumunuz oldukça ilgi çekicidir. Modern oyunların gelişim özelliklerine hayran kaldım ve muhtemelen ön planda olmaktan ziyade daha yeni programlama yöntemlerinden izole edildiğini duymak ilginç.
BD1

Oyun geliştiricileri, sadece mimari oyun kavramlarına sahip olmak suretiyle yüksek karmaşıklık düzenini yönetiyorlar. Meta talimatları eklemek, her şeyi karmaşıklaştırır, böylece gerçekten iyi bir şekilde gerekçelendirilmelidir. Diğer bir şey, oyun geliştiricilerinin birçoğunun, her şeyin artmasına izin vermeyen çok özel derleyicilere sahip çok özel donanım olan konsollarda çalıştığıdır (örneğin, istisna yok veya çoklu kalıtım yok veya derleyici (gerçek hikaye)). Yani, iyi sebepler var.
Klaim

5

Merak ediyorum - jenerik programlama (GP) endüstride çok mu kullanılıyor?

Akademik olarak parametrik polimorfizm olarak adlandırılan jenerik programlama, alanlarda çok sık kullanılmaktadır. Şirketimde, çoğunlukla türlerine bakılmaksızın veri için tür bağımsız editörler oluşturmak için kullanıyoruz. Diğer özelliklerde olduğu kadar sık ​​ihtiyacınız yok, ama kesinlikle kaçırmak istemeyeceğim bir özellik. Bir davranış çok sayıda türe uyduğunda kullanırsınız. Farklı türler için aynı kodu birden çok kez yazarken bulduğunuzda jeneriklere ihtiyacınız olduğu açık bir işarettir.

Tahminimce, çoğu programcı OOP ile çok daha rahattır veya GP'yi vurgulamayan veya desteklemeyen diller kullanmaktadır, böylece C ++ 'da STL veri yapılarını / fonksiyonlarını çağırmanın dışında, izlenim GP'nin bu kadar sık ​​kullanılmamasıdır uygulamada.

En azından deneyimlerime göre, bakış açınız yanlış. OOP ve genel programlama birbirini dışlamaz. Aslında, onları birleştirmenin sinerji etkilerini kullanmalısınız. Daha önce de belirttiğim gibi, onu diğer teknikler kadar sık ​​görmemenizin nedeni, buna çok sık ihtiyacınız olmamasıdır. Ancak, güçlü bir özellik olması ve kodunuzu KURU tutmanıza büyük ölçüde yardımcı olur . Hangi diller GP'nin yüksek seviyeli programlamadaki desteğini gerçekten vurgulamıyor? Tiobe Top 5'in 5 dilinden 3'ü jenerik / şablonları desteklemektedir. Ve PHP dinamik olarak yazılmıştır, bu yüzden onlara gerçekten ihtiyaç duymaz. Ne olmuş yani?


Bu, OOP ve GP'nin bir / veya seçim olduğunu ima etmedim. Ancak, gördüğüm projelerin çoğu Java'da kesinlikle OOP gibi görünüyor. Java'nın daha yeni sürümlerinin GP'yi desteklediğini düşünüyorum, ancak Java programcılarının hangi kısmı gerçekten bu işlevselliği kullanıyor? Dediğim gibi, endüstride çalışmıyorum ve bakış açım çok iyi eğilmiş olabilir, bu yüzden soruyu sordum.
BD1

@ bd1: Java destekli jeneriklerden önce veya belirli bir araç seti desteklenmeden önce yazılan daha eski uygulamalar, Java'nın bu sürümünün jeneriklere sahip olmayacağını ve geliştiricilerin kodu tutarlı tutmak için söz konusu projedeki jeneriklerden kaçınmaya devam edebilir. Bunu gördüm ve projeye ve geliştiricilere göre değişiyor. Java jeneriklerini destekledikten sonra başlatıldığını gördüğüm herhangi bir proje, uygun olduğunda bunları sıklıkla kullanma eğilimindedir.
FrustratedWithFormsDesigner

@FrustratedWithFormsDesigner: Java'daki jenerikler C ++ şablonlarından tamamen farklıdır. Java jenerikleri% 100 saf sözdizimsel şekerdir ve meta programlamayı desteklemez.
kevin cline

"OOP ve jenerik programlama birbirini dışlamaz.": Aslında her ikisi de sırasıyla polimorfizm, sırasıyla ad-hoc ve parametrik polimorfizm formlarıdır. Bu yüzden farklı türlerde polimorfizm için iki farklı araç.
Giorgio

4

C ++ şablonları kapsayıcılardan farklı şeyler için yaygın olarak kullanılır - en azından sorun alanımda (niceliksel finans). Hatta bazen düz eski sanal işlevlerin yeterli olacağı (ve derleme süresini çok fazla artırmayacağı) amaçlar için bazen çok sık kullanıldığını söylemeye cesaret ediyorum.

İnsanlar bunu kod çoğaltmasından kaçınmak ve derleme zamanı polimorfizmine ulaşmak için kullanıyorlar (sanal sevkiyat olmadan).

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.