Pazar, Temmuz 26, 2009

Linux için DMD kurulumu ve Code::Blocks Ayarları


Bu ayın başında bloğumda windows için DMD kurulumunu ve Code::Blocks ayarlarının nasıl yapılacağını yer vermiştim. Bu seferde linux için DMD kurulumunu ve Code::Blocks ayarlarını anlatmaya çalışacağım. "
Herşey özgürlük için" deyip mevzuya giriş yapalım :).

DMD Kurulumu
  • Buradan dmd'yi indiriyoruz. Ben bu yazıyı yazarken en son çıkan sürümü olan 2.031 alpha yı indirip kurdum.Ubuntu için 2.028 ve 1.043 paketleri mevcut fakat CPU olarak i386 mimarisi yazmasına rağman paket kurucusı ile açtığınızda bu paketlerin amd64 bit işlemciler için olduğunu gösteren bir hata ile karşılaşıyoruz. Diğer seçenekler olan 1.030,1.043,1.046 versiyonlarının D 1.0 için olduğuna dikkat ediniz.
  • İndirdiğimiz dosyayı herhangi bir dizine unzip edin(ben /home/esat dizinine unzip ettim, anlatımımıda bu yola göre gerçekleştireceğim).
  • dmd.conf dosyasını /etc dizinine kopyalayalım.
cp dmd/linux/bin/dmd.conf /etc
  • Aşağıdaki komutu kullanarak dmd'nin dosyalarını çalıştırılabilir hale getirelim.
chmod u+x dmd/linux/bin/{dmd,dumpobj,obj2asm,rdmd}
  • libphobos2.a kütüphanesini /usr/lib dizinine kopyalıyalım.
cp dmd/linux/lib/libphobos2.a /usr/lib

Eğer dmd'nin D 1.0 versiyonuna ait dosyaları indirdiyseniz libphobos2.a doyası yerine libphobos.a ile muhattap olacaksınız. Bu hatırlatma ile dmd nin kurulumunu bitirmiş bulunuyoruz. Daha fazlası için lütfen bakınız : http://ddili.org/kurulum/

Şimdi sıra Code::Blocks ayarlarında(Sisteminizde Code::Blocks'un kurulu olduğunu varsayıyorum. Eğer kurulu değilse Synaptic Paket Yöneticisi yardımı ile kurabilirsiniz).

Code::Blocks ayarları
  • Code::Blocks'u açıp Settings->Compiler and debuggers bölümüne giriyoruz.
  • Önümüze gelen pencerede Select Compiler bölümünden Digital Mars D Compiler seçeneğini seçip “Set as default” butonuna tıklıyoruz.
  • Linker Setting sekmesini resimdeki şekle getirin."phobos" yerine libphobos2.a yapmamız yeterli

  • Toolchain executables sekmesine geliyoruz. Buradan da Additional Paths sekmesine geçiyoruz.Ve /home/esat/dmd/linux/bin yolunu ekliyoruz.
"Tamam" butonuna tıkladıktan sonra artık linux de Code::Blocks kullanarak D ile program yazabilirsiniz.

Linux'e dmd kurmak ve code::blocks ayarları yapmak windows'a göre daha kolay geldi bana. Windows için ayrı yeten dmc yi de indirmek ve bundaki include kalsörünün yolunu felan ayarlamak gerekiyodu. Linux de bunlara gerek kalmadı.

Diğer bir konuda Türkçe karakterler ile ilgili. Windowsda Code::Blocks'un terminal ekranında Türkçe karakterler görünmüyodu. Linux de ise hiç bi ayar yapmadan kodu yazıp F9 basmak Türkçe karakterleri görebilmemiz için yeterli.

Kaynaklar
http://ddili.org/kurulum/dmd.html
http://www.digitalmars.com/d/2.0/dmd-linux.html



Cumartesi, Temmuz 18, 2009

C++ Saf Sanal Fonksiyon

Son zamanlarda yapmayı düşündüğüm bir proje için kaynak kod incelemeye başladım. Bu iş oldukça yorucu ve sıkıcı, kodların içinde kaybolabiliyosunuz. Fakat kazancıda bir o kadar fazla. Bütün bunların yanında bilmediğiniz bir çok şeyle karşılaşabiliyosunuz ve öğrenmeniz gereken daha çok şeyin olduğunun farkına varıyosunuz. Bu yazıda öğrenmem gerektiğinin farkına vardığım bir konu ile ilgili (garip bi cümle oldu:)) Saf Sanal Fonksiyon.

