Forum: Diğer Konular RSS
Transmogrifier
erdem (Moderatör) #1
Üye Tem 2009 tarihinden beri · 978 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: Transmogrifier
Bunu konu dışı olarak açtım. Çünkü bir kısmı konu dışı bir kısmı konu içi olmuş oluyor.

Şimdi konu dışı olan kısım. Bu transmogrifier içine koyduğumuz bir şeyi başka bir şeye çeviren bir kutu mu. Bu mudur :)

[Resim: http://images2.wikia.nocookie.net/__cb20070709025203/candh/images/5/5a/Transmogrifier_zap.png]

Konuyla alakalı kısmına gelince bir diziyi ilklendirilmemiş olarak bırakıp, çalışma anında ilklendirmek için buradaki gibi başına void koyuyoruz. Bu tür bir kullanım özellikle geçici bellek görevi gören büyük diziler için faydalı oluyor.

class Transmogrifier {
    double[128] alpha = void;
    size_t usedAlpha;
 
    this() {
        // usedAlpha = 0 ve alpha'yı ilklendirilmemiş olarak bırak
    }
}

Buradaki örnekte Transmogrifier sınıfı kullanılan alpha miktarını değeri başlangıçta sıfır olan usedAlpha isimli başka bir değişkende tutuyor. Transmogrifier'ın ilklendirilirken (kurucu işlevinde) usedAlpha 0 değerini alıyor alpha ilklendirilmemiş olarak kalıyor.

Kodumuz alpha[usedAlpha .. $] aralığındaki elemanlara bir değer yazılmadan kesinlikle bu aralıktaki bir elemanın değerini okumamalıdır.

İngilizcesini de yazıyorum:

As usedAlpha grows, the code must never read elements in the interval alpha[usedAlpha .. $] before writing them.

Şimdi ben bu sınıfın gerçeklemesini düşünemiyorum. Yani bu sınıfa hangi durumda ihtiyaç duyarız. Sınıfın gerçekleme kısmı nasıl olur.

İkincisi bir diziyi ilklendirmemiş olarak bırakıp nasıl geçici bellek görevi gördürebiliriz.
Bu mesaj erdem tarafından değiştirildi; zaman: 2011-04-24, 17:40.
acehreli (Moderatör) #2
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
erdem:
Bu transmogrifier içine koyduğumuz bir şeyi başka bir şeye çeviren bir kutu mu. Bu mudur :)

Ben "transmogrify"ı "transform" ile uyduruk bir son ekin birleşmesi olarak düşünüyordum. 42 ve foo'nun arkadaşı olarak türemiş sanıyordum. Şimdi öğrendiğime göre gerçekten varmış öyle bir sözcük. Biçimini değiştirmek (belki de biraz yamultmak :)) anlamına geliyormuş.

Yani bu sınıfa hangi durumda ihtiyaç duyarız. Sınıfın gerçekleme kısmı nasıl olur.

Benim anladığım, o örnekteki sabit uzunluklu dizi aynı C ve C++ dizileri anlamına geliyor. Kendisi için yer ayrılmış ama o elemanlar ilklenmemiş. Bence onlara doğrudan değer atamak kadar kolay olmalı.

İkincisi bir diziyi ilklendirmemiş olarak bırakıp nasıl geçici bellek görevi gördürebiliriz.

Atama ile olabilir. Yukarıdaki Transmogrifier'ı C++'taki std::vector'ın eşdeğeri olarak düşünebiliriz. Kapasitesi 128 ama kullanılan eleman adedi sıfır. elemanEkle() diye bir işlevi olabilir:

    void elemanEkle(int değer)
    {
        alpha[usedAlpha] = değer;
        ++usedAlpha;
    }

Ali
erdem (Moderatör) #3
Üye Tem 2009 tarihinden beri · 978 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
acehreli:
Yukarıdaki Transmogrifier'ı C++'taki std::vector'ın eşdeğeri olarak düşünebiliriz. Kapasitesi 128 ama kullanılan eleman adedi sıfır.

Teşekkürler. Bu karşılaştırma sayesinde ne yapılmak istendiğini anladım :)
Avatar
mert #4
Üye Ara 2010 tarihinden beri · 194 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: Tpdl hakkında
Erdem merhaba,
Galiba Tdpl ile ilgili bir çalışma yürütüyorsun, Sanırım bir çeviriydi. Peki o gerçekleştirdiğin çalışmayı benim de takip etme olanağım var mı?
mert
Bu mesaj mert tarafından değiştirildi; zaman: 2011-04-25, 01:27.
erdem (Moderatör) #5
Üye Tem 2009 tarihinden beri · 978 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Yok çalışma yürütmüyorum :)

