February 23, 2013

Ne hata veriyordu da artık vermiyor?

Salt kapsam parantezi de oluyor mu yoksa with şart mıymış?

   {
       // ...
   }

Ali

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

February 23, 2013

İstersen kodu bozuk haliyle github'a koy öyle bakalım.

Ali

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

February 24, 2013

Öncelikle şablonlar(templates) derleme anı olanaklar ve sanırım burada iyice kafamızı karıştıracaklar. Yani bir miktar faydalanabiliriz, mesela benzer sınıf kurulumlarında (şu Commands sınıfında) olabilir. Gördüğüm kadarıyla miras yoluyla defalarca alt sınıflara kurulacak bir yöntemimiz de var.

Başka bir yöntem de gördüğüm kadarıyla stack ve getItFunctions isminde diziler var. İşte kilit nokta sanki burada. Yani biz önce projeden bağımsız öyle bir Yığın/Yığıt/Stack, adına her neyse bir yapı kurmalıyız ki istediğimiz verileri gönderelim (push), oradan çekip alalım (fetch).

Bu yığın(stack) öyle bir şey olsun ki önce basit küçük bir yerde işimizi görecek sadelikte gerçeklensin. Yani temel işlevleri ve değişkenleri ile birlikte bunu hemen yapabiliriz. Hatta forumda bolca örneği var. Sonra özelleştirerek (miras alarak) istediğimiz diğer yerlerde kullanalım. Ne bileyim komutların bulunduğu işlevlerin adreslerini tutan işaretçiler olabilir ve/veya belki bu bağlı liste gibi bir şey olur. Bilemiyorum...

An itibariyle projedeki kodları anlamaya çalışıyorum, elimden geldiğince destek olmaya çalışacağım...

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

February 24, 2013

Bak şurada bir şey buldum belki ilgini çeker: http://ddili.org/forum/thread/1013

Enum'ları şablonlar ile okuyorsun. Öyle bir şey yaparsın ki enum'ların verdiği sıkıntıdan kurtarıp bir arayüz (interface) yazarsın. Ama ön tarafta yine enum'lardan faydalanırsın. Bunun içinde arayüzden gelen verileri enum'a döndüren, onu istediğimiz gibi evirip çeviren ve bizim anlayacağımız hale (insancıl) getiren bir şablon yazarız.

Bu belki ileride gerekecek çünkü işler karılıyor gibime geliyor; uyarmadı deme...:)

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

February 24, 2013

Alıntı:

>

An itibariyle projedeki kodları anlamaya çalışıyorum, elimden geldiğince destek olmaya çalışacağım...

Çok teşekkür ederim Salih hocam :) Githubta sizi ekledim bu arada.

Alıntı:

>

Başka bir yöntem de gördüğüm kadarıyla stack ve getItFunctions isminde diziler var. İşte kilit nokta sanki burada

Hocam stack dizisini kaldıracağım. Onun yerine L1, L2, L3 gibi register niyetine kullanmak için değişkenler oluşturdum.
Böyle olunca toplama işlemi yaptığımda 1000 tane işlem 3970 mikrosaniye yerine 109 mikrosaniye oldu.

Alıntı:

>

Bu belki ileride gerekecek çünkü işler karılıyor gibime geliyor; uyarmadı deme...

:) :) İşler gerçekten dediğiniz gibi karışıyor 1.0 da her şey sınıflar halinde olduğu ve 2.0 ı yapacağım için hız konusunda çok da önem vermediğim için karışmadan halletmiştim :D Ama bu şekilde hatalar çıkarması da bu işin tuzu biberi bence :) Olaya ayrı bir tat katıyor. Web tasarımdan çok sıkıldım mesela çünkü bir süre sonra hep aynı şeyleri tekrarlıyorsun. Bunda ise yaptığın yapıyı daha iyi kılmak için sürekli uğraşıyorsun :)

Alıntı:

>

Bak şurada bir şey buldum belki ilgini çeker: http://ddili.org/forum/thread/1013

İnceleyeceğim hocam. Şu an için D de alışamadığım yapılar var. Templateler gibi. Ama acele etmiyorum. Herşeyin bir zamanı var :) Göz aşinalığını sağlayamadım henüz.

Zekeriya

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

February 24, 2013

Salih hocam, Ali hocam bu çöp toplayıcılar başıma bela oldu :)
Aşağıdaki gibi diziye atınca sıkıntı olmuyor. Dizi varlığını devam ettiriyor.

this(bool val = true){ tmpbool~=val; this.typ = DT.BOOL; this.val = &tmpbool[$-1];}

