January 03, 2013

Label adresi alınamıyor malesef.

goto yapılarını derleyici zamanında algılıyor yani bir pointerden dönen değer vs olmuyor veya bir labeli başka labele eşitleyemiyorsun

Zekeriya

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

January 03, 2013

Alıntı (zekeriyadurmus):

>

Cevap yazdığınız için teşekkür ederim. Test ettiğim şey basit bir işlem.

> int i = 0;
> while(i<10000000){
>   i++;
> }
> ```


Kafam karıştı. :) D'nin yavaş kaldığını söylerken yukarıdaki döngüyle mi karşılaştırıyorsun? Yani D o döngüyü mü Python'dan daha yavaş işletiyor?

Bence daha ilginç olan, bir dizi Komut'u işletmek olmalı.

Alıntı:
> burada yapılan işlem değişken tanımlama ve ile 0 dan 10000000 a kadar döngü.
>
> PHP çok daha hızlı.

Ben PHP'yi bilmiyorum ama mikroişlemcinin diline derlenmiş bir dil nasıl olur da PHP'den yavaş kalır? Belki de o döngü çok basit olduğu için PHP akıllıca şunu yapıyordur:

i = 10000000;



Alıntı:
> Komut sayısı artacağından sürekli bir switch case yapısı yapmak da istemiyorum açıkcası bütün işlemler doğrudan gideceği adresi bilseler çok daha iyi olurdu.

Eninde sonunda bir *arama işleminden* bahsediyoruz. Bunun çeşitli karmaşıklıkta çeşitli yolları var. Yukarıda bahsettiğim gibi, vtbl bunu sabit zamanda gerçekleştirir. Ve evet, switch-case sırayla arar, vs.

Ali

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

C'ye geçmek bu konu açısından çözüm olmaz çünkü D C'yi neredeyse bütünüyle içeriyor. C'de yapılan D'de de yapılır. Çalışma zamanında süre farkı da olmaz. (Not: gcc dmd'den daha deneyimli olduğundan onun ürettiği kod daha hızlı çalışabiliyor ama bu C ile D'nin farkından değil.)

Ali

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

January 04, 2013

Öncelikle araştırma ve çalışmalarına hayran kaldığımı ifade etmek istiyorum...:)

Bence C biliyorsun çünkü D bilen C'ye yabancı değildir. D gibi bir dil varken C kullanmak çok gerekli değil ama sen bilirsin. Biraz tuttuğunu koparan birine benzediğin için hemen vazgeçmemelisin. Bir çok şeyin çözümü var biliyorsun. Ama "imkansız diye bir şey yoktur" demek istemiyorum. Çünkü sayısız örneği var, mesela:

İç içe iki döngü çalışırken, içteki bitmediği müddetçe dıştaki bitemez gibi...

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

January 05, 2013

D ile C yapı olarak evet benziyor ama D dilini de öğrenmeye yeni başladım yani D dilini dahi tam olarak bilmiyorum :) Mesela static yapısıyla sınıfı çağırmadan alt değerlere erişebiliyormuşum.

Birkaç kere C öğrenme girişimim oldu ama bir türlü IDE veya editör ayarlayamadım. Daha dün C için bilgisayarıma code:blocks, netbeans kurdum ama yine her zamanki gibi bir türlü çalıştıramadım zaten bu 2 ideyi de sevmiyorum. Şimdi ise şansımı eclipse'den yana deniyeceğim. Yine olmazsa windows8 kurarım bilgisayara sıfırdan bu programları kurmaya çalışırım.

D dilinde yapma istediğim işlem aslında çok basit sadece label adresini bir değişkene yazacağım ve goto yaparken bu değişkendeki adrese gideceğim. C de bunu yapmak mümkün ama D dilinde

auto işlem = &yaz

yaz: writeln(2);
bitir: exit();

gibi bir kullanım yapamıyorum & ile veya & siz fark etmez işleme "yaz"ı atamıyorum. Belki bunu bildirirsek yeni sürümde eklerler yapılması zor bir şey olduğunu zannetmiyorum.

Zekeriya

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

January 05, 2013

Teşekkür ederim Ali hocam sizler olmasanız ne yapardım :)

Vote ettim. İnşallah en kısa zamanda dile bu özellik de eklenir.

Orada yazılana göre bu işlemi asm ile de yapmak mümkün ve örnek kod da yazılmış ama ASM bilmiyorum neyse artık öğrenmenin vakti geldi :)

Zekeriya

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

January 05, 2013

Alıntı (zekeriyadurmus):

>

D dilinde yapma istediğim işlem aslında çok basit sadece label adresini bir değişkene yazacağım ve goto yaparken bu değişkendeki adrese gideceğim. C de bunu yapmak mümkün ama D dilinde

> auto işlem = &yaz
>
> yaz: writeln(2);
> bitir: exit();
> ```

>
> gibi bir kullanım yapamıyorum & ile veya & siz fark etmez işleme "yaz"ı atamıyorum. Belki bunu bildirirsek yeni sürümde eklerler yapılması zor bir şey olduğunu zannetmiyorum.
Böyle bir şey yapamazsın çünkü label ve goto derleyiciler için özelleşmişlerdir. Peki, bildiğim kadarıyla BASIC dışında çoğu dilde olmayan bu olayı C'de nasıl yapmayı düşünüyorsun?