Yürütmüyorum derken sadece okuyorum. Şu an nesneler ile ilgili bölümdeyim.

Erdem:
Bu konuda Scott Meyers'ın The D Programming Language kitabında bir giriş yazısı var. Aslında bu bölümü çevirebilseydik çok süper olurdu  ;-)

Eğer yukarıdaki alıntı yüzünden öyle düşündüysen benim hatam. Telif hakları yazara ait olduğu için Scott Meyers'ın giriş yazısını çeviremiyoruz anlamında kullandım. Eğer benim kullanımımdan böyle bir şey anlaşıldıysa özür :huh:

Aslında en iyisi dershanedeki türkçe dersler okunduktan sonra ikinci kitap olarak TDPL okunabilir. Eğer temel bir D bilgim olmasaydı oldukça zorlanabilirdim. Ama şimdi fıstıklı kadayıf gibi :)

Ben Amazondan aldım:

http://www.amazon.com/D-Programming-Language-Andrei-Alexan…

İkincisi sadece 10 küsür lira kargo parası verdim ki bu hiç bir şey değil. 10 günde de elime ulaştı. Daha önce de keman yastığı vs.. bazı aksesuarlar almıştım. Onlar da çok kaliteli çıktı. Bence kitabın fiyatı da gayet makul sayılır. O yüzden eğer dershanedeki dersleri bitirdiysen tavsiye ederim :)
Avatar
mert #6
Üye Ara 2010 tarihinden beri · 194 mesaj
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Almayı düşünüyordum ne zamandır. Aslında zamanlama olarak derslerin bitişine denklemem daha iyi olacak diye ertelemiştim ben de aynı sebepten. Kitap bu; geldiği anda kokusuna dayanamıyor insan, açıp okumaya dalıyor sonra kaptırıyor kendisini. Bölünmüş olmak da içime sinmiyor açıkçası. Önce kendi kitabımızdan yürüttüğüm programım sonlansın diye bakıyorum. Daha arayüzler konusundayım. Ancak bu noktada daha fazla ilerlemeden önce forumdaki ders arası ve dil üzerine olan bölümlerde tartışılmış konuların üzerinden geçmeyi planlıyorum ki iyice pekişsin bilgilerim. İleriye doğru gidiş geçilenler yarımyamalak kavrandığında karmaşa yaratmaktan başka hiçbir işe yaramıyor. Bunlar bittikten sonraki Uygun bir zamanda siparişimi geçeceğim o halde.
Link ve bilgi için teşekkürlerimle

mert
mert
erdem (Moderatör) #7
Üye Tem 2009 tarihinden beri · 978 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Yukarıdaki örneği bir vektör sınıfına çevirmeye çalıştım. Ortaya böyle bir şey çıktı :)

Bu arada C++'nin gerçek std::vector gerçeklemesini hatırlamıyorum. Öylesine yazdım.
 
class Vektör {
    double[128] kapasite = void;
    size_t elemanAdedi;
 
    void elemanEkle(int değer) {
        kapasite[elemanAdedi] = değer;
        ++elemanAdedi;
    }
 
    void yazdır() {
        foreach (i; 0 .. elemanAdedi) {
            writeln(kapasite[i]);
        }
    }
    
    this() {
        // elemanAdedi 0 ve kapasiteyi ilklendirilmemiş olarak bırak
    }
    
}
 
unittest {
    auto vektör = new Vektör;
    vektör.elemanEkle(7);
    vektör.elemanEkle(5);
    vektör.yazdır;
    writeln("Vektörün eleman sayısı: ", vektör.elemanAdedi);    
}
    
void main() {}
Bu mesaj erdem tarafından değiştirildi; zaman: 2011-04-25, 14:29.
erdem (Moderatör) #8
Üye Tem 2009 tarihinden beri · 978 mesaj · Konum: Eskişehir
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Tam olarak transmogrifier buymuş :)

http://bit.ly/120FQL
Bu mesaj erdem tarafından değiştirildi; zaman: 2011-05-02, 23:24.
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-20, 01:29:24 (UTC -08:00)