June 06, 2012

Peki hocam, Phobos kütüphanesini biz derleyebilir miyiz? Yani içinde değişiklikler yapıp .a uzantılı dosyayı oluştursak, yoksa çekirdeğin kodları olmadığı için bunu beceremez miyiz?

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

June 06, 2012

Alıntı (acehreli):

>

Onları yalnızca derleme aşamasında kullanıyor. (İsimler doğru mu, kullanımları geçerli mi, vs. diye.)

Kaynak kod dosyayalarının tam olarak hangi işlemler için kullanıldığı ile ilgili tam bir liste var mı?

Neticede bir programı oluşturmak için hem kaynak koda hemde derlenmiş kütüphane dosyasını ihtiyaç var. Tabi kütüphane dosyasını kaynak koddan oluşturmak mümkün sanırım.

Peki kaynak kodu kapalı olan kütüphanelerde bu durum nasıl oluyor?

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

June 07, 2012

Alıntı (acehreli):

>

O zaman derleme adımı başarılı oluyor ama bağlayıcı foo'nun tanımını bulamıyor. Onun için foo.d'yi de eklemek gerek:

Teşekkürler Ali, konuyu güzel anlatmışsın. Yukarıdaki gibi bir durumda birden çok dosya için sanırım .a uzatılı dosyalarda kullanılıyor. Bende gtkD ile çalışırken bağlama esnasında böyle bir dosya ekliyordum.

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

June 06, 2012

Ben hiç denemedim ama Phobos'u kendimiz derleyebiliriz. Kaynak kod şurada:

https://github.com/D-Programming-Language/phobos

Galiba Linux için posix.mak make dosyası kullanılıyormuş.

Ali

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

June 07, 2012

Bir modülde şu işlev olsun:

int foo(int i, double d)
{
   // ... her ne ise ...
}

Diğer modülde de şu:

void bar()
{
   writeln(foo(42, 1.5));
}

İkinci modül birinci modülü görmediği zaman foo'nun ne olduğunu bilemez. Kaynak dosya öncelikle onun için kullanılıyor. Ayrıca, ikinci modül foo'nun int ve double türünde parametreler aldığını öğreniyor ve çağrının bu açıdan da yasal olduğunu görmek yanında ayrıca program yığıtına 42 ve 1.5 değerlerini yerleştiriyor ve ondan sonra "bu noktada foo'yu çağırıyorum" bilgisini derliyor.

O bilginin hemen altına da program yığıtından dönüş değerini toplayan kodu yerleştiriyor.

Sonra aynı işlemleri writeln için tekrarlıyor: foo'nun döndürdüğü değeri program yığıtına yerleştiriyor ve "writeln'i çağırıyorum" bilgisini derliyor.

bar'ın derlenmesi sırasında foo modülü bunun dışında kullanılmıyor.

Yukarıdaki "çağırıyorum" denen yerleri işlevlerin derlenmiş olan kodlarıyla birleştirmek bağlayıcının görevidir. Derlenmiş olan program parçaları arasında foo isimli işlev arıyor. Bulursa "bu noktada foo'yu çağırıyorum" olan yeri "foo şu adreste" diye değiştiriyor (aslında bunun tam ayrıntısını bilmiyorum).

Dolayısıyla programı şöyle oluşturmak yeterli olmuyor:

'dmd bar.d'

O zaman derleme adımı başarılı oluyor ama bağlayıcı foo'nun tanımını bulamıyor. Onun için foo.d'yi de eklemek gerek:

'dmd bar.d foo.d'

D'de kaynak kodu kapalı kütüphane olmuyor. Olacaksa da işlevlerin yalnızca bildirimlerini içeren .di dosyaları yazılabiliyor. Bunlar C ve C++'taki başlık dosyaları gibi kullanılıyorlar: işlevlerin tanımları yok, yalnızca bildirimleri var...

