OOP ile ilgili yardım - sayfa 4

 
Vasiliy Sokolov # :

Resmi olarak evet. Gayri resmi olarak, birçok şey onun hala var olduğunu gösteriyor:

  • MQL'de işaretçiler yoktur. Bunun yerine, onları çok anımsatan bir şey kullanırlar.
  • Örneğin C'deki gibi MQL'de doğrudan bellek tahsisi yoktur;
  • MQL programları belirli bir sanal makine tarafından yürütülür. Renat bunu gelişigüzel ve bir kereden fazla yazdı;
  • Otomatik olarak serbest bırakılacak bir sınıf örneği tanımlayabilirsiniz. Dolayısıyla bu örnekleri takip eden ve gerektiğinde serbest bırakan bir mekanizma var. Çöp toplayıcı değilse nedir?
  • Uygun şekilde serbest bırakılmamış bir işaretçi aracılığıyla başlatılan tüm örnekler, programdan çıktığında sızdırılmış nesneler olarak işaretlenecektir. Bunların sayısı ve boşa harcanan toplam bellek miktarı yazdırılacaktır. Bellek sızıntısı olan bir program, Market'te doğrulamayı bile geçemez. Bu nedenle, tüm nesneler, hatta manuel olarak seçilenler bile dikkate alınır, bilinir ve sistem onları bilir. Bu, çöp toplayıcının çözdüğü klasik görevlerden biridir.

Emcule'de çöp toplayıcı olmadığına dair yeterli ve kapsamlı bir işaret var - yeniden sonra silmek gerekiyor.

 
Dmitry Fedoseev # :

Emcule'de çöp toplayıcı olmadığına dair yeterli ve kapsamlı bir işaret var - yeniden sonra silmek gerekiyor.

Hatırladığım kadarıyla geliştiricilerden biri çöp toplayıcının var olduğunu kabul etti. Ancak kullanıcı için "sanki değil".

Eh, yeni silinen çift hakkında - kategorik olarak FOR'yum. Genel olarak, talep edilen kaynaklar, bu kaynakların talep ettiği nesnelerden sorumlu olmalıdır. "Nesne fabrikaları" gibi istisnalar vardır - ancak orada özellikle yaratılan nesnelerin sorumluluğunun, bu nesneleri fabrikadan talep eden kişiye ait olduğu varsayılır.

Yeni olan ve silmenin gerekli olmadığı dillerdeki durumu gerçekten sevmiyorum, "sistem gereksiz şeyleri kaldıracak" diyorlar. Bu, yalnızca iş verimliliğini azaltma potansiyeline sahip olmakla kalmaz (gereksiz nesneler henüz kaldırılmadığında), aynı zamanda kodlayıcının cesaretini kırarak eylemlerinin sonuçlarını takip etmemesine izin verir.

 
Georgiy Merts # :

Yeni olan ve silmenin gerekli olmadığı dillerdeki durumu gerçekten sevmiyorum, "sistem gereksiz şeyleri kaldıracak" diyorlar. Bu, yalnızca iş verimliliğini azaltma potansiyeline sahip olmakla kalmaz (gereksiz nesneler henüz kaldırılmadığında), aynı zamanda kodlayıcının cesaretini kırarak eylemlerinin sonuçlarını takip etmemesine izin verir.

Aksine, üretkenlik genellikle artar. Ana iş parçacığında manuel silme çok zaman alır. + silme, eleman eleman gerçekleşir. Örneğin bu konuda bir komut dosyasının iki sürümünü karşılaştırın. Hızdaki fark birkaç kezdir. Bellek verimliliği de artar. Çünkü çöp toplayıcı nesneleri birbirleriyle sıkıştırarak hareket ettirir. Manuel kontrol ile, bellekte yeniden kullanımı artık o kadar kolay olmayan boş delikler oluşur. Ayrıca toplayıcı diğer akışta çalışır. Ana zaman boşa harcanmaz. Genel olarak, bazı artılar.

 
Vasiliy Sokolov # :

Aksine, üretkenlik genellikle artar. Ana iş parçacığında manuel silme çok zaman alır. + silme, eleman eleman gerçekleşir. Örneğin bu konuda bir komut dosyasının iki sürümünü karşılaştırın. Hızdaki fark birkaç kattır. Bellek verimliliği de artar. Çünkü çöp toplayıcı nesneleri birbirleriyle sıkıştırarak hareket ettirir. Manuel kontrol ile, bellekte yeniden kullanımı artık o kadar kolay olmayan boş delikler oluşur. Ayrıca toplayıcı diğer akışta çalışır. Ana zaman boşa harcanmaz. Genel olarak, bazı artılar.

Vasily, üzgünüm ama şu anda konuşmaya çalıştığın şeyden hiçbir şey anlamıyorsun. Hiçbir şey.

Wikipedia en azından çöp toplayıcının ne olduğunu okuyun. Başlıca özelliği, iletişimin kesildiği nesneleri kaldırmasıdır.

Sadece bu durumda çöp toplayıcı olarak adlandırılacaktır. Bu iki senaryo başka bir operadan. Tanrı'nın omlet hediyesi karıştırılmamalıdır.

Ve ne aniden toplayıcıdan üretkenlik artacak? Bu, kullanışlı kod ve donanım arasındaki başka bir contadır ve bu konuda zayıf değildir.

 
Georgiy Merts # :

Hatırladığım kadarıyla geliştiricilerden biri çöp toplayıcının var olduğunu kabul etti. Ancak kullanıcı için "sanki değil".

///

Bu muhtemelen işin sonunda bir bellek sızıntısı hakkında mesaj veren "toplayıcı"dır.

