Selamlar,
Aranıza yeni katıldım.
C öğreneğim derken, D diye bir dil varmış. Sonra dedim, yenisini öğrenmek daha iyidir. En azından yeni bir dil.
Biraz Python bilirim. Daha doğrusu 2 aydır merak saldım, öğrenmeye çalışıyorum. Programlamanın mantığını bana öğretti çok şükür.
Bu arada Python'u yazılımın mantığını çözmek için öğrenmiştim. Çünkü genellikle C gibi alt seviye bir dili öğrenmeye kalkmak, programlamaya yeni başlayan biri için pek önerilmiyordu. Ben de söylenenlere uydum.
C öğrenmeyi hep istemişimdir. Çünkü köklü bir dil. Yaklaşık 7-8 yıldır GNU/Linux kullanıyorum. Slackware ile başladım. Çok program derledim. Derlerken de kodlara bakardım, hayran kalırdım. Hemen hemen çoğu temel kütüphane, uygulama, çekirdek, grafik arabirimler C ile yazılmış. Keşke ben de bunları yazabilsem derdim. Öyle kodlar vardı ki şiir gibiydi. Baka baka çat pat ne işe yaradıklarını anlıyordum. Saolsun çoğu yerde satırlara açıklama yazıyorlardı yoksa nerde :)
Neyse D yi araştırayım derken, kendi çapımda basit bir deneme yaptım. Aslında merak ettiğim şuydu: D dili, gerçekten C gibi alt saviye bir dil miydi?
Kendimce bunu denemenin en kolay yolu aynı işi yapan programlar yazmaktı. Dünyaca ünlü "hello world" programları yazdım.
Önce C ile sonra C++ ile ve en son D ile bir "hello world" programı yazdım ve derledim. Dosya boyutlarına baktım. Derlendikten sonraki boyutlarına. Sonuçlar şunlardı:
ls -l çıktısı
8704 Feb 4 21:48 c (c ile yazılan)
9155 Feb 4 21:58 cpp (c++ ile yazılan)
343185 Feb 6 22:21 hello_world (d ile yazılan)
Görüldüğü gibi D ile yazılan "Hello World" programın boyutu nerdeyse 350KB buluyor. C ile yazılan "Hello World" programı ise sadece 8.7KB. C++ ile yazılan ise 9.1KB. Fark çok büyük
Sonra dedim ki bir de bakalım bu D ile yazılan basit bir program, hangi kütüphaneleri kullanıyor:
$ ldd hello_world [! d dili ile yazılan hello world yazılımı !]
linux-vdso.so.1 => (0x00007fff21bff000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f984a699000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f984a491000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f984a0d1000)
/lib64/ld-linux-x86-64.so.2 (0x00007f984a8d7000)
Bu ise C dili ile yazılan:
$ ldd c
linux-vdso.so.1 => (0x00007fffbb5a9000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f12e9276000)
/lib64/ld-linux-x86-64.so.2 (0x00007f12e9656000)
Bu ise c++ ile yazılmış olanı:
$ ldd cpp
linux-vdso.so.1 => (0x00007fff633ff000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f2de6b3c000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f2de677d000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f2de6480000)
/lib64/ld-linux-x86-64.so.2 (0x00007f2de6e60000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f2de626a000)
Özetle şunu demek istiyorum. D dili ile yazılan programlar dosya boyutu nedeniyle C/C++'a göre daha fazla mı ram tüketir? Bu aşamadan sonra ise şu soru aklıma geldi. D dili yazılan bir uygulama C dili kadar performanslı çalışabilir mi?
Bir de şunu merak ediyorum: Windows'da D ile bir yazılım yazsak ve yazarken de temel kütüphaneleri(sdl, vb. kullanmadan) kullansak program derlendikten sonra tek başına sadece windows standart kütüphenelerini kullanarak çalışabilir mi ?
Linux'da denedim: Bir bilgisayarda DMD ile derlenen kod, diğer bilgisayarda eksta hiçbir kurulum yapılmadan çalışabiliyor. Gerçi bu da çok normal ldd çıktısına bakarsak. Ama benim asıl merak ettiğim Windows ortamı.
GNU derleyicisi ile mesala c yazılımı derlersek glibc olmadan windows çalıştırmıyor. DMD'de ise durum nedir acaba?
Son söz; Ali Çehreli Bey'e, şuan okumakta olduğum müthiş kitabı için teşşekür ederim.
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]