Thread overview
Global Değişken Kullanımları
October 28, 2015

Halen daha çözemediğim bir şey var.

__gshared, static, shared veya bunların hiçbirini kullanmadan global bir değişken tanımlamak arasındaki farklar tam olarak ne? Üretilen asm çıktısı, performans, stabilite vs vs.

Eğer sadece tek 1 seferlik yazılacak ve bütün program içerisinde geçerli olacak bir verimiz var ise. Ayrıca bu veriye ulaşma süresi daha öncelikliyse ne yapmalıyız? Bu veri aynı zamanda threadler tarafından eşzamanlı olarak erişilebilir olacak ama sadece okunabilir(read-only). Yazma işlemi program açılırken 1 defaya mahsus olacak.

İnternette çok ilginç bir yazı serisi buldum aslında http://c2.com/cgi/wiki?GlobalVariablesAreBad

Laravel kullanırken Dependency Injection, Singleton gibi kavramlarla bunları hallediyorduk. Ama benim her şeyden çok önceliğim hız.

Bir aralar bunu sormaya çalışıyordum ama bir türlü ifade edememiştim (bilmediğiniz bir şeyi ifade etmeye hatta soru sormaya çalışmak gerçekten zor :) ) Elimde yarım yamalakta olsa bir kaç kavram ve bir kaynak var ama daha detaylı bilgi istiyorum ayrıca kesin yargılardan ziyade şu durumda bunun kullanılması daha doğru olur şeklinde yargılar da yardımcı olabilir.

Umarım fazla kafa bulandırmamışımdır :)

Ek olarak:

Bütün bunları derinlemesine inceleyen bir kitap, kaynak harika olurdu.

code.dlang.org adresinde https://github.com/mbierlee/poodinis gibi bazı kütüphaneler var.

Zekeriya

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

October 28, 2015

Web sürümündeki dersleri okudum ama tam anlamıyla yeterli gelmedi açıkçası. Biraz daha fazla detay, örneklemeler, karşılaştırmalar vs vs gerekti.

Örneğin shared ve __gshared tam olarak nasıl implemente ediliyorlar.

Açıkçası bütün bunlardan da öte programın tam anlamıyla nasıl çalıştığını anlamak istiyorum. Derleyicinin çalışma prensibinden, linklenmesine, runtime esnasında neler olduğuna kadar. Derlemeli dillerin eğlencesi benim için burada.

Örneğin try-catch mekanizmasının setjmp ve longjump adı verilen fonksiyonlarla yapıldığını öğrenmiştim. High-level'a çıktıkça bazı şeyleri kaçırıyor olmak ve soru işaretleri kalması hoşuma gitmiyor.

Vizelerim başladığı için şu sıra bakamayacağım ama fırsat bulduğumda "design patterns" olaylarına bakacağım. Hatta belki üniversitede dersimiz olur bununla alakalı. Eğer yeni bir şeyler öğrenirsem haberdar ederim.

Teşekkür ederim :)

Zekeriya

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

October 28, 2015

Öncelikle, işin güzeli, D'de değişkenler öncelikle iş parçacığına özel (thread-local). Ek olarak, modül düzeneği bulunduğundan, global değişkenler isim çakışmalarına da neden olmuyorlar çünkü aslında hiçbir değişken global değil, hepsi mutlaka bir modüle ait.

Alıntı (zekeriyadurmus):

>

__gshared, static, shared veya bunların hiçbirini kullanmadan global bir değişken tanımlamak arasındaki farklar tam olarak ne?

Modül düzeyinde tanımlarsan thread-local bölgede yaşıyor. Dolayısıyla, birden fazla iş parçacığı başlatıldığında o değişkenin bir çok kopyası yaşıyor.

Bütün programda tek adet istiyorsak shared olmalı.

C kütüphanelerinde tanımlanan global değişkenleri bildirmek (veya kendimiz o kütüphaneler gibi tanımlamak) için __gshared kullanmak gerekiyor. __gshared ile shared arasında bağlayıcı (ve loader) açısından fark var. Zamanında okuduğum tartışmalara göre __gshared daha hızlı. (Herhalde shared için bir tane daha indirection oluyordur; ayrıntısını hatırlamıyorum.)

static'in durumunu denemeden bilemem. (Denemedim. :p)

Akılda tutulması gereken bir şey: Bu iş parçacığının değişkenlerini ilklemek için 'static this', programda tek olan (shared ve __gshared) değişkenler için 'shared static this':

http://ddili.org/ders/d/es_zamanli_shared.html#ix_es_zamanli_shared.shared%20static%20this

Alıntı:

>

Bu veri aynı zamanda threadler tarafından eşzamanlı olarak erişilebilir olacak ama sadece okunabilir(read-only). Yazma işlemi program açılırken 1 defaya mahsus olacak.

O zaman '__gshared immutable' olarak dene ve 'shared static this' bloğunda ilkle. (Evet, immutable bile olsa o blokta ilklenebiliyor ama pure bir işlev çağırman gerekebilir: değişken = ilkleme_işlevi() gibi...)

Alıntı:

>

İnternette çok ilginç bir yazı serisi buldum aslında http://c2.com/cgi/wiki?GlobalVariablesAreBad

Evet, global değişkenler C, C++, vs. baş belası olabilirler! :) Dediğim gibi; neyse ki D, Python, vs. gibi dillerde tam anlamıyla global değiller.

Ali

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