D, verimli düşük seviyeli programlama yeteneklerini yüksek seviyeli özelliklerin rahatlığıyla birleştiren yüksek seviyeli, çoklu paradigma bir programlama dilidir. Bu özellikleri sayesinde geniş bir uygulama yelpazesi için uygundur. C ve C++'a modern bir alternatif sunmak amacıyla tasarlanmış olup, performanstan ödün vermeden güçlü soyutlamalar ve özellikler sunar. D, geliştiricilerin ihtiyaçlarına en uygun yaklaşımı seçmelerine olanak tanıyan, imperatif, nesne yönelimli ve fonksiyonel programlama stillerini destekler.
D, 1990'ların sonlarında Walter Bright tarafından Digital Mars adlı şirketinde yaratılmıştır. Dil, C ve C++'ın bir evrimi olarak geliştirilmiş olup, artırılmış verimlilik ve performans sağlamayı hedeflemiştir. İlk halka açık sürüm 2001 yılında gerçekleşmiş ve dil olgunlaştıkça Java, C# ve Python gibi diğer dillerden özellikler ve kavramlar içermeye başlamıştır.
D, çeşitli programlama dillerinden ilham alarak özelliklerini çok yönlü bir ortam yaratacak şekilde şekillendirmiştir. D, düşük seviyeli bellek yönetimi için C ve C++'tan, çöp toplama ve nesne yönelimli programlama için Java ve C#'tan unsurlar içermektedir. D, performans ve güvenliğe odaklanan Go ve Rust gibi dillerle de ilişkilidir.
Ekim 2023 itibarıyla D, D Dil Vakfı ve aktif bir topluluk tarafından sürdürülen bir dil olarak evrimini sürdürmektedir. İşbirlikçi geliştirme, özellik iyileştirmeleri ve diğer dillerle daha iyi birlikte çalışabilirlik sağlamıştır. D, sistem yazılımları, oyun geliştirme ve yüksek performans gerektiren uygulamalar için giderek daha fazla benimsenmektedir.
D, geliştiricilerin derleme zamanında hataları yakalamasına olanak tanıyan güçlü statik tip özelliğine sahiptir. Örneğin:
int x = 10;
string y = "Merhaba, Dünya!";
D, geliştiricileri manuel bellek yönetimi görevlerinden kurtaran bir çöp toplayıcı içerir. Bu, aşağıdaki gibi gösterilebilir:
void main() {
auto str = new string("D'ye Hoş Geldiniz");
writeln(str);
}
D, genel programlama için güçlü şablon metaprogramlama yeteneklerini destekler. İşte basit bir şablon örneği:
T max(T)(T a, T b) {
return a > b ? a : b;
}
D'nin benzersiz bir özelliği olan mixin'ler, kodun derleme zamanında enjekte edilmesine olanak tanır:
mixin template AddFunction {
int add(int a, int b) {
return a + b;
}
}
class MyClass {
mixin AddFunction;
}
D, fonksiyonları birinci sınıf vatandaşlar olarak ele alır, bu da fonksiyonların kolayca geçiştirilmesini sağlar:
void main() {
auto add = (int a, int b) { return a + b; };
writeln(add(5, 3));
}
D, çoklu iş parçacığı için yerleşik destek sağlar, bu da eşzamanlı programlamayı basit hale getirir:
import core.thread;
void run() {
// İş parçacığı çalışması
}
void main() {
auto t = new Thread(&run);
t.start();
t.join();
}
D, başlatılmamış değişkenlerle çalışırken güvenliği artıran yerel destek sunar:
void main() {
int? maybeInt = null;
if (maybeInt !is null) {
writeln(maybeInt);
}
}
D, iş parçacığı güvenliğini kolayca yönetmek için senkronize fonksiyonlar sunar:
synchronized void safeFunction() {
// İş parçacığı güvenli kod burada
}
D, fonksiyonlara, sınıflara ve değişkenlere meta veriler eklemek için esnek bir nitelik sistemine sahiptir:
@safe void main() {
// Güvenli kod
}
D, kodun kolayca test edilmesini sağlayan yerleşik birim testi desteği içerir:
import std.stdio;
import std unittest;
void test_example() {
assert(1 + 1 == 2);
}
unittest {
test_example();
}
D'nin birkaç derleyicisi vardır; en dikkat çekeni DMD (D Digital Mars Derleyicisi), LDC (LLVM D Derleyicisi) ve GDC (GNU D Derleyicisi)dir. Bu derleyiciler, proje ihtiyaçlarına göre farklı arka uçlar ve optimizasyonlar destekler.
D için popüler IDE'ler arasında D uzantılı Visual Studio Code, Code::Blocks ve DDT (D Geliştirme Araçları) ile Eclipse bulunmaktadır. Bu IDE'ler, sözdizimi vurgulama, kod tamamlama, hata ayıklama araçları ve entegre yapı sistemi desteği sunar.
Bir D projesini oluşturmak için geliştiriciler genellikle bağımlılık yönetimi ve proje yapılandırmasını yöneten dub
yapı aracını kullanır. Temel bir yapı, aşağıdaki komutla gerçekleştirilebilir:
dub build
Bu komut, dub.json
veya dub.sdl
dosyasında tanımlanan ayarlara göre projeyi derler.
D, aşağıdaki alanlarda kullanılmaktadır:
Yüksek performanslı, güvenilir yazılımlar üretme yeteneği, onu performans kritik uygulamalar için uygun bir seçim haline getirir.
D'nin tasarımı, birkaç programlama diliyle benzerlikler ve farklılıklar taşır:
D, C ve C++ ile benzer düşük seviyeli yetenekler sunar, ancak otomatik bellek yönetimi ve daha modern bir sözdizimi gibi özelliklere sahiptir. C++'ın aksine, D basitlik ve kullanım kolaylığına odaklanmaktadır.
D, Java ve C# gibi çöp toplama desteği sunarken, ayrıca performans kritik uygulamalar için manuel bellek yönetimine de olanak tanır. D, Java ve C#'ta bulunan generiklere kıyasla C++'a daha yakın olan şablonları da destekler.
Python, kullanım kolaylığı ve hızlı geliştirme konularında öne çıkarken; D, yüksek hız ve düşük seviyeli erişim gerektiren senaryolarda performansıyla parlamaktadır. D'nin birinci sınıf fonksiyonlar ve mixin'ler gibi özellikleri, Python'a yakın bir ifade düzeyi sunarken performansı korur.
Go, bazı düşük seviyeli kontrol kayıpları pahasına basitlik ve eşzamanlılığa vurgu yapar. Rust, bellek güvenliği ve eşzamanlılığa odaklanırken, öğrenme eğrisi daha dik olabilir. D, hem performans hem de güvenli eşzamanlılık özellikleri sunarak orta bir konumda yer alır.
Ruby ve PHP, web geliştirmede kullanım kolaylığı için tasarlanmışken, D performans ve sistem düzeyinde programlamaya yöneliktir. D, hızın önemli olduğu arka uç hizmetleri için kullanılabilir.
D, C ile yakın bir temsili sayesinde kaynak-kaynağa derleme için bir hedef olarak hizmet edebilir. d2c
gibi araçları kullanarak, geliştiriciler D kodunu C'ye dönüştürebilir ve C kütüphaneleriyle birlikte çalışabilirlik sağlayarak D'yi mevcut C projelerine entegre etmeyi kolaylaştırabilir.