February 10, 2012

Şimdi örneklere baktım da harikaymış, teşekkürler...

version(build){
	debug{
		pragma(link, "dwtd.lib");
		pragma(link, "dwtextrad.lib");
		//pragma(link, "dparser/dparser.lib");
	}else{
		pragma(link, "dwt.lib");
		pragma(link, "dwtextra.lib");
		//pragma(link, "dparser/dparser.lib");
	}
	pragma(link, "phobos.lib");
}else{
	debug{
		pragma(lib, "dwtd.lib");
		pragma(lib, "dwtextrad.lib");
	}else{
		pragma(lib, "dwt.lib");
		pragma(lib, "dwtextra.lib");
	}
	pragma( lib, "uuid.lib");
}

Ama sanki bunlar birden fazla dosyadan oluşan IDE ile tasarlanan projeler için. Yoksa tek dosyalı şeylerde kullanabilir miyiz?

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

February 10, 2012

Benim deneyimim yok ama pragma(link) eskiymiş. pragma(lib) kullanılabilir:

pragma(lib, "abc");

void main()
{}

Programın abc kütüphanesiyle bağlanması gerektiğini kaynak koda ekleyebilmek güzel. Öyle bir kütüphane bulunmadığında da bağlayıcı hata veriyor:

'/usr/bin/ld: cannot find -labc'

Ali

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

February 23, 2012

Artık çok güzel şeyler var; eskiyi hatırlarım böyle miydi!

NYP (OOP) bile tek başına büyük bir nimet. Aslında her şey derleyici ile bizim aramızda gelişen gösterim teknikleri...

Yoksa olayı basit (clear~simple) olarak değerlendirdiğimizde değişen belki de çok bir şey yok. Tıpkı D'de birden fazla mantık sıralamalı (örn. if(s=="a"||s=="b"||s=="c") sorgu ile 'switch()' kullanmanın assembly kodu karşılığında hiç bir farkı olmaması gibi...

Bu arada, az önce şurada (http://www.eskimo.com/~scs/cclass/krnotes/sx4b.html) çok güzel bir örnek ile karşılaştım. Aslında "while(i < j) i = 2 * i;" satırını şöyle ifade edebilir ama siz de dahil anlamak için uzun çaba sarf etmeniz gerekebilir...:)

while (
i	 <
j	 )
i	 =
2	 *
i	 ;

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

March 10, 2012

Bugün MVC (http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller) yapısında kod yazmaya karar verdim...

Çünkü üzerinde çalıştığım projede (http://ddili.org/forum/thread/737) gerekli görünüyordu! Kod örneklerini araştırırken yeni bir şey ('çift nokta ile işlev işaretleme') keşfettim; herhalde bu sayede, uygulama dosyaları gereksiz yere şişmemiş oluyor:

// This implements an improved algorithm of Guenter Stertenbrink's suexco.c
// (http://magictour.free.fr/suexco.txt).

import core.stdc.stdio: puts, fgets, stdin, putchar;
import core.stdc.string: strlen;

**Kaynak: **http://codepad.org/RejDPkGh/fork <-- bu kodun ne işe yaradığını bilmiyorum, hiç sormayın...:)

Ekleme: Bugün Ali Hocam '/.../' açıklama imlerini de sorunsuz bir şekilde içine alan '/+ ... +/' imlerinden bahsetti ki tam da beyin kavrulduğu sırada (brain stroming) imdata yetişti yani ferahlatıcı yeni çözümlerden (cozzz, beyni kurtardık :-D) biri oldu...

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

March 10, 2012

Alıntı (Ali Çehreli):

>

Alıntı (Salih Dinçer):

>
> > import core.stdc.stdio: puts, fgets, stdin, putchar;
> > import core.stdc.string: strlen;
> > ```

> > **Kaynak: **<http://codepad.org/RejDPkGh/fork> <-- bu kodun ne işe yaradığını bilmiyorum, hiç sormayın...:)
> Programın büyüklüğüne etkisi olduğunu sanmıyorum. Phobos modülleriyle deneyebilirsiniz. Bu olanağın amacı, global isim alanının kirletmemek ve olası isim çakışmalarının olasılığını azaltmaktır...
İsim kirliliğinden dolayı olduğunu bilmiyordum ama hoş durduğu kesin. Sanki yazılımın bir özeti gibi duruyor ve kullandığınız işlevler daha başlangıçta okuyucu (yani diğer bir programcı) tarafından anlaşılıyor. Bunu kod yazma geleneğime eklemeye başladım. Zor ve gereksiz gibi görünse de sevdim.

Alıntı (acehreli):
> Not: Senin söylediğin daha çok "brain fried"a benziyor. :) "Brain storming" hani toplantılarda sıkılmadan saçma gibi gelse de fikirler ortaya atarak birlikte çözüm bulma olayı.
Brain fried diye de mi bir tabir varmış? Genelde ben, sesli düşünürken beynim sıcaklamaya başlar (deli gibi çalışmaya başlar) o yüzden böyle bir espri yaptım. Yani artık sessiz düşünmek yetmiyor dışarı taşıyor ve gel beni soğut diyor...:)

Sevgiler, saygılar...

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

Üniversitede okuyorken...

İşe bakın baş harfi D olan Delphi ile cebelleştiğim tarihler de gelecekteki karmaşayı sezinlenmiş olacaklar ki /+ ... +/ özelliğini bu dil ile insanlığa kazandırmışlar:
Alıntı:

>

What's New for D 0.19

Feb 8, 2002
Bugs Fixed

Zaten Ali Hocam, bunu bize öğretmişti: Yaklaşık 10 yıl sonra, 2012...
Alıntı (acehreli:1331329523):

>

Alıntı (Salih Dinçer):

>

yıldız yerine artı kullanılarak yapılan şeyin bir esprisi var mı?

Onlar '/* ... */' açıklamalarını da kapsayabiliyorlar.

>     /+
>     /*
>         // tek satır açıklama
>         int i;
>
>         çok satır açıklama
>     */
>
>     int j;
>
>         hepsini kapsayan açıklama
>     +/
> ```

>
> '/+ ... +/' yerine '/* ... */' kullanılmaya çalışılsaydı, kodun tam ortasında bulunan '*/' belirtecine kadar etkili olurdu. (Deneyiniz. ;))
>
> Ali
>

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

Alıntı (Salih Dinçer):

>

herhalde bu sayede, uygulama dosyaları gereksiz yere şişmemiş oluyor

Programın büyüklüğüne etkisi olduğunu sanmıyorum. Phobos modülleriyle deneyebilirsiniz. Bu olanağın amacı, global isim alanının kirletmemek ve olası isim çakışmalarının olasılığını azaltmaktır. Her iki modül de Üçgen diye bir tür tanımlasa ve biz her iki modülü de programımıza eklesek, programda Üçgen dediğimizde derleyici hangisini kasdettiğimizi anlayamaz. Seçerek import bunu azaltıyor.

Ali

Not: Senin söylediğin daha çok "brain fried"a benziyor. :) "Brain storming" hani toplantılarda sıkılmadan saçma gibi gelse de fikirler ortaya atarak birlikte çözüm bulma olayı.

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

