D Programlama Dili – Programlama dersleri ve D referansı
Ali Çehreli

anahtar sözcük: [keyword], dilin kendisi için ayırmış olduğu ve iç olanakları için kullandığı sözcük
derleyici: [compiler], programlama dili kodunu bilgisayarın anladığı makine koduna çeviren program
dizgi: [string], "merhaba" gibi bir karakter dizisi
emekliye ayrılan: [deprecated], hâlâ kullanılan ama yakında geçersiz olacak olanak
geliştirme ortamı: [IDE], program yazmayı kolaylaştıran program
iç olanak: [core feature], dilin kütüphane gerektirmeyen bir olanağı
işlev: [function], programdaki bir kaç adımı bir araya getiren program parçası
karakter: [character], 'a', '€', '\n', gibi en alt düzey metin parçası
kaynak dosya: [source file], programcının yazdığı kodu içeren dosya
klasör: [directory], dosyaları barındıran dosya sistemi yapısı, "dizin"
metin düzenleyici: [text editor], metin yazmaya yarayan program
modül: [module], programın veya kütüphanenin işlev ve tür tanımlarından oluşan bir alt birimi
program: [program], bilgisayara yapacağı işleri bildiren bir dizi ifade
standart çıkış: [standard output], program çıktısının normalde gönderildiği akım
uç birim: [terminal], bilgisayar sistemlerinin kullanıcıyla etkileşen giriş/çıkış birimi; "konsol", "komut satırı", "cmd penceresi", "DOS ekranı", vs.
... bütün sözlük



İngilizce Kaynaklar


Diğer




"Merhaba Dünya" Programı

Her programlama dilinde gösterilen ilk program merhaba dünya programıdır. Doğal olarak son derece basit olması gereken bu program o dilde program yazabilmek için mutlaka bilinmesi gereken kavramları da içerdiği için önemlidir.

Şimdilik bu kavramları bir kenara bırakalım ve önce bu programı görelim:

import std.stdio;

void main() {
    writeln("Merhaba, Dünya!");
}

Yukarıdaki kaynak koddan çalışabilir program oluşturulabilmesi için kaynak kodun bir D derleyicisi tarafından derlenmesi gerekir.

Derleyici kurulumu

Bu bölüm yazıldığı sırada derleyici olarak üç seçenek bulunuyor: Digital Mars derleyicisi dmd, GCC derleyicisi gdc, ve LLVM derleme ortamını hedefleyen ldc.

D programlama dilinin geliştirilmesi sırasındaki asıl derleyici dmd olmuştur. D'nin yeni olanakları ilk olarak hep bu derleyicide gerçekleştirilmişlerdir. Bu kitaptaki örnekler de hep dmd üzerinde denenmiş olduklarından sizin de onu kurmanızı öneririm. Başka derleyicileri gerekirse daha sonra kurabilirsiniz. Bu kitaptaki kod örnekleri dmd 2.076.0 ile derlendi.

dmd'nin en yeni sürümünü Digital Mars'ın Download sayfasından indirebilirsiniz. O sayfadaki sürümler arasından işletim sisteminize uyan ve sisteminizin 32 veya 64 bitlik olmasına bağlı olan en yeni sürümü seçin. D1 sürümlerini seçmeyin. Bu kitap D'nin D2 diye de anılan son sürümünü anlatır.

Derleyici kurulumu ortama bağlı olarak farklılık gösterse de bir kaç bağlantıya ve düğmeye tıklamak kadar kolaydır.

Kaynak dosya

Programcının D dili kurallarına göre yazdığı ve derleyiciye derlemesi için verdiği dosyaya kaynak dosya denir. D derlemeli bir dil olduğu için, kaynak dosyanın kendisi çalıştırılabilir bir program değildir. Kaynak dosya, ancak derleyici tarafından derlendikten sonra çalıştırılabilen program haline gelir.

Her tür dosyanın olduğu gibi, kaynak dosyanın da diske kaydedilirken bir isminin olması gerekir. Kaynak dosya isminde sisteminizin izin verdiği her harfi kullanabilirsiniz. Ancak, D kaynak dosyalarının dosya isim uzantısının .d olması gelenekleşmiştir. Geliştirme ortamları, araç programlar, ve başka programcılar da bunu beklerler. Örneğin deneme.d, tavla.d, fatura.d, vs. uygun kaynak dosya isimleridir.

Merhaba dünya programını derlemek

Kaynak dosya bir metin düzenleyicide (veya aşağıda bahsedildiği gibi bir geliştirme ortamında) yazılabilir. Yukarıdaki programı bir metin dosyasına yazın veya kopyalayın ve merhaba.d ismiyle kaydedin.