GC yi kapatıp direk val adresini atınca ise değişken hafızadan siliniyor :(

this(bool val = true){ GC.removeRange(&val); GC.disable();this.typ = DT.BOOL; this.val = &val;}

Bunun için ne yapmak gerek?

Zekeriya

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

February 24, 2013

Bize tek dosya içinde çalıştırılabilecek main() işlevi ile birlikte bir örnek hazırlayabilmen mümkün mü?

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

February 24, 2013

Alıntı:

>

Bize tek dosya içinde çalıştırılabilecek main() işlevi ile birlikte bir örnek hazırlayabilmen mümkün mü?

Deniyorum ama aynı şartları sağlayamadım şu an :( Değişkenler hafızadan silinmiyor. Denemeye devam ediyorum hala eğer yapabilirsem atarım.

Zekeriya

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

February 24, 2013

Alıntı:

>

Sorunun çöp toplayıcı ile ilgili olduğundan emin misin?

Sanırım çöp toplayıcılar içerisine girmiyor bu sorun. Local bir işlevde tanımlanan değişkenin adresini alıp void* e atıyorum. O işlev bittikten sonra o değere erişmeye çalışıyordum. Ama o işlev bittikten sonra o değişken hayatını kaybediyor. Bunu da çöp toplayıcılar yapıyor diye düşündüm.

Alıntı:

>

Dizi varlığını neden sonlandırsın ki zaten.

Sanırım yanlış söyledim :) Dizi varlığını sonlandırmıyor. Varlığını sonlandıran diğer örnek çalışmadığı için bir diziye attım ve bu halinde dizi global olduğu için sonlanmıyor ve veri silinmiyor.

Alıntı:

>

Aynı nedenden, this.val'e geçici bir değişkenin adresini vermen de yanlış olmuş. Acaba parametre 'ref bool' mu olmalı. Tabii o zaman bile çağrılan yerdeki bool'un uzun süre yaşayacağını garanti etmen gerekiyor. Örneğin o da yerel bir değişken olamaz.

Ref bool olduğu zaman OP(123) gibi bir değer gönderemiyorum. Onun yerine önce int d=123; OP(d) yapmam gerekiyor. Böyle bir tanımlama da yapmak istemiyorum. Şunu düşünüyorum sonuçta 123 değeri hafızada bir yerde duruyor. Oluşturulmuş 1 kere silinmesin hafızadan. Hep dursun.

Sanırım bu işlemler için hafıza yönetimiyle ilgili bir sınıf yazmak gerekecek. Kendi çöp toplayıcım, veri yapımı oluşturmalıyım.

Zekeriya

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

February 24, 2013

Sonunda başardım :) Ve soruna malloc ile yer açarak çözüm buldum.

module main;
import std.stdio;
import std.conv;
import core.memory;
int[] tmpint;
import std.datetime;
class myc{
/*	int* test(){
		enum size = 1_000;
		auto rawMemory = cast(int*) core.stdc.stdlib.malloc(int.sizeof*size);
		auto cur = rawMemory;
		for(int z = 0; z<1_000;z++){
			*cur = z;
			cur++;
		}
		return cast(int*) rawMemory;
	}
*/
	void altcagir(){
		op[] list;
		list~=op(1);//direk adres alma
		list~=op(2, false);//diziye atma
		list~=op(3, true);//malloc
		toString(list);
		auto a1 = Clock.currAppTick().usecs();
		for(int zz; zz<1_000; zz++) list~=op(1);
		auto a2 = Clock.currAppTick().usecs();
		writeln(a2-a1);
		a1 = Clock.currAppTick().usecs();
		for(int zz; zz<1_000; zz++) list~=op(2, false);
		a2 = Clock.currAppTick().usecs();
		writeln(a2-a1);

		a1 = Clock.currAppTick().usecs();
		for(int zz; zz<1_000; zz++) list~=op(3, true);
		a2 = Clock.currAppTick().usecs();
		writeln(a2-a1);
	}
	struct op{
		this(int mt){
			ps = &mt;
		}
		this(int mt, bool ft){
			if(ft){
				ps = cast(int*) core.stdc.stdlib.malloc(int.sizeof);
				* cast(int*) ps = mt;
			}else{
				tmpint~=mt;
				ps = &tmpint[$-1];
			}
		}
		void* ps;
	}
	void toString(op[] zz){
		foreach(o;zz){
			writeln(*cast(int*) o.ps);
		}
	}

}
void main(){
	auto ll = new myc();
	ll.altcagir();
	while(1){}
}

Konsol çıktısında ilk verinin değeri hatalı gelirken, 2.verinin değeri hatasız bir şekilde geliyor

Not: Olayın daha iyi anlaşılması için kodda 1-2 değişiklik yaptım.

Zekeriya

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