D er eit høgnivå, multiparadigme programmeringsspråk som kombinerer effektive lågnivå programmeringskapasitetar med bekvemmeligheita av høgnivåfunksjonar, noko som gjer det eigna for eit breitt spekter av applikasjonar. Det vart utvikla for å gi eit moderne alternativ til C og C++, og tilbyr kraftige abstraksjonar og funksjonar utan å ofre ytelse. D støttar imperativ, objektorientert og funksjonell programmeringsstil, noko som gjer at utviklarar kan velje den tilnærminga som passar best for deira behov.
D vart oppretta av Walter Bright ved selskapet hans, Digital Mars, på slutten av 1990-talet. Språket vart først utvikla som ein evolusjon av C og C++, med mål om å gi betre produktivitet og ytelse. Den første offentlege utgjevinga skjedde i 2001, og etter kvart som språket modna, inkorporerte det funksjonar og konsept frå andre språk, inkludert Java, C# og Python.
D hentar inspirasjon frå ulike programmeringsspråk, og tilpassar funksjonane sine for å skape eit allsidig miljø. Det inkorporerer aspekt frå C og C++ for lågnivå minnehåndtering, og frå Java og C# for søppelrydding og objektorientert programmering. D er også relatert til språk som Go og Rust, som fokuserer på ytelse og sikkerheit.
Per oktober 2023 fortset D å utvikle seg, vedlikehaldt av D Language Foundation og eit aktivt fellesskap. Samarbeidsutvikling har ført til funksjonsforbetringar og betre interoperabilitet med andre språk. D blir i aukande grad tatt i bruk for systemprogramvare, spelutvikling og applikasjonar som krev høg ytelse.
D har sterk statisk typing, som gjer at utviklarar kan oppdage feil ved kompilering. For eksempel:
int x = 10;
string y = "Hello, World!";
D inkluderer ein søppelrydar, som frigjer utviklarar frå manuelle oppgåver med minnehåndtering. Dette kan demonstrerast som følgjer:
void main() {
auto str = new string("Velkomen til D");
writeln(str);
}
D støttar kraftige malmetaprogrammeringskapasitetar, som gjer generisk programmering mogleg. Her er eit eksempel på ein enkel mal:
T max(T)(T a, T b) {
return a > b ? a : b;
}
Ein unik funksjon i D er mixins, som gjer det mogleg å injisere kode ved kompilering:
mixin template AddFunction {
int add(int a, int b) {
return a + b;
}
}
class MyClass {
mixin AddFunction;
}
D behandlar funksjonar som førsteklasses borgarar, noko som gjer det enkelt å sende funksjonar rundt:
void main() {
auto add = (int a, int b) { return a + b; };
writeln(add(5, 3));
}
D gir innebygd støtte for flertråd, noko som gjer parallell programmering enklare:
import core.thread;
void run() {
// Trådarbeid
}
void main() {
auto t = new Thread(&run);
t.start();
t.join();
}
D gir innfødd støtte for nullable typar, som aukar sikkerheita når ein handterer uinitialiserte variablar:
void main() {
int? maybeInt = null;
if (maybeInt !is null) {
writeln(maybeInt);
}
}
D tilbyr synkroniserte funksjonar for enkelt å handtere tråd-sikkerheit:
synchronized void safeFunction() {
// Tråd-sikker kode her
}
D har eit fleksibelt attributtsystem for å legge til metadata til funksjonar, klassar og variablar:
@safe void main() {
// Sikker kode
}
D inkluderer innebygd støtte for enhetstesting, som gjer det enkelt å teste kode:
import std.stdio;
import std.unittest;
void test_example() {
assert(1 + 1 == 2);
}
unittest {
test_example();
}
D har fleire kompilatorar, med dei mest kjende som DMD (D Digital Mars Compiler), LDC (LLVM D Compiler) og GDC (GNU D Compiler). Desse kompilatorane støttar ulike backendar og optimaliseringar, og gir fleksibilitet basert på prosjektbehov.
Populære IDE-ar for D inkluderer Visual Studio Code med D-utvidinga, Code::Blocks, og Eclipse med DDT (D Development Tools). Desse IDE-ane gir syntaksutheving, kodefullføring, feilsøkingsverktøy og støtte for integrerte byggesystem.
For å bygge eit D-prosjekt, nyttar utviklarar typisk byggverktøyet dub
, som handterer avhengigheitsforvaltning og prosjektkonfigurasjon. Ein enkel bygging kan utførast med kommandoen:
dub build
Denne kommandoen kompilere prosjektet basert på innstillingar definert i dub.json
eller dub.sdl
-filen.
D blir brukt i ulike domener, inkludert:
Evna til å produsere høgtytande, påliteleg programvare gjer det til eit eigna val for ytelseskritiske applikasjonar.
D sitt design deler likskapar og kontrastar med fleire programmeringsspråk:
D gir liknande lågnivå kapabilitetar som C og C++, men med funksjonar som automatisk minnehåndtering og ein meir moderne syntaks. I motsetnad til C++, har D eit fokus på enkelheit og brukervennlegheit.
Sjølv om D støttar søppelrydding som Java og C#, tillèt det i tillegg manuell minnehåndtering for ytelseskritiske applikasjonar. D støttar også malar, ein funksjon som er meir lik C++ samanlikna med generiske typar i Java og C#.
Python utmerkar seg i brukervennlegheit og rask utvikling; men D sin ytelse skin i scenario som krev høg hastigheit og lågnivå tilgang. D sine funksjonar, som førsteklasses funksjonar og mixins, gir eit nivå av uttrykksevne nært Python, samtidig som det opprettholder ytelse.
Go legg vekt på enkelheit og samtidighet på bekostning av noko lågnivå kontroll. Rust fokuserer på minnesikkerheit og samtidighet, men har ein brattare læringskurve. D ligg i eit mellomområde, og tilbyr både ytelse og sikre samtidigheitsfunksjonar.
Ruby og PHP er designa for enkelheit i webutvikling, medan D har som mål å oppnå ytelse og systemnivå programmering. D kan brukast for backend-tjenester der hastigheit er avgjerande.
D kan fungere som eit mål for kilde-til-kilde kompilering på grunn av sin nære representasjon av C. Ved å bruke verktøy som d2c
, kan utviklarar konvertere D-kode til C for interoperabilitet med C-bibliotek, noko som gjer det enklare å integrere D i eksisterande C-prosjekt.