| |
| Posted by Ali Çehreli (acehreli) in reply to Salih Dinçer | PermalinkReply |
|
Ali Çehreli (acehreli)
Posted in reply to Salih Dinçer
|
-
Hasan değil, Hüseyin. ;)
-
OOP'yi gerektiren veya ondan yararlanan programlar sanıldığından azdır. İlgisiz olarak, OOP'nin bugün yaygın olan gerçekleştirmeleri (C++, D, Java, vs.) yanlış denebilecek kadar sorunludur. (Bakınız: "expression problem", "anemic design model", "open methods", vs.)
-
Evet, OOP'nin yaygın gerçekleştirmesi olan vtbl pointer, performans açısından zararlıdır çünkü asıl türleri farklı olan bir dizi elemanın işlemlerini işletirken her elemanın işlev göstergesini bulmak bellekte zıplamayı gerektirir: nesnenin vtblptr'ını oku, vtblptr'ın gösterdiği yerdeki tablo göstergesine işletilecek olan işlevin offset'ini ekle. Oradan okuyacağın işlev gösterge değerinin gösterdiği yerdeki işlevi işlet.
Bunu kod içindeki basit bir 'switch' ile karşılaştırınca switch'li yöntemin bellekte farklı yerlere zıplamayabileceğini görürüz. Bellekte farklı yerlere erişmek işlemcinin ara belleğinin etkin kullanımına ters olduğundan vtblptr'lı OOP bu konuda geri kalır.
-
Performans konusunda herkesin bilmesi gereken, ne benim, ne de başkasının söylediğine güvenmektir: ölçmeden bilinemez.
-
Dizi, programcılıkta en çok kullanılan veri yapısıdır. Bazı durumlarda da en hızlısıdır. Örneğin, elemanların baştan bir kere girildiği ve bir daha eleman çıkarılmadığı durumda, diziyi önceden sıralamak ve ikili arama vs. gibi işlemlerle kullanmak en hızlısıdır. Gösterge vs. için bellek harcanmamıştır ve herkes bellekte yan yana durduğundan işlemcinin ara belleği için de çok uygundur. (İşlemcilerin ara bellekleri zaten dizi üzerinde ilerlemeyi hızlandırmak için tasarlanmıştır.)
-
Sanırım "generic" terimi ile ifade edilen kavram Java gibi dillerde ve D gibi dillerde farklı gerçekleştirilmiştir. Yanılmıyorsam, Java'da farklı türler için tek gerçekleştirme kullanılır ama olayın için göstergeler vardır. D gibi dillerde ise şablonlar (template) kullanıldığından her tür için farklı kod üretilir. Ben şablonların genelde daha hızlı olduğunu sanıyorum ama program boyutunu büyüttüklerinden yine işlemci ara bellekleri ile ilgili olarak yavaşlık da getirebilir.
-
D gibi dillerin Java'dan daha hızlı oldukları her zaman için doğru değil. Örneğin, D'de JIT yok. Hangisinin daha yararlı olduğunu bakmadan bilemeyiz. Eğer Java'nın çöp toplayıcısı programın duraksamasına neden oluyorsa, aynısı D de var.
-
Ben performansın önemli olduğu bir projede D kullandım (diğer seçenekler Python ve C++ idi). Ama bunu deneme yapıp sonuçlarına bakarak değil, D ile programlamak istediğim için yaptım. Utanmadan söylüyorum: Ben bir insanım ve insanları ilgilendiren psikolojik etkiler altındayım. :) (Bir başka deyişle: robot değilim.) Eğer D yetersiz olsaydı başka dil kullanırdım. D ile yazmak beni mutlu etti ve çok verimli çalışmamı sağladı. (Bu projeyi DConf konuşması olarak sundum; kabul edilirse deneyimimi anlatacağım.) Dilleri karşılaştırım "şunu dili şu yüzden seviyorum" diyen kişilerin de aslında o dili "istedikleri" için öyle düşündüklerini düşünüyorum. "Evet, falanca ve filanca diller de çok iyi diller ama ben istediğim için benim seçtiğim dili kullanıyorum" diyebilmek gerek. :)
Ali
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]
|