March 10, 2012

Küçük bir şey daha unutmuşum, az önce kullanınca farkettim. Diyelim ki iki kümeyi tek taksimi (slash: /) kullanarak aç/kapa (swap) yapmak istiyorsunuz. Bunun için '///' yanında kullanmanız gereken kümeler arasında '//' grubu.

/* <--- aşağıdaki işlevi açmak için, başa / ekleyin...
bool bitTest(uint k) {
   ubyte a = veriler[k >> 3];
   for (uint i = 0; i < (k % 8); i++) a >>= 1;
   if (a % 2 == 1) return true;
   return false;
}/*/

bool bitTest(uint k) {
   ubyte bits = veriler[k >> 3];
   if ((bits & (1 << k % 8)) != 0) return true;
   return false;
}//*/

Deneyin...:)

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

March 11, 2012

Evet, güzelmiş. :)

Ali

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

August 31, 2012

Yeni bir teknik öğrendim!

Örneğin elinizde, yazılımın ayarlarını anlamlandırdığınız şöyle bir yapı var:

// Times
enum Times {
	Imsak,
	Fajr,
	Sunrise,
	Dhuhr,
	Asr,
	Sunset,
	Maghrib,
	Isha,
	Midnight,

	TimesCount
}

Mesela ayarları tuttuğunuz dizide (örn. times[]), bu anlamları kullanırken, en sondaki eleman doğal olarak dizinin boyutunu veriyor. Siz herhangi bir length işlemi yapmadan sadece sondaki elemanı kullanabiliyorsunuz. Örneğin şöyle kurup kullanmaya başlayabiliriz:

   static int[Times.TimesCount] ayarlar;
   foreach(i; 0 .. Times.TimesCount)
       ayarlar[i] = Times.TimesCount ^ i;
   ayarlar[Times.Asr].writeln(":(", Times.Asr, ")");
   ayarlar.writeln();

Çıktısı:
'13:(Asr)
[9, 8, 11, 10, 13, 12, 15, 14, 1]]'

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