Derleyicinin görevi, bu kaynak dosyada yazım hataları bulunmadığını denetlemek ve onu makine koduna dönüştürerek çalıştırılabilir program haline getirmektir. Programı derlemek için şu adımları uygulayın:

  1. Bir uç birim penceresi (konsol, terminal, komut satırı, vs. diye de bilinir) açın.
  2. merhaba.d dosyasının kaydedildiği klasöre gidin.
  3. Aşağıdaki komutu yazın ve Enter'a basın. ($ karakterini yazmayın; o karakter komut satırının başını temsil ediyor.)
$ dmd merhaba.d

Eğer bir hata yapmadıysanız hiçbir şey olmadığını düşünebilirsiniz. Tersine, dmd'nin mesaj vermemesi herşeyin yolunda gittiğini gösterir. Bulunduğunuz klasörde merhaba (veya merhaba.exe) isminde bir program oluşmuş olması gerekir.

Eğer derleyici bazı mesajlar yazdıysa programı yazarken bir hata yaptığınız için olabilir. Hatayı bulmaya çalışın, olası yanlışları düzeltin, ve programı tekrar derleyin. Programlama hayatınızda doğal olarak sıklıkla hatalar yapacaksınız.

Program başarıyla derlenmişse ismini yazarak başlatabilirsiniz. Programın "Merhaba, Dünya!" yazdığını göreceksiniz:

$ ./merhaba      ← programın çalıştırılması
Merhaba, Dünya!  ← programın yazdığı satır

Tebrikler! İlk D programınızı çalıştırdınız.

Derleyici seçenekleri

Derleyicilerin derleme aşamasıyla ilgili komut satırı seçenekleri vardır. Bu seçenekleri görmek için yalnızca derleyicinin ismini yazın ve Enter'a basın:

$ dmd    ← yalnızca derleyicinin ismi
DMD64 D Compiler v2.076.0
Copyright (c) 1999-2017 by Digital Mars written by Walter Bright
...
  -de            show use of deprecated features as errors (halt compilation)
...
  -unittest      compile in unit tests
...
  -w             warnings as errors (compilation will halt)
...

Özellikle kısaltılmış olarak gösterdiğim yukarıdaki liste her zaman için kullanmanızı önerdiğim seçenekleri içeriyor. Buradaki merhaba dünya programında hiçbir etkisi olmasa da aşağıdaki komut hem birim testlerini etkinleştirir hem de hiçbir uyarıya veya emekliye ayrılmış olanağa izin vermez. Bu ve bazı başka seçeneklerin anlamlarını ilerideki bölümlerde göreceğiz:

$ dmd merhaba.d -de -w -unittest

dmd komut satırı seçeneklerinin tam listesini DMD Compiler sayfasında bulabilirsiniz.

-run seçeneğini de kullanışlı bulabilirsiniz. -run, kaynak kodun derlenmesini, programın oluşturulmasını, ve çalıştırılmasını tek komuta indirger. Bu seçenek komut satırındaki son derleyici seçeneği olmalı ve kaynak dosyadan hemen önce belirtilmelidir:

$ dmd -de -w -unittest -run merhaba.d
Hello world!  ← program otomatik olarak çalıştırılır
Geliştirme ortamı

Derleyiciye ek olarak bir geliştirme ortamı (IDE) da kurmayı düşünebilirsiniz. Geliştirme ortamları program yazma, derleme, ve hata ayıklama adımlarını kolaylaştıran programlardır.

Geliştirme ortamlarında program derlemek ve çalıştırmak, bir tuşa basmak veya bir düğmeye tıklamak kadar kolaydır. Yine de programların uç birimlerde nasıl derlendiklerini bilmeniz de önemlidir.

Bir geliştirme ortamı kurmaya karar verdiğinizde dlang.org'daki IDEs sayfasındaki seçeneklere bakabilirsiniz.

Türkçe harfler

