September 20, 2010

Alıntı (canalpay):

>

Bana göre clearı çağırdığımızda bir daha sonlandırıcı ile çağrılmaması için not bırakılmalı.

Şu anda devam eden "crystal clear()" başlıklı konuda da ondan konuşuyorlar. Sonlandırılmış olan nesnenin 'vptr'larını silmekten bahsediyorlar. (vptr, her türün değişik davranması için her türde 'override' ile farklı tanımlanmış olan çok şekillilik işlevlerini barındıran tablo gösterdesidir. "Virtual function table pointer"dan gelir.)

Yani sonunda clear()'in her durumda nasıl doğru çalışacağını anladılar galiba. :)

Tekrar söylemek gerekirse, ben bu çabalarını doğru buluyorum. clear() yalnızca nesneyi sonlandırmalı; nesnenin oturduğu belleğin ne olacağı bizi ilgilendirmemeli.

Alıntı:

>

Ve bence druntimeın şuan ki geliştiricileri(özellkle sean kelly) çöp toplayıcıya hakim değil diye düşünüyorum :-)

Çöp toplayıcı çok özel bir konu olduğu için doğru olabilir; ama ben kendisini çok beğeniyorum.

Alıntı:

>

Ama hala çöp toplama ile ilgili bir hata vardı ve yeniden yazılacaktı.

Farklı yaklaşımlı bir çöp toplayıcı geliştiriliyor diye biliyorum.

Alıntı:

>
>     class selam
>     {
>         static bool değişti_mi=!bool.init;
> ```


Ama o herhalde 'static' olmayacak, değil mi. Yoksa 'selam' türünün bütün nesneleri tek 'değişti_mi''yi paylaşırlar. Onun değerini birisi değiştirse, hepsi etkilenmiş olur. O yüzden bence o 'static' olmamalı.

Alıntı:
> Bu notu bir biçimde clear kendi yapamaz sanırım?

Güzel düşünüyorsun. Evet, yapabilir. Her nesnenin boyu bu iş için bir 'bool' kadar büyümesin diye de vptr'ı temizleme yolunu düşünüyorlar. Daha etkin ama sonuçta aynı mantık: not bırakmak. Hem sonlanmış bir nesnenin hiçbir işlevinin çağrılması da beklenmeyeceği için vptr'ına ihtiyacı da yoktur.

Ali

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

Alıntı (canalpay):

>

Evet static olmamalı. Ancak o zaman her nesneye erişim sağlandığında eğer static ile erişilmez ise tekrar değişken kuruluyor.

Evet, static olmadığında bütün üyeler clear() tarafından ilk değerlerini aldıkları için bizim değişkenin değeri de false oluyor.

Bu bilginin her nesne için ayrı olarak tutulması gerekiyor ama tabii normalde bizim uğraşmamız gerekmemeli.

Ali

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

August 23, 2012

Sanırım clear adı 'destroy' olarak değişecek: https://github.com/D-Programming-Language/druntime/blob/master/src/object.di#L560 //560.satır

Sanırım d.ershane güncellenmesi gerekecek.

Ne zamandır yok bilmesem de artık böyle bir durum yok:
Alıntı:

>

main'e girildi
1 kuruldu
1 sonlandırıldı
2 kuruldu
2 sonlandırıldı
3 kuruldu
3 sonlandırıldı
4 kuruldu
4 sonlandırıldı
main'den çıkılıyor
0 sonlandırıldı
0 sonlandırıldı
0 sonlandırıldı
0 sonlandırıldı

Bunun nedeni, clear'in nesneyi yok etmemesi, ama o türün .init durumuna sokmasıymış. Yani nesne sonlandırılıyor, ama yine de boş bir durumda bulunuyor. Daha sonradan çöp toplayıcı karar verdiğinde, aynı nesneyi bir kere daha sonlandırıyor.

Nasıl düzeldi merak ediyorum.

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

August 23, 2012

Teşekkürler.

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

August 23, 2012

Hatırlattığın için teşekkürler. destroy() artık daha kullanışlı: Nesneyi .init durumuna sokmuyor ve böylece nesne ikinci kere sonlanmıyor. Ondan eminim.

Bundan tam emin değilim: Onun yerine, vtbl pointer'ını null yapma gibi bir yöntem uyguladılar ve böylece nesne sonlandırıcısız (ve başka işlevsiz) bir duruma geliyor ve çöp toplayıcı devreye girdiğinde tekrar sonlanırken artık hiçbir işlev işletilmiyor.

Ali

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

August 23, 2012

HTML sayfasının ismini değiştirmeye gerek görmedim. İçerikteki clear'ler destroy olarak değişti:

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

Ali

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

1 2 3
Next ›   Last »