Kaynak kodun olmamasının bir nedeni şablonların kaynak koda gereksinim duymaları. Örneğin kaynak kod olmasa kendi türlerimizi Phobos şablonlarıyla kullanamayız çünkü şablonların bizim türlerimize göre derlenebilmeleri için kaynaklarının derleyici tarafından görülmesi gerekir.

Şablon kodları C++'ta da açık olmak zorundadır.

Ali

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

June 07, 2012

Alıntı (zafer):

>

birden çok dosya için sanırım .a uzatılı dosyalarda kullanılıyor. Bende gtkD ile çalışırken bağlama esnasında böyle bir dosya ekliyordum.

Aslında Phobos için bile kütüphane eklemek gerekiyor ama dmd bunu Phobos'a ayrıcalıklı olarak perde arkasında kendisi yapıyor.

Ali

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

June 09, 2012

Kusura bakmayın; boş bir tartışma başlatmış olabilirim...

Kendimce küçük bir özet geçmek istiyorum. Başlangıç için DMD kullanacaksanız şu paketlerin bulunması gerekiyor:
'(Gözde işletim sistemi Ubuntu'da kolayca deneyebileceğiniz şekliyle nakledersem...)'
Alıntı:

>

'sudo apt-get install 'gcc
'sudo apt-get install 'libc6

Ancak Gtk ve Geany (IDE) gibi platformlarda kod yazabilmek için aşağıdakilerde olmalı. Hatta bunlar, make ile derlenen çoğu paketin istediği (örn. gettext) şeyler. O yüzden bunlar da olursa hoş olacak...:)

Alıntı:

>

'sudo apt-get install 'g++
'sudo apt-get install 'gettext
'sudo apt-get install 'intltool
'sudo apt-get install 'libgtk2.0-dev

Bu paketlerin çoğu küçük şeyler. Belki 20 MB'lık libgtk2.0-dev biraz vakit alabilir. Bunlara yaklaşık 4 MB'lık cmake'i de eklersek ve bunu tek komut halinde aşağıya nakledersem sanırım Linux'da çoğumuzun işi kolaylaşmış olur:

Alıntı:

>

'sudo apt-get install 'gcc libc6 g++ gettext intltool libgtk2.0-dev cmake

Aslında mesa* ve libjson* ile başlayan paketler de çok işimize yarayabilir. Ancak bunlar şimdilik şart değil gibi duruyor. Yakında wayland'ı derleme konusunda da bir çalışma tertiplemek istiyorum. Bakalım vakit bulabilecek miyim...:(

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

June 09, 2012

Çok teşekkürler Salih, bunlar çok yararlı bilgiler.

Ali

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

June 18, 2012

Salih, eline sağlık güzel olmuş. Her zaman söylediğim gibi forumları seviyorum ama malesef bir çok konu arasında çok değerli bilgiler kaybolup gidebiliyor.

Bu sebeble bu tür özelleşmiş konuların bir makale formatında daha düzenli ve tertipli ve isteyenin kolaylıkla ulaşabileceği bir şekilde tasarlanması bana daha iyi olur gibi geliyor.

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

June 18, 2012

Makaleleştirme fikrine katılıyorum. Ancak herhangi bir şey yazmak için özel vakit ayıramıyorum. Ama forumlar benim için başka oluyor ve kimi zaman bir makale benzeri (JSON'da olduğu gibi) şeyler ortaya çıkıyor. Belki de bir gün bu yazdıklarımızı derlemeliyiz. Ama önce, forumda başladığım JSON makalesini bitirmeliyim...:)

Aslında yukarıdaki sadece bir araştırma notu. Özeti ise verdiğim son komut. Üstelik sadece Ubuntu ve benzer Linux dağıtımlarını kullananlara hitap ediyor. Henüz her geliştiriciye hitap edecek genel bir şey hazırlamadım. Örneğin GtkD'yi Windows'da nasıl kurarız diye bir makaleye de ihtiyaç var...

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