October 07, 2013

Alıntı (zekeriyadurmus):

>

en iyisi mixin kullanımlarını daha detaylıca öğrenmem olacak :)

Gerek olduğunu sanmıyorum. Üstelik, işlev çağrısı gibi mixin kodu çok çirkinleştirir.

Ali

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

October 07, 2013

Alıntı (zekeriyadurmus):

>

Hocam "a < b ? b : a" böyle bir ifademiz varsa ve programın çalışma esnasında 1nanosaniyeyi bile hesaba katıyorsak (Script dili için :) ) fonksiyon çağırımı oldukça gereksiz olacak.

O konuda herkes aynı fikirde. Günümüzde C programcıları bile o amaçla #define kullanımının gereksiz olduğunu artık biliyorlar.

Ben denediğimde işlev çağrısı görmüyorum: :)

struct MemoryBlock {
 uint[] searchmask;
}

bool isInSearch(ref MemoryBlock mb, size_t offset)
{
   return (mb.searchmask[(offset)/8] & (1<<((offset)%8))) != 0;
}

void removeFromSearch(ref MemoryBlock mb, size_t offset)
{
   mb.searchmask[(offset)/8] &= ~(1<<((offset)%8));
}

void main()
{
   auto mb = MemoryBlock();
   mb.searchmask.length = 10;
   assert(!isInSearch(mb, 1));
   removeFromSearch(mb, 2);
}

İşlev çağrısı yok:

text._Dmain	segment
	assume	CS:.text._Dmain
_Dmain:
		push	RBP
		mov	RBP,RSP
		sub	RSP,010h
		mov	qword ptr -010h[RBP],0
		mov	qword ptr -8[RBP],0
		lea	RDX,-010h[RBP]
		mov	RSI,0Ah
		mov	RDI,offset FLAT:_D11TypeInfo_Ak6__initZ@64
		call	  _d_arraysetlengthT@PC32
		cmp	qword ptr -010h[RBP],0
		jne	L46
		mov	EDI,023C31h
		call	  _D6deneme7__arrayZ@PC32
L46:		mov	RAX,-8[RBP]
		bt	[RAX],1
		sbb	ECX,ECX
		neg	ECX
		xor	CL,1
		jne	L61
		mov	EDI,023C3Dh
		call	  _D6deneme8__assertFiZv@PC32
L61:		cmp	qword ptr -010h[RBP],0
		jne	L72
		mov	EDI,023C36h
		call	  _D6deneme7__arrayZ@PC32
L72:		mov	RDX,-8[RBP]
		and	dword ptr [RDX],0FFFFFFFBh
		xor	EAX,EAX
		mov	RSP,RBP
		pop	RBP
		ret
		0f1f
		add	[RAX],R8B
text._Dmain	ends

Tabii '-inline' ile derlemek gerek. ;)

Ali

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

1 2
Next ›   Last »