Kitabın bölümleri bütünüyle Türkçe programlardan oluştuklarından çalıştığınız ortamda Türkçe harflerin doğru olarak görünmeleri önemlidir. Bunun için uç birim penceresinin UTF-8 kodlamasına ayarlanmış olması gerekir. (Linux gibi bazı ortamlarda uç birimler zaten UTF-8'e ayarlıdır.)

Örneğin, eğer bir Windows ortamında çalışıyorsanız karakter kodlamasını 65001'e ayarlamanız ve Lucida Console gibi bir TrueType font seçmeniz gerekir.

Merhaba dünya programının içeriği

Bu kadar küçük bir programda bile değinilmesi gereken çok sayıda kavram bulunuyor. Bu kavramları bu aşamada fazla ayrıntılarına girmeden şöyle tanıtabiliriz:

İç olanaklar: Her programlama dili kendi söz dizimini, temel türlerini, anahtar sözcüklerini, kurallarını, vs. tanımlar. Bunlar o dilin iç olanaklarını oluştururlar. Bu programda görülen parantezler, noktalı virgüller, main ve void gibi sözcükler; hep D dilinin kuralları dahilindedirler. Bunları Türkçe gibi bir dilin yazım kurallarına benzetebiliriz: özne, yüklem, noktalama işaretleri, vs...

Kütüphaneler ve işlevler: Dilin iç olanakları yalnızca dilin yapısını belirler. Bu olanaklar kullanılarak oluşturulan işlevlerin bir araya getirilmelerine kütüphane adı verilir. Kütüphaneler programların yararlanmaları amacıyla bir araya getirilmiş olan program parçacıklarından oluşurlar.

Bu programdaki writeln işlevi, standart D kütüphanesinde çıkışa satır yazdırmak için kullanılan bir işlevdir. İsmi, "satır yaz"ın karşılığı olan "write line"dan gelir.

Modüller: Kütüphane içerikleri, kullanış amaçlarına göre gruplanmış olan modüllerdir. D'de kütüphaneler programlara bu modüller halinde tanıtılırlar. Bu programda kullanılan tek modül olan std.stdio'nun ismi, "standart kütüphanenin standart giriş/çıkış modülü" olarak çevirebileceğimiz "standard input/output"tan türemiştir.

Karakterler ve dizgiler: Bu programdaki "Merhaba, Dünya!" gibi bilgilere dizgi, dizgileri oluşturan elemanlara da karakter adı verilir. Örneğin bu programdaki dizgiyi oluşturan karakterlerden bazıları M, e, ve ! karakterleridir.

İşlem sırası: Program, işini belirli adımları belirli sırada tekrarlayarak yapar. Bu sıranın en başında main isimli işlevin içindeki işlemler vardır; programın işleyişi, main'le başlar. Bu küçük programda tek bir işlem bulunuyor: writeln'li satırdaki işlem.

Büyük/Küçük harf ayrımı: Programda değişiklik yaparken dizgilerin içinde istediğiniz karakterleri kullanabilirsiniz, ama diğer isimleri görüldükleri gibi küçük harfle yazmaya dikkat edin, çünkü D dilinde büyük/küçük harf ayrımı önemlidir. Örneğin writeln ile Writeln D dilinde farklı isimlerdir.

Anahtar sözcük: Dilin iç olanaklarını belirleyen özel sözcüklere anahtar sözcük denir. Anahtar sözcükler dilin kendisi için ayrılmış olan ve özel anlamlar taşıyan sözcüklerdir; programda başka amaçla kullanılamazlar. Bu programda iki anahtar sözcük bulunuyor: Programa modül eklemeye yarayan import ve buradaki kullanımında "hiçbir tür" anlamına gelen void.

D'nin anahtar sözcükleri şunlardır: abstract, alias, align, asm, assert, auto, body, bool, break, byte, case, cast, catch, cdouble, cent, cfloat, char, class, const, continue, creal, dchar, debug, default, delegate, delete, deprecated, do, double, else, enum, export, extern, false, final, finally, float, for, foreach, foreach_reverse, function, goto, idouble, if, ifloat, immutable, import, in, inout, int, interface, invariant, ireal, is, lazy, long, macro, mixin, module, new, nothrow, null, out, override, package, pragma, private, protected, public, pure, real, ref, return, scope, shared, short, static, struct, super, switch, synchronized, template, this, throw, true, try, typedef, typeid, typeof, ubyte, ucent, uint, ulong, union, unittest, ushort, version, void, volatile, wchar, while, with, __FILE__, __FILE_FULL_PATH__, __MODULE__, __LINE__, __FUNCTION__, __PRETTY_FUNCTION__, __gshared, __traits, __vector, ve __parameters.

Bir kaç tanesi hariç, bu sözcükleri ilerideki bölümlerde göreceğiz: asm ve __vector bu kitabın kapsamı dışında kalıyor; delete, typedef, ve volatile emekliye ayrılmışlardır; ve macro henüz D tarafından kullanılmamaktadır.

Problemler
  1. Programa istediğiniz başka bir şey yazdırın.
  2. Programı birden fazla satır yazacak şekilde değiştirin. Bunun için programa yeni bir writeln satırı ekleyebilirsiniz.
  3. Programın başka yerlerinde değişiklikler yapın ve derlemeye çalışın; örneğin writeln satırının sonundaki noktalı virgül olmadığında derleme hatalarıyla karşılaştığınızı görün.