Bence temsilci(delegate) kullanmalısın. Böylece etiket yerine güzel parantezler {...} ile kümeler oluşturabilir ve bunların adreslerini istediğin değişkene eşitleyip arzu ettiklerini ve fazlasını yapabileceğini düşünüyorum...

Hatta özelleşmiş bir goto işlevi oluşturman mümkün. Kullanımı da şu kadar anlamlı ve basit olacak:

import std.stdio;
// goto'nun temsilci için düşünülmüş özelleşmiş şekli:
@property
void git (void delegate()* temsilci) {
auto çalıştır = *temsilci;
çalıştır();
}
// bunu bir değişkene eşitlenip kullanma şekli:
void main() {
void delegate() hello = {
"Hello ".writeln("World!");
};

auto ekranaYaz = &hello;
ekranaYaz.git();
/* veya daha kısa ve aracısız şekilde */
hello();
}


Ama temsicilerin bir dezavantajı da çağrıldığı yerdeki tüm durumun bir kopyasını alması ve sistem kaynağını fazlasıyla tüketmesi olabilir. En iyisi, karar vermeden evvel bir dene. Belki hoşuna gider...:)

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

Şahsen denemedim ama aşağıdaki kod çalışıyormuş http://byteworm.com/2010/11/21/the-fastest-vm-bytecode-interpreter/ adresine göre

..
int vm(inst *i) {
	static void *optable[]={
		[OP_NOP]=&&op_nop,	[OP_LDI]=&&op_ldi,	[OP_LDR]=&&op_ldr,
		[OP_STO]=&&op_sto,	[OP_ADD]=&&op_add,	[OP_SUB]=&&op_sub,
		[OP_MUL]=&&op_mul,	[OP_DIV]=&&op_div,	[OP_MOD]=&&op_mod,
		[OP_ORR]=&&op_orr,	[OP_XOR]=&&op_xor,	[OP_AND]=&&op_and,
		[OP_SHL]=&&op_shl,	[OP_SHR]=&&op_shr,	[OP_NOT]=&&op_not,
		[OP_NEG]=&&op_neg,	[OP_CMP]=&&op_cmp,	[OP_BEQ]=&&op_beq,
		[OP_BNE]=&&op_bne,	[OP_BGT]=&&op_bgt,	[OP_BLT]=&&op_blt,
		[OP_BGE]=&&op_bge,	[OP_BLE]=&&op_ble,	[OP_CAL]=&&op_cal,
		[OP_JMP]=&&op_jmp,	[OP_RET]=&&op_ret,	[OP_EOF]=&&op_eof
	};
	int r[4], s[32], *sp=s;
	inst *ip=i;
	...
	op_nop:                         goto *(++ip)->jmp;
	op_ldi:     *sp++=ip->arg;      goto *(++ip)->jmp;
	op_ldr:     *sp++=r[ip->arg];   goto *(++ip)->jmp;
	op_sto:     r[ip->arg]=*--sp;   goto *(++ip)->jmp;
	op_add:     sp--, sp[-1]+=*sp;  goto *(++ip)->jmp;
	op_sub:     sp--, sp[-1]-=*sp;  goto *(++ip)->jmp;
	op_mul:     sp--, sp[-1]*=*sp;  goto *(++ip)->jmp;
	...
}

burada labelin adresini almış. Yazdığınız kod alternatif olarak kullanılabilir ama bu yinede benim hız ihtiyacımı karşılamıyor sınıf çağırma fonksiyon çağırma if kullanımı switch case vs vs bunlardan mümkün olduğunca kaçmaya çalışıyorum.

Şu anda ASM ile bunu yapabileceğimi fark ettim eğer becerebilirsem yazarım :)

Zekeriya

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

January 05, 2013

C'de goto olduğunu bilmiyorum... :blush:

Hatta bunun çağdışı bir komut olduğunu düşünürüm hep. Ancak zorda kalınca kullanmanın bir sakıncası yok. İlk GWBASIC'de tanımıştım sonra QBASIC ve tabi alt yordamları için sanırım bir gotosub ya gosub gibi bir şey vardı diye hatırlıyorum! Hey gidi günler hey...:)

D'de goto'yu görünce biraz önyargılı baktım. Dedim ki "kahretsin, bu çocukca şeye ne gerek var şimdi!" ama lexer falan yazarken çok işe yarayabiliyor.

Verdiğin bağlatıya da baktım ve bir Türkün yorumunu gördüm. Hoş ve de assembly için özeleşmiş olması ilgimi çekti. Mutlaka bu D'ye de uyarlanabilir; belki backend kısmında...

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

January 05, 2013

Bu kavramlara ben de çok yabancıyım ama ihtiyaç oldu :)

Sanırım pek d dilinde opcode mantığını kullanacak birisinin çıkacağını düşünmemişler artık onlar bu özelliği ekleyene kadar ben asm ile yapmalıyım ama bir sıkıntı var ben ASM bilmiyorum :) Bir ara visaulD kullanırken gözüme çarpmıştı yazdığım d kodlarının asm karşılığı falan çıkıyordu yanılmıyorsam en azından bunlara bakarak dizi üzerinde işlem yapabilirim belki ama nerede olduğunu bilmiyorum sizin bu konuda bilginiz var mı?

Aaa evet Türk'ün birisi yorum atmış :) biz Türklerin de bu konularla ilgilenmesi hoşuma gidiyor açıkçası :)

Zekeriya

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