Jump to page: 1 2
Thread overview
June 02, 2013

Zekeriya'nın Rhodeus Script'inin de bu konuda sıkıntıları olmuştu. Sonlu durum makinelerinde de yararlı... Birisi daha aynı konudan şikayetçi:

http://forum.dlang.org/post/koc0ro$1p8c$1@digitalmars.com

Ali

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

June 03, 2013

Walter amcamız etiket adresi alma özelliğini eklemeyi düşünmüyor sanırsam ama adreste belirtildiği gibi bu özellik sadece interpreter ve benzeri yapımları kolaylaştıran bir özellik olacağı için çok da olması gereken bir özellik değil ama d dilinin low level özellikleri çok yetersiz geliştirilmesi gereken bir çok nokta var.

Belki de birkaç kişi daha durumdan şikayetçi olursa D diline de bu özellikleri Walter amcamız getirir.

Ama bu işlemleri yapmak için doğrudan etiket adresi almaya gerek yok. Bir ara iasm ile bu işi yapmaya çalışıyorduk sağolsun Ali hocam ve Salih hocam bu konuda bana oldukça yardım ettiler ve başardık. Ama sonradan fark ettim ki bu hız artışı çok da büyük olmuyor bundan erken başka şeylerle hız artışını sağlamalıydım (hafıza yönetimi, adreslemeler gibi). Bu noktadan hareketle variantları sınıflara, sınıfları da structlara çevirince oldukça hız artışı sağladım. Bu ve bunun gibi işlemler, doğrudan adrese atlamaya göre daha fazla hız kazandırıyor. Bu yüzden etiket adresi alma işlemini kaldırdım ve ileriki aşamalarda eklemeye karar verdim. Dili hızlandırabilmek için programlama adına daha öğrenmem gereken çok şey var...

Zekeriya

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

June 03, 2013

Hadi ya bunu öğrenmem çok iyi oldu Ali hocam. Bir kaç yerde görmüştüm bu kullanımı ama bir anlam verememiştim ve neden yavaş olduğunu şimdi anlamış oldum ama yinede sınıflar structlara göre yavaş çünkü sınıf oluşturma işlemleri çok vakit alıyor...

Peki aynı şekilde final class yazsak?

Zekeriya

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

June 03, 2013

Ali hocam bu bahsettiğiniz şeyler hakkında örnek birkaç kod yazabilir misiniz rica etsem?

Zekeriya

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

June 03, 2013

Alıntı (zekeriyadurmus):

>

sınıfları da structlara çevirince oldukça hız artışı sağladım

Senin için etkili miydi bilmiyorum ama D'nin sınıflarıyla ilgili bir özelliği hatırlatmakta yarar var. Bunu pek konuşmuyoruz çünkü doğrusu ne kadar önemli olduğuna ben de ancak DConf sırasında uyandım.

C++'ın aksine, D'de sınıf üye işlevleri 'virtual' varsayılıyor. Bu da, virtual olması gerekmeyen işlev çağrılarının bile işlev tablosu (vtbl) üzerinden geçmesine ve dolayısıyla iki düzeyli hız kaybına neden olabiliyor: hem gereksiz bir atlama oluyor, hem de vtbl işlemcinin ara belleğinde olmadığında dış belleğe erişime neden oluyor.

O yüzden, D programcısı her sınıf işlevini öncelikle 'final' olarak işaretlemeli ve ancak gerçekten 'virtual' olması gerektiğinde 'final'ı kaldırmalı.

class C
{
   int i;

   // Alt sınıf tarafından tekrar tanımlanacak bir işlev değil:
   final void kendiÖzelİşlemlerim()
   {}

   // Normal arayüz işlevi:
   void foo()
   {}
}

Ali

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

June 03, 2013

Alıntı (zekeriyadurmus):

>

sınıf oluşturma işlemleri çok vakit alıyor...

Evet, normalde öyle. Sınıfta ısrarcı gibi görünmek istemem, hiç öyle bir durumum yok ama herşeyin çözümü var. Eğer sınıf gerekiyorsa, örneğin çokşekillik tasarımı kolaylaştırdığı için sınıf kullanılacaksa, sınıf nesnesi std.typecons.scoped ile de kurulabilir std.conv.emplace ile de...

O yöntemlerin yapı kurmadan daha yavaş kalacaklarını sanmam.

Alıntı:

>

Peki aynı şekilde final class yazsak?

Aynı şey değil. final class, türetilemeyen sınıf demek. Oysa bizim final class başka bir sınıftan türemiş olabilir ve bir işlevi üstteki sınıfta zaten virtual'dır. O zaman o işlevin final class nesnesi üzerinden çağrılması bile vtbl'a bir ziyaret gerektirir.

Ali

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

June 03, 2013

Teşekkürler hocam, bunu öğrendiğimiz iyi oldu...

Peki virtual ne demek bunu öğrenebilir miyiz? Gerçi sözcük karşılığı sanal ve zannedersem hız kaybının nedeni açıklarken bellekte iki kere gezindiğinden bahsettiniz ama OOP dünyasındaki yeri nedir?

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

June 03, 2013

Assembly kodlarına bakmadım ama bu bir derleme zamanı olanağı gibi geldi bana...:)

Basit olmayan ve çalışma zamanında virtual'ın faydasını ve/veya yavaşlığını (adrese ulaşmak için 2 kere dallanma yapıldığını) gösteren bir örnek daha rica edebilir miyim?

Çünkü burada interface tıpkı bir işlev şablonu gibi davranıyor olmalı (?) sanırım assembly kodlarına bakarsak main() aslında aşağıdakine benzer derleniyor olabilir.

   foo(&Bir_Adres.kedi);
   foo(&Bir_Adres.köpek);

Tabi yine D kodu olarak mantıksız ama siz foo() çağrılmadan evvel stack'e sınıfın adresini bir kerede (tek satırda) yüklendiğini görebilirsiniz. Sonra foo() için de ise ikinci bir call asıl işleve çağrılır. Burada ikinci call komutunun kullanılması, örneğin planlaması ile alakalı yoksa bellekten adres 2 defa istenmiyor zannedersem. Hatta üçüncü bir call ise writeln() işlevinin olacak ve o da başkalarını tetikleyecek, nihayetinde ekrana yazı yazılacak...

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

June 03, 2013

Örnek yazarım tabii ama şuradakilerin benzerleri olur: ;)

scope için:

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

emplace için:

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

Ayrıca teknik açıdan geri kalmış olsa da şuradaki gibi bellek yönetimi bilgileri her zaman işe yarar:

http://ddili.org/makale/bellek.html

Ali

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

June 04, 2013

Bu son bahsetmiş olduğunuz konu da benim çok merak ettiğim bir konu idi teşekkür ederim :)

Bunlar güzel konular ve mutlaka öğrenilmesi gereken şeyler ve Ali hocam derslerinizi okuyup anlamaya çalışıyorum (Uzun zamandır bir şeyler okumuyorum beynim algıda daha da tembelleşmiş). Ali hocam sınıf yapılarının çalışma mantığını detaylıca anlatan bir kaynağınız var mı? Burada hem benim hem de Hüseyin Akbaş kardeşimizin oldukça işine yarayacağını düşünüyorum.

Zekeriya

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

« First   ‹ Prev
1 2