C++’ın böyle bir özelliğinden “virtual int DeviceHeightFont(int points)=0;” fonksiyon tanımını görene kadar haberdar değildim. Görür görmez insanı öğrenmeye sevk eden en büyük dürtü olan “MERAK” uyandı içimde. İnternette aramaya başladım ve “Saf Sanal Fonksiyon” tanımına vakıf oldum.

Yavaş yavaş mevzuya giriş yapalım. Virtual(sanal) fonksiyonlar, bir sınıftaki fonksiyonun bu sınıfı(temel sınıf) miras alan başka sınıflar(türemiş sınıflar) tarafından farklı bir amaç için yeniden yazılmasını sağlamak için kullanılır. Ama bazen temel sınıftaki fonksiyonun yapması gereken herhangi bir mantıklı işlemi olmaya bilir. Bu durumda sanal fonksiyonu “Saf Sanal Fonksiyon” olarak tanımlarız. Eğer bir sınıf en az bir tane saf sanal fonksiyona sahipse bu sınıf soyut sınıf olur. Saf Sanal Fonksiyona aşağıdaki şekilde tanımlanır.

virtual tip fonksiyonIsmi ([parametreler]) = 0;

Bazı önemli noktalar:

  • Saf sanal fonksiyon türetilmiş bütün sınıflarda yeniden tanımlanmalıdır. Yoksa, derleyici-zamanlı hata oluşur.
  • En az bir saf sanal fonksiyon içeren sınıfa soyut “abstract” sınıf denir.
  • Soyut sınıflara ait nesne yaratılamaz ama soyut sınıflara işaret eden işaretçiler yada referansta bulunan referanslar yaratılabilir.
  • Soyut sınıflardan nesne oluşturamayız ama o sınıfın da kurucusu olabilir.
Örnek Program;


#include <iostream>

using namespace std;

class Parca
{
public:
//Saf Sanal Fonksiyon
virtual void parcaIsmiYaz()=0;
};
class Anakart: public Parca
{
public:
//Saf sanal fonksiyonlar yeniden tanımlanıyor (Madde 1)
void parcaIsmiYaz()
{
cout<<"Anakart"<<endl;
}
};
class Ram: public Parca
{
public:
//Saf sanal fonksiyonlar yeniden tanımlanıyor (Madde 1)
void parcaIsmiYaz()
{
cout<<"Ram"<<endl;
}
};

int main()
{
srand(time(NULL));
//Hata Soyut sınıftan nesne türetemeyiz.(Madde 3)
//Parca p;

//Soyunt sınıftan işaretçi türetilebilir.(Madde 3)
Parca *ptr;
Anakart a;
Ram r;

/*Çalışma Anı çok biçimliliği. Sanal fonksiyonun bize sağladığı
avantajlardan biri. Duruma göre "ptr" işaretcsinin hangi türden bir nesneyi
işaret edeceği çalışma anında belli olacak.*/
for (int i =0;i<9;i++)
{
if (rand()%2)
{
//Anakart
ptr = &a;

}
else
{
//Ram
ptr = &r;

}
ptr->parcaIsmiYaz();
}

return 0;
}

Pazartesi, Temmuz 13, 2009

eniXma-Açık kaynak kod Programlar üzerine bir dergi

eniXma

Enixma ücretsiz olarak dağıtılan bir e-dergi. Anlamı ise -daha doğrusu açılımı “Electronic NIX Magazine” demekmiş. Ekim 2006 dan buyana dergi çıkartıyolarmış. Ne yazık ki benim daha yeni haberim oldu böyle bir dergiden. Açık kaynak kodlu program ve işletim sistemleri üzerine içerik hazırlıyolarmış. Kendi sözleri ile amaçları aşağıdaki şekilde.

Amacımız, başta Linux ve gnu yazılımları olmak üzere, açık kaynak kodlu işletim sistemleri ve yazılımların tanıtılması ve kullanımının yaygınlaşması için bilgilerimizi bir ortamda toplayarak paylaşmaktır. Bu alanda gerek kullanıcı ve gerekse yazarlar olarak mümkün olduğu kadar geniş bir katılımı sağlayacak, geniş bir topluluk oluşturacak ve bu alana gönül vermiş ve ilgi duyan herkesi kucaklayacak bir yapı için tespit ettiğimiz ilkeler doğrultusunda davranılacaktır.

Dergiye herkes yazı gönderebiliyo. Yazarlar için dikkat edilecek hususlara buradan erişebilirsiniz. Derginin geçmiş aylardaki sayılarını yine siteden ücretsiz olarak indirebilirsiniz.

