September 10, 2012

Öncelikle, umarım C++ veya D'nin işletim sistemi dili olduklarında direttiğim düşünülmüyordur. Eğer uygun değillerse bunun nedenlerini doğru tesbit etmemiz gerekir.

Alıntı (jbytecode):

>

Ancak C ve Assembly'de terminolojik olarak nesne üretmek kavramından bahsedemeyiz. (Evet her dilde object orientation taklit edilebilir. C 'de de durum böyledir.)

"Nesne" terimini yine yanlış kullanıyorum sanırım. Ben C yapılarının nesnelerine de nesne diyorum. Onların assembly dilinde de belleğin bir noktasında oluşturulmuş ve bir kaç veri yazılmış bölgeden farkları yoktur.

C++ bu konuda hiçbir ek bedel getirmez. C++'ta yapılar da sınıflar da hiçbir ek bedel getirmeden C kadar alt düzey kod üretmek için kullanılabilirler ve kullanılırlar da.

Alıntı:

>

new ve delete operatörlerinin malloc ve free 'den fazlasını yaptığıdır.

Kesinlikle. Nasıl assembly ve C'de bellek ayrıldıktan sonra bir de oradaki baytlara bazı değerler yazılması gerekiyorsa (yani "kurulmaları" gerekiyorsa), C++'ın new'ü de aynısı yapar: bellek ayırır ve baytlara ilk değerleri verir (veya programcı istememişse vermez).

Alıntı:

>

İşletim sistemi programcısının çoğu zaman istediği şey bir struct'ın (örneğin filesystem'de) belleğe alınması.

C++'ın güzelliği orada işte. :) Programcı bitlere istediği gibi hükmeder.

Alıntı:

>

new, malloc'tan fazla iş yapıyor.

new, C'nin iki adımlık külfetini teke indirmiştir: yer ayır ve üyelere değer ata. (Ama programcı istemezse değer atanmaz.)

Alıntı:

>

Bunun en büyük delillerinden biri yeterli bellek kontrolü için hata denetim mekanizması içermesi ve gerektiğinde bir bad_alloc exception fırlatması.

Onun için de standart new(nothrow) var: Hata atma bedeli de ödenmez.

Alıntı:

>

Fazladan 20 ms bir gecikme işletim sisteminin yavaşlaması demektir. Önemsiz olmakla birlikte performans optimizasyonlarında göz önüne alınmaya değer bir durumdur.

Kesinlikle. C++'ın uygun olmadığı tarafları var(dır) ama benim bildiğim kadarıyla yukarıdakiler değil.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

September 10, 2012

Alıntı (jbytecode):

>

en basit formun da aşağıdaki gibi olması gerektiğini söylüyor.

Zaten C++'ın standart new(nothrow)'unun da bir POD tür için aynen öyle olması beklenir. Derleyicinin araya gerekmeyen veya istenmeyen işlemler yerleştirmesi düşünülemez.

Alıntı:

>

yalnızca wrapper olduklarından ciddi performans kaybı yaşamayız. Yalnızca fazladan fonksiyon çağırım süresi var.

Eğer derleyici bu işlevlerin tanımlarını görüyorsa çağırım süresi bile yoktur.

Alıntı:

>

Yazar, bellek ayırdıktan sonra sıfırlama ihtiyacı olabileceğini de söylüyor. Evet yukarıdaki koda bu da güzelce eklenebilir.

C++ o sıfırlamayı POD'ler için bile istendiğinde otomatik olarak yapar. D'de de varsayılan davranıştır ama '=void' söz dizimi ile onun bedeli de ödenmeyebilir. (Hiç önerilmez çünkü rasgele bayt değerleri özellikle çöp toplayıcılı bir ortamde çok tehlikelidir.)

Alıntı:

>

new ve delete yukarıdaki gibi sadeleştirilirse (+ sıfırlama) söylediğiniz bir çok şeyde sizle hemfikirim demektir. ama orijinal new ve delete implementation bence işletim sistemi kernelinin hassas kısımlarında sakınca yaratır

Düşününce öyle gibi ama C++'ın POD kavramını düşününce o sakıncaların ne oldukları hâlâ açık değil. Üstelik C++ bize new ve delete'i her tür için ayrı ayrı tanımlama olanağı verdiğine göre çekirdek yazarları o olanaktan tabii ki yararlanacaklardır.

