Jump to page: 1 2
Thread overview
D, fazlamı ram kullanıyor?
Feb 06, 2013
MURATSPLAT
Feb 06, 2013
huseyin
Feb 08, 2013
MURATSPLAT
Feb 08, 2013
MURATSPLAT
Feb 08, 2013
Salih Dinçer
Feb 09, 2013
MURATSPLAT
Feb 09, 2013
MURATSPLAT
February 06, 2013

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. ]

February 06, 2013

Alıntı:

>

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 ?

Temel kütüphanelerden kastınız phobos ise windows da bu programın çalışma yüzdesi büyüktür. Sonuçta düşünürsek Windows un birkaç temel kütüphanesi var ve istesieniz de istemeseniz de bu kütüphaneleri linker ile bağlama gerekiyor.

Geçenlerde bir kernel yazıp derlemeye çalışmıştık fakat dmd nin özellikleri yeterli gelmediği için gdc de bir derleme yapmayı denedim sonuç objedeki bir ifadenin tanımsız olduğunu söyledi.

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

February 06, 2013

Hoşgeldin MURATSPLAT! :)

Alıntı (MURATSPLAT):

>

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

Bu konu düzensiz aralıklarla hep gündeme gelir; bu forumda daha önce de konuşulmuştu. O büyüklük farkı özel durumlarda herhalde sorun oluşturabilir. O zaman çözüm yolları aranabilir.

Farkın büyük bir bölümü diller arasındaki çalışma ortamlarındaki (runtime) farktan geliyor. C ve C++'ta D'ninki gibi diziler, eşleme tabloları, ve çöp toplayıcı yok. Bu olanaklara gerek olmayan durumlarda D'ninki fazlalık olarak görülür. Öte yandan, eğer kullanılıyorsa gerek var demektir ve tanım gereği fazla değildir. :)

Alıntı:

>

Sonra dedim ki bir de bakalım bu D ile yazılan basit bir program, hangi kütüphaneleri kullanıyor:

Tabii onlar program boyutunun dışında kalanlar. Çalışma ortamı ve çöp toplayıcı programa zaten gömülü.

Alıntı:

>

Özetle şunu demek istiyorum. D dili ile yazılan programlar dosya boyutu nedeniyle C/C++'a göre daha fazla mı ram tüketir?

Hem evet hem hayır. Öte yandan, çöp toplayıcı eklenmiş olan C ve C++ programlarının boyutlarıyla da karşılaştırmak gerek.

vector ve unordered_map'i çok basitçe kullanan bir C++ programına bakalım:

#include <iostream>
#include <vector>
#include <tr1/unordered_map>

int main()
{
   std::vector<int> v;
   v.push_back(42);

   std::tr1::unordered_map<int, int> u;
   u[7] = 43;

   std::cout << "hello world\n";
}

Şimdi boyu 137920 oluyor. (strip edince 11344). Ama push_back'ten başka olanaklarını kullanınca program boyutu daha da büyüyor. (Çünkü işlev şablonları ancak kullanılırlarsa programa dahildirler.)

dmd'nin kullandığı çalışma ortamında böyle eniyileştirmeler olmayabilir ve o yüzden kullanılmayan bütün olanaklar da programa gömülü olabilir.

Alıntı:

>

D dili yazılan bir uygulama C dili kadar performanslı çalışabilir mi?

Her ikisi de derlemeli bir dil olduklarından, ürettikleri kodlar makine kodudur. O yüzden, fark doğuracak temel bir neden yok.

Performans konusu çok zor bir konu olduğundan soruyu daha iyi anlamadan başka bir şey söylemek olanaksız.

D'nin C'den daha hızlı olacağı durumları ise C++'tan biliyoruz ama. Örneğin C'nin qsort'u callback'ler kullanmak zorunda olduğu için C++'ın sort'undan daha yavaştır:

http://acehreli.org/turkcecpp/cpp_ogrenmek.html

(Oradaki "Verimlilik" başlığında gösteriliyor.)

Alıntı:

>

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 ?

Windows'dan emin değilim.

Ali

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

February 08, 2013

Cevaplar için teşekkürler.

Derleyici olarak ne kullanmamı önerirsiniz. Ben genellikle GNU derleyicilerine alışkınım. DMD bana biraz soğuk geliyor. Tek bir şirkete bağımlı olmak canımı sıkıyor. Ama araştırdığıma göre en çok önerilen de DMD.

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

February 08, 2013

@acehreli

Ustanın tavsiyesine uyulur. Biz böyle gördük.

Az önce GDC ile bir derleme denemesi yaptım. GDC ile derlenen klasik "Hello World!" programının boyutu neredeyse 1.1MB :)

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

February 08, 2013

Murat, aramıza hoş geldin...:)

Elbette DMD kullanmalıyız çünkü bizim nadide insanlar arasında yerimizi almamız gerekiyor. Bu da dilin gelişimine şahit olan insanlar demek. Yenilikleri takip etmek öyle ayrıcalıklı bir durum ki diğer oturmuş dillerde olmayan özellikleri görünce bu yenilikler ile gurur duyuyor insan. Eğer GDC ve LDC (bu arada dil'i unutmamalı: http://code.google.com/p/dil/) kullanırsak, sanki dili biraz geriden takip edeceğiz gibime geliyor!

Başarılar...

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

February 08, 2013

En yeni olanakları denemek istiyorsan dmd. Dil onunla geliştiriliyor. Ben hiç şirketmiş gibi hissetmiyorum. Bildiğiniz, ücretsiz ve açık kodlu derleyici. :)

GNU'nunki gdc. Bunun iyi tarafı, arka tarafta gcc'yi kullanıyor olması. Ön tarafı ise dmd'nin bir kaç sürüm öncesi ile uyumlu.

LDC'nin kurulumunun çok kolay olduğunu duydum ama onun hakkında fazla bilgim yok.

Ali

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

February 08, 2013

strip yaptıktan sonra ne kadara iniyor acaba?

Bu arada, dmd önce Linux'ta olmak üzere shared library desteği getirecek. O zaman bu büyüklükler daha da azalacak.

Ali

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

February 09, 2013

Alıntı (acehreli):

>

strip yaptıktan sonra ne kadara iniyor acaba?

Bu arada, dmd önce Linux'ta olmak üzere shared library desteği getirecek. O zaman bu büyüklükler daha da azalacak.

Ali

Valla strip nedir, bir bilsem yapacam da :)

@Salih Dinçer, hoş bulduk :)

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

February 09, 2013

Alıntı (acehreli):

>

strip programların içindeki debug sembollerini çıkartan bir programdır. Her Linux dağıtımanda bulunur:

'
$ dmd deneme.d
$ ls -l deneme
-rwxrwxr-x. 1 acehreli acehreli 337527 Feb 9 12:02 deneme
$ strip deneme
$ ls -l deneme
-rwxrwxr-x. 1 acehreli acehreli 233952 Feb 9 12:03 deneme
'

Ali

Yaklaşık 256KB kadar string sonucunda hafiflemiş. strip'i de öğrenmiş olduk :)

'
$ gdc hello_world.d -o for_strip_gdc
$ ./for_string_gdc; ls -l for_strip_gdc
Merhaba Dünya!
-rwxrwxr-x 1 1089989 Feb 9 22:32 for_strip_gdc

$ strip for_strip_gdc
$ ls -l for_strip_gdc
-rwxrwxr-x 1 742568 Feb 9 22:34 for_strip_gdc
$ ./for_string_gdc
Merhaba Dünya!
'

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

« First   ‹ Prev
1 2