D programcılığında en çok kullanılan iki aracın metin düzenleyici ve derleyici olduklarını gördük. Programlar metin düzenleyicilerde yazılırlar.
D gibi dillerde derleme kavramı ve derleyicinin işlevi de hiç olmazsa kaba hatlarıyla mutlaka bilinmelidir.
Her mikro işlemci modelinin kendisine has kodları vardır. Her mikro işlemcinin nasıl kodlanacağına mimari tasarımı aşamasında ve donanım kısıtlamaları gözetilerek karar verilir. Bu kodlar çok alt düzeyde elektronik sinyaller olarak gerçekleştirilirler. Bu tasarımda kodlama kolaylığı geri planda kaldığı için, doğrudan mikro işlemciyi kodlayarak program yazmak çok güç bir iştir.
Mikro işlemcinin adının parçası olan işlem kavramı, özel sayılar olarak belirlenmiştir. Örneğin kodları 8 bit olan hayalî bir işlemcide 4 sayısı yükleme işlemini, 5 sayısı depolama işlemini, 6 sayısı da arttırma işlemini gösteriyor olabilir. Bu hayalî işlemcide soldaki 3 bitin işlem sayısı ve sağdaki 5 bitin de o işlemde kullanılacak değer olduğunu düşünürsek, bu mikro işlemcinin makine kodu şöyle olabilir:
İşlem Değer Anlamı 100 11110 YÜKLE 11110 101 10100 DEPOLA 10100 110 10100 ARTTIR 10100 000 00000 BEKLE
Makine kodunun donanıma bu kadar yakın olması, oyun kağıdı veya öğrenci kayıtları gibi üst düzey kavramların bilgisayarda temsil edilmelerini son derece güç hale getirir.
Mikro işlemcileri kullanmanın daha etkin yolları aranmış, ve çözüm olarak üst düzey kavramları ifade etmeye elverişli programlama dilleri geliştirilmiştir. Bu dillerin donanım kaygıları olmadığı için, özellikle kullanım kolaylığı ve ifade gücü gözetilerek tasarlanmışlardır. Programlama dilleri insanlara uygun dillerdir ve çok kabaca konuşma dillerine benzerler:
if (ortaya_kağıt_atılmış_mı()) { oyun_kağıdını_göster(); }
Buna rağmen, programlama dilleri çok daha sıkı kurallara sahiptirler.
Programlama dillerinin bir sorunu, anahtar sözcüklerinin geleneksel olarak İngilizce olmasıdır. Neyse ki bunlar kolayca öğrenebilecek kadar az sayıdadır. Örneğin
if'in "eğer" anlamına geldiğini bir kere öğrenmek yeter.
Yorumlayıcı, programın kaynak kodunu okuyan ve yazıldığı amaca uygun olarak işleten bir araçtır. Örneğin, bir yorumlayıcı yukarıdaki kod verildiğinde önce
ortaya_kağıt_atılmış_mı()'yı işleteceğini, sonra da onun sonucuna bağlı olarak
oyun_kağıdını_göster()'i işletir. Programcının bakış açısından, programı yorumlayıcı ile işletmek yalnızca iki adımdan oluşur: programı yazmak ve yorumlayıcıya vermek.
Yorumlayıcı programı her işletişinde kaynak kodu baştan okumak zorundadır. Bu yüzden, yorumlayıcı ile işletilen program genel olarak o programın derlenmiş halinden daha yavaş çalışır. Ek olarak, yorumlayıcılar genelde kodu kapsamlıca incelemeden işletirler. Bu yüzden, çeşitli program hatası ancak program çalışmaya başladıktan sonra yakalanabilir.
Perl, Python, ve Ruby gibi esnek ve dinamik dillerde yazılmış programların işletilmeden önce incelenmeleri güçtür. Bu yüzden, böyle diller geleneksel olarak yorumlayıcı ile kullanılırlar.
Derleyici, programın kaynak kodunu okuyan başka bir araçtır. Yorumlayıcıdan farkı, kodu işletmemesi ama işletecek olan başka bir program oluşturmasıdır. Programcının yazdığı kodları işletme görevi oluşturulan bu programa aittir. (Bu program genelde makine kodu içerir.) Programcının bakış açısından, programı derleyici ile işletmek üç adımdan oluşur: programı yazmak, derlemek, ve oluşturulan programı çalıştırmak.
Yorumlayıcının aksine, derleyici kaynak kodu tek kere ve derleme sırasında okur. Bu yüzden, derlenmiş program yorumlayıcı tarafından işletilen programdan genelde daha hızlıdır. Derleyiciler kodu genelde kapsamlı olarak da inceleyebildiklerinden hem daha hızlı işleyen programlar üretebilirler hem de program hatalarının çoğunu daha program işlemeye başlamadan önce yakalayabilirler. Öte yandan, yazılan programın her değişiklikten sonra derlenmesinin gerekmesi ek bir külfet olarak görülebilir ve bazı insan hatalarının kaynağıdır. Dahası, derleyicinin ürettiği program ancak belirli bir platformda çalışabilir; programın başka bir mikro işlemci veya işletim sistemi üzerinde çalışabilmesi için tekrar derlenmesi gerekir. Ek olarak, derlenmeleri kolay olan diller yorumlayıcı kullananlardan daha az esnektirler.
Aralarında Ada, C, C++, ve D'nin de bulunduğu bazı diller güvenlik ve performans gibi nedenlerle derlenebilecek biçimde tasarlanmışlardır.
Derleyiciler programı dilin kurallarına uygun olarak derledikleri için, kural dışı kodlar gördüklerinde bir hata mesajı vererek sonlanırlar. Örneğin kapanmamış bir parantez, unutulmuş bir noktalı virgül, yanlış yazılmış bir anahtar sözcük, vs. derleme hatasına yol açar.
Derleyici bazen de kod açıkça kural dışı olmadığı halde, programcının yanlış yapmasından şüphelenebilir ve bu konuda uyarı mesajı verebilir. Program derlenmiş bile olsa, her zaman için uyarıları da hata gibi kabul edip, uyarıya neden olan kodu değiştirmek iyi olur.