Derginin bu ay ki sayısından başlıklar;

  • Linux'ta Sürpriz Yumurtalar
  • AcidRip
  • Kelime İşlemciler
  • Calc İle Hücre Listesi
  • vi Editörü - V
  • Astromenace
  • TinyCore Linux
  • Bsd - VII
http://www.enixma.org

Perşembe, Temmuz 02, 2009

Windows için DMD kurulumu ve Code::Blocks ayarları

Windows için D dili ve Code::Blocks

D dili hakkındaki ilkyazımı geçen ay yazmıştım. Final haftasında olduğumuzdan bu dil ile ilgili çok fazla araştırma yapıp yazı yazmaya vaktim olmadı. Bu zaman zarfı içerisinde ceviz.net’in c/c++ bölümünden tanıdığım Ali ÇEHRELİ (acehreli) D dili ile ilgili Türkçe kaynaklar yayınladığı bir site kurmuş. Ayrıca sorularmıza cevap alabileceğimiz bir forumuda mevcut. Hemen üye oldum tabi. Benim gibi İngilizce özürlü biri için bu site bulunmaz bir nimet :).

Asıl mevzu ya dönecek olursak, finallerim biter bitmez ilk işim D ile ilgili araştırma yapmak oldu. İşe önce, kodlarımı yaza bileceğim bir IDE arayarak başladım. Karşıma üç seçenek çıktı. Bunlar Elephant, Poseidon ve Zeus. Code::Blocks’a alışmış birisi olarak açıkçası bu IDE ler bana biraz basit gibi geldi ve farklı bir IDE aramaya devam ettim. Derken aradığımı gökte değil yerde buldum. Forumun birinde Code::Blocks’un da DMD’ye destek verdiğini öğrendim (Ayrı yeten GCD ye destek vermekte). Hemen kurma çalışmalarına başladım. Zor bir kurulumu yok fakat aşağıda da söyledim gibi ufak bir ayrıntıyı bulmak baya zamanımı aldı. D ile ilgili daha önceki yazımda D dilinin Türkçe dil desteği olduğundan bahsetmiştim. Fakat ben bir türlü kod içinde Türkçe karakter kullanarak programı çalıştırmayı başaramadım. Bunun çözümünü bulduğumda( umarım bulurum :( ) ilk işim çözümü burada paylaşmak olacak.

Bütün bu açıklamalardan sonra DMD’yi kurup Code::Blocks ayarlarını anlatmaya başlayalım.
NOT:Eğer bilgisayarda Code::blocks yoksa şurdan indirebilirsiniz. Ben MinGW'ninde hazır geldiği "codeblocks-8.02mingw-setup.exe" paketi indirdim.(C/C++ için). Kurduktan sonra Code::Blocks'u Nightly builds yapın. Buradan code::blocks'un nasıl nightly builds yapılacağına bakabilirsiniz.
  • Buradan DMD ve DMC derleyicilerini indiriyoruz. Ben bu yazıyı yazarken dmd’nin 2.029 alpha, DMC’nin ise 8.50 sürümleri mevcuttu.
  • İndirdiğimiz DMD ve DMC paketlerini C:\ sürücüne unzip edelim. (C:\dm ve C:\dmd şeklinde).
  • Daha sonra Code::blocks dan Settings->Compiler and debuggers bölümüne giriyoruz.
  • Önümüze gelen pencerede Select Compiler bölümünden Digital Mars D Compiler seçeneğini seçip “Set as default” butonuna tıklıyoruz.

  • Set as default dedikten sonra Sekmelerdeki dosyaların görünümü aşağıdaki şekilde olmalı.
Linker Setting : phobos.lib
Search Directories->Compiler: C:\dmd\src\phobos
Search Directories->Linker: C:\dmd\lib
Search Directories->Resource Compiler: C:\dm\include\win32
  • Daha sonra yine aynı penceredeki Toolchain executables sekmesine geliyoruz. Buradan da Additional Paths sekmesine geçiyoruz. Eğer buraya kadar ki işlemleri doğru yaptıysak Additional Paths sekmesinde C:\dm\bin olması lazım, biz buna ilave olarak C:\dmd\windows\bin yolunu ekliyoruz. (Bu kısmını deneme yanılma yapmaktan tükenmiş bir durumdayken şans eseri buldum. Azmin zaferi :) ).

"OK" butonuna tıklayıp pencereyi kapattıktan sonra Code::Blocks'da rahatlıkla D kodları çalıştırabilirsiniz. Kolay gelsin...