Alıntı:

>

new ve delete'nin optimal yazılmadığı, genel amaçlı olduğu yazıyor:

Her kütüphane yazarının içine düştüğü bir durum o. :) Bir kullanıcıya yaransak diğerini üzeriz. İşte C++'ın güzelliği burada: her kullanıcı davranışı kendi istediği gibi değiştirebiliyor. Hatta nothrow örneğinde olduğu gibi, kendi özel belirteçlerimizi tanımlayarak farklı new yüklemeleri de tanımlayabiliyoruz.

Alıntı:

>

keyif aldım

Umarım hepimiz. :) Teşekkürler.

Ali

Not: Konu C++'a kaydığı için onun üzerinde kaldık. Yoksa D de aynı derecede alt düzeydir. Şu bölüm ilginç olabilir:

http://ddili.org/ders/d/bellek_yonetimi.html

İlgili olarak, D'nin çöp toplayıcısından bağımsız oyun programı yazmış olan birisi bu işin sıkıntılarını açıklayan bir yazı duyurmuştu. Yazının bağlantısı şuradaki tartışmasının içinde geçiyor:

http://forum.dlang.org/thread/k27bh7$t7f$1@digitalmars.com

(Yazı koyu gri üzerine daha az koyu gri ile yazılmış! İnanılır gibi değil! :))

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

September 10, 2012

Alıntı (Salih Dinçer):

>

GC'deki ve derlemeler arasındaki bu farklar (FPS'ler ve gecikmeler) işin ne kadar ciddi olduğunu gösteriyor.

gdc ile dmd arasında bu program açısından görülen farkın büyüklüğü, dmd'deki yavaşlıkların D ile doğrudan ilgili olmadıklarını da gösteriyor. Bu da hep söyleniyor zaten: dmd'nin şu andaki amacı hızdan çok doğruluk.

Alıntı:

>

Peki hocam 2.060'da durum nedir?

GC konusunda bir fark olduğunu hatırlamıyorum. GSoC D projeleri arasından şu GC'yi geliştirme konusundaydı:

https://github.com/Tuna-Fish/druntime/tree/gc_poolwise_bitmap

O bağlantı şu konunun ikinci mesajında geçiyor:

http://forum.dlang.org/thread/icthpqzrlhmyccqxnskt@forum.dlang.org

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

September 11, 2012

Bir kaç binlik testler yaptım ama her ikisi arasında hiç bir fark göremedim. Yani bir tanesi 'static' üyeli, temsilci üreten bir sınıf olmasına rağmen alıştığımız sınıf ve 'new operator'ü ile aynı tick (uygulamanın başladığı andan itibaren) değeri üretiliyor. Benim yapabileceğim bu kadar, ustalar daha iyi değerlendirecektir...

import std.datetime, std.stdio;

immutable çarpan = 100;
alias int delegate (int a) tem;

class Temsilci {
 static tem katla (int x) {
   return (int a) { return a*x;};
 }
}

class Öğretmen {
 int x;
 this (int x) {
   this.x = x;
 }
 int notVer(int a) {
   return a*x;
 }
}

void main() {
 auto ts = Clock.currAppTick();
/*
 Temsilci temsilci[1_000 * çarpan];
 auto d = temsilci[0].katla(5);
 writeln(d(3));
/*/
 Öğretmen[1_000 * çarpan] öğretmen = new Öğretmen(3);
 öğretmen[0].notVer(5).writeln();
//*/
 ts.writeln();
}

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

September 11, 2012

Performans karşılaştırması için yazılmış deneme programları yanıltıcı olabilirler. Örneğin, gerçekten tek Öğretmen nesnesini paylaşan çok sayıda sınıf nesnesi mi istedin?

En iyisi Benjamin Thaut'un yaptığı gibi gerçek programları karşılaştırmaktır. (Aslında o konunun hepsini okumadım. Belki onun bulgularının nedenleri de açıklanmıştır. Belki bazı kodları farklı yazsa o kadar performans farkı görmeyecektir, vs.)

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

1 2 3 4 5 6
Next ›   Last »