Belki de terk edilmiş nesneleri bile siler. Ama onları kaldırsa bile, büyük bir

fark - onları yalnızca işin tamamlanmasından sonra siler. Ve eğer binlerce yaratılacak bir döngüde

yeni nesneler? Program çalışmayacak, yeterli bellek olmayacak.

Gerçek bir toplayıcı, program çalışırken artık nesneleri kaldırır,

sadece tamamlandıktan sonra. Bu nedenle, ne zaman böyle özel bir programlama stiline izin veriyoruz?

nesneleri üretmek her koşulda ve herhangi bir miktarda mümkündür.

 
Vasiliy Sokolov # :

Aksine, üretkenlik genellikle artar. Ana iş parçacığında manuel silme çok zaman alır. + silme, eleman eleman gerçekleşir. Örneğin bu konuda bir komut dosyasının iki sürümünü karşılaştırın. Hızdaki fark birkaç kattır. Bellek verimliliği de artar. Çünkü çöp toplayıcı nesneleri birbirleriyle sıkıştırarak hareket ettirir. Manuel kontrol ile, bellekte yeniden kullanımı artık o kadar kolay olmayan boş delikler oluşur. Ayrıca toplayıcı diğer akışta çalışır. Ana zaman boşa harcanmaz. Genel olarak, bazı artılar.

Hmm... Silme işlemi çöp toplayıcıda önemsiz mi? Serbest çekirdek olmadığında başka bir ipliğin aynı çekirdeğin kuvvetleri tarafından gerçekleştirildiğinden ve ana ipliği yavaşlattığından bahsetmiyorum bile.

Benim düşünceme göre, genel durumda, dikkatli bir yaklaşımla, çöpün kullanıcı tarafından toplanması, toplayıcı tarafından kaldırılmasından her zaman daha etkilidir. Ancak dikkatsiz bir yaklaşımla çöp toplayıcı kesinlikle kazanır.

Kaynakların bu kadar dikkatsizce kullanılmasını teşvik eden koleksiyoncuyu bu yüzden sevmiyorum.

 
Dmitry Fedoseev # :

Bu muhtemelen işin sonunda bir bellek sızıntısı hakkında mesaj veren "toplayıcı"dır.

Belki de terk edilmiş nesneleri bile siler. Ama onları kaldırsa bile, büyük bir

fark - onları yalnızca işin tamamlanmasından sonra siler. Ve eğer binlerce yaratılacak bir döngüde

yeni nesneler? Program çalışmayacak, yeterli bellek olmayacak.

Gerçek bir toplayıcı, program çalışırken artık nesneleri kaldırır,

sadece tamamlandıktan sonra. Bu nedenle, ne zaman böyle özel bir programlama stiline izin veriyoruz?

nesneleri üretmek her koşulda ve herhangi bir miktarda mümkündür.

Pekala. Bu yüzden koleksiyoncuyla çalışmaktan hoşlanmıyorum - kullanıcı kaç tane nesne oluşturduğuna ve nerede olduğuna dikkat etmeyi bırakıyor.

Prensip olarak, geliştirme bir yerde basitleştirilmiştir - meşgul olanı silmeyi hatırlamanız gerekmez. Toplayıcı, kimsenin nesneye başvurmadığı anı belirleyecek ve onu kendisi silecektir. Ama bu pozisyon beni iğrendiriyor. Bu konum sayesinde, giderek daha yavaş çalışan, benzer karmaşıklıktaki görevler için giderek daha güçlü donanım kaynaklarına ihtiyaç duyan programlarımız var.

 
Dmitry Fedoseev # :

Vasily, üzgünüm ama şu anda konuşmaya çalıştığın şeyden hiçbir şey anlamıyorsun. Hiçbir şey.

Dmitry, afedersiniz, mukl dışında en az bir programlama dili biliyor musunuz? Hayır, yapmazsın. Ve hala nesneler ve işaretçilerle nasıl çalışacaklarını öğrenmediler - bu, yayınladığınız birkaç koddan ve hatta makaleden açıkça görülüyor. Dolayısıyla bu vasat ve açıkçası aptalca yoruma ciddi anlamda cevap bile veremiyorum. Sonunda Wikipedia'yı falan okuyun, çöp toplayıcının ne olduğunu ve nasıl çalıştığını okuyun, en az bir kez atıfta bulunmaya çalıştığınız şeyi okuyun. Bu arada, her şey bir kervanda havlayan bir köpek gibi görünüyor: anlamsız ve acımasız.
 
Georgiy Merts # :

Hmm... Silme işlemi çöp toplayıcıda önemsiz mi? Serbest çekirdek olmadığında başka bir ipliğin aynı çekirdeğin kuvvetleri tarafından gerçekleştirildiğinden ve ana ipliği yavaşlattığından bahsetmiyorum bile.

Benim düşünceme göre, genel durumda, dikkatli bir yaklaşımla, çöpün kullanıcı tarafından toplanması, toplayıcı tarafından kaldırılmasından her zaman daha etkilidir. Ancak dikkatsiz bir yaklaşımla çöp toplayıcı kesinlikle kazanır.

Kaynakların bu kadar dikkatsizce kullanılmasını teşvik eden koleksiyoncuyu bu yüzden sevmiyorum.

Seçicinin nasıl çalıştığına dair varsayımlarda bulunmak yerine, nesnelerin otomatik olarak silinmesi ve manuel olarak silinmesinin hızlarını karşılaştırın. Tüm fanteziler hemen kaybolacak.

 
Vasiliy Sokolov # :

Nesnelerin otomatik olarak silinmesi ve manuel olarak silinmesinin hızlarını karşılaştırır.

Hemen cevap verilmesi arzu edilir. Deneyler için her zaman zaman yoktur.