D (Programming Language) - Wikipedia, The Free Encyclopedia

Download as pdf or txt
Download as pdf or txt
You are on page 1of 10

D(programminglanguage)

FromWikipedia,thefreeencyclopedia

TheDprogramminglanguageisanobjectoriented,
imperative,multiparadigmsystemprogramminglanguage
createdbyWalterBrightofDigitalMarsandreleasedin
2001.Brightwasjoinedinthedesignanddevelopment
effortin2006byAndreiAlexandrescu.Thoughit
originatedasareengineeringofC++,Disadistinct
language,havingredesignedsomecoreC++features
whilealsotakinginspirationfromotherlanguages,notably
Java,Python,Ruby,C#,andEiffel.
D'sdesigngoalsattempttocombinetheperformanceand
safetyofcompiledlanguageswiththeexpressivepowerof
moderndynamiclanguages.IdiomaticDcodeis
commonlyasfastasequivalentC++code,whilebeing
shorterandmemorysafe.[9]
Typeinference,automaticmemorymanagementand
syntacticsugarforcommontypesallowfaster
development,whileboundschecking,designbycontract
featuresandaconcurrencyawaretypesystemhelp
reducetheoccurrenceofbugs.[10]

Contents
1 Features
1.1 Programmingparadigms
1.1.1 Imperative
1.1.2 Objectoriented
1.1.3 Metaprogramming
1.1.4 Functional
1.1.5 Parallel
1.1.6 Concurrent
1.2 Memorymanagement
1.3 SafeD
1.4 Interactionwithothersystems
2 History
3 Implementations
4 Developmenttools
5 Examples
5.1 Example1
5.2 Example2
6 Seealso
7 References
8 Furtherreading
9 Externallinks

Dprogramminglanguage

Paradigm

compiled,multiparadigm:
procedural,objectoriented,
functional,generic

Designedby

WalterBright,AndreiAlexandrescu
(since2006)

Developer

DigitalMars,AndreiAlexandrescu
(since2006)

Firstappeared 2001[1]
Stablerelease 2.070.0[2]/January27,2016[3]
Typing
discipline

strong,static,inferred

OS

DMD:Unixlike(FreeBSD,Linux
etc.),Windows,OSX

License

Boost(DMDfrontend, [4]standard
andruntimelibraries),
sourceavailable(DMD
backend), [5]
Fullyopensource(LDCand
GDC)[6]

Filename
extensions

.d

Website

dlang.org(http://dlang.org)
Majorimplementations

DMD(referenceimplementation),GDC,LDC
Influencedby
C,C++,C#,Eiffel, [7]Java,Python,Ruby
Influenced
MiniD,DScript,Vala,Qore,Swift, [8]Genie
DProgrammingatWikibooks

9 Externallinks

Features
DisdesignedwithlessonslearnedfrompracticalC++usageratherthanfromatheoreticalperspective.Even
thoughitusesmanyC/C++conceptsitalsodiscardssome,andassuchisnotcompatiblewithC/C++source
code.DhashoweverbeenconstrainedinitsdesignbytherulethatanycodethatislegalinbothCandD
shouldbehavethesame.ItaddstothefunctionalityofC++byalsoimplementingdesignbycontract,unittesting,
truemodules,garbagecollection,firstclassarrays,associativearrays,dynamicarrays,arrayslicing,nested
functions,innerclasses,closures,anonymousfunctions,compiletimefunctionexecution,lazyevaluationandhas
areengineeredtemplatesyntax.DretainsC++'sabilitytodolowlevelcoding,andaddstoitwithsupportfor
anintegratedinlineassembler.C++multipleinheritanceisreplacedbyJavastylesingleinheritancewith
interfacesandmixins.D'sdeclaration,statementandexpressionsyntaxcloselymatchesthatofC++.
TheinlineassemblertypifiesthedifferencesbetweenDandapplicationlanguageslikeJavaandC#.Aninline
assemblerletsprogrammersentermachinespecificassemblycodewithinstandardDcode,amethodoftenused
bysystemprogrammerstoaccessthelowlevelfeaturesoftheprocessorneededtorunprogramsthatinterface
directlywiththeunderlyinghardware,suchasoperatingsystemsanddevicedrivers.
Dhasbuiltinsupportfordocumentationcomments,allowingautomaticdocumentationgeneration.

Programmingparadigms
Dsupportsfivemainprogrammingparadigmsimperative,objectoriented,metaprogramming,functionaland
concurrent(actormodel).
Imperative
ImperativeprogramminginDisalmostidenticaltoC.Functions,data,statements,declarationsandexpressions
workjustasinC,andtheCruntimelibrarycanbeaccesseddirectly.SomenotabledifferencesbetweenDand
CintheareaofimperativeprogrammingincludeD'sforeachloopconstruct,whichallowsloopingovera
collection,andnestedfunctions,whicharefunctionsthataredeclaredinsideofanotherandmayaccessthe
enclosingfunction'slocalvariables.
Objectoriented
ObjectorientedprogramminginDisbasedonasingleinheritancehierarchy,withallclassesderivedfromclass
Object.Ddoesnotsupportmultipleinheritanceinstead,itusesJavastyleinterfaces,whicharecomparableto
C++pureabstractclasses,andmixins,whichallowseparatingcommonfunctionalityoutoftheinheritance
hierarchy.Dalsoallowsdefiningstaticandfinal(nonvirtual)methodsininterfaces.
Metaprogramming
Metaprogrammingissupportedbyacombinationoftemplates,compiletimefunctionexecution,tuples,and
stringmixins.ThefollowingexamplesdemonstratesomeofD'scompiletimefeatures.
TemplatesinDcanbewritteninamoreimperativestylecomparedtoC++functionalstylefortemplates.Thisis
aregularfunctionthatcalculatesthefactorialofanumber:

ulong factorial(ulong n)
{
if (n<2)
return 1;
else
return n * factorial(n-1);
}

Here,theuseofstatic if,D'scompiletimeconditionalconstruct,isdemonstratedtoconstructatemplate
thatperformsthesamecalculationusingcodethatissimilartothatofthefunctionabove:
template Factorial(ulong n)
{
static if (n<2)
enum Factorial = 1;
else
enum Factorial = n * Factorial!(n-1);
}

Inthefollowingtwoexamples,thetemplateandfunctiondefinedaboveareusedtocomputefactorials.The
typesofconstantsneednotbespecifiedexplicitlyasthecompilerinferstheirtypesfromtherighthandsidesof
assignments:
enum fact_7 = Factorial!(7);

Thisisanexampleofcompiletimefunctionexecution.Ordinaryfunctionsmaybeusedinconstant,compiletime
expressionsprovidedtheymeetcertaincriteria:
enum fact_9 = factorial(9);

Thestd.string.formatfunctionperformsprintflikedataformatting(alsoatcompiletime,through
CTFE),andthe"msg"pragmadisplaystheresultatcompiletime:
import std.string : format;
pragma(msg, format("7! = %s", fact_7));
pragma(msg, format("9! = %s", fact_9));

Stringmixins,combinedwithcompiletimefunctionexecution,allowgeneratingDcodeusingstringoperationsat
compiletime.ThiscanbeusedtoparsedomainspecificlanguagestoDcode,whichwillbecompiledaspartof
theprogram:
import FooToD; // hypothetical module which contains a function that parses Foo source code
// and returns equivalent D code
void main()
{
mixin(fooToD(import("example.foo")));
}

Functional
Dsupportsfunctionalprogrammingfeaturessuchasfunctionliterals,closures,recursivelyimmutableobjectsand
theuseofhigherorderfunctions.Therearetwosyntaxesforanonymousfunctions,includingamultiple
statementformanda"shorthand"singleexpressionnotation:[11]

int function(int) g;
g = (x) { return x * x; }; // longhand
g = (x) => x * x;
// shorthand

Therearetwobuiltintypesforfunctionliterals,function,whichissimplyapointertoastackallocated
function,anddelegate,whichalsoincludesapointertothesurroundingenvironment.Typeinferencecanbe
usedwithananonymousfunction,inwhichcasethecompilercreatesadelegateunlessitcanprovethatan
environmentpointerisnotnecessary.Likewise,toimplementaclosure,thecompilerplacesenclosedlocal
variablesontheheaponlyifnecessary(forexample,ifaclosureisreturnedbyanotherfunction,andexitsthat
function'sscope).Whenusingtypeinference,thecompilerwillalsoaddattributessuchaspureandnothrowto
afunction'stype,ifitcanprovethattheyapply.
Otherfunctionalfeaturessuchascurryingandcommonhigherorderfunctionssuchasmap,filter,andreduce
areavailablethroughthestandardlibrarymodulesstd.functionalandstd.algorithm.
import std.stdio, std.algorithm, std.range;
void main()
{
int[] a1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
int[] a2 = [6, 7, 8, 9];
// must be immutable to allow access from inside a pure function
immutable pivot = 5;
int mySum(int a, int b) pure nothrow // pure function
{
if (b <= pivot) // ref to enclosing-scope
return a + b;
else
return a;
}
// passing a delegate (closure)
auto result = reduce!mySum(chain(a1, a2));
writeln("Result: ", result); // Result: 15

// passing a delegate literal


result = reduce!((a, b) => (b <= pivot) ? a + b : a)(chain(a1, a2));
writeln("Result: ", result); // Result: 15

Alternatively,theabovefunctioncompositionscanbeexpressedusingUniformFunctionCallSyntax(UFCS)
formorenaturallefttorightreading:
auto result = a1.chain(a2).reduce!mySum();
writeln("Result: ", result);
result = a1.chain(a2).reduce!((a, b) => (b <= pivot) ? a + b : a)();
writeln("Result: ", result);

Parallel
import std.stdio : writeln;
import std.range : iota;
import std.parallelism : parallel;
void main()
{
foreach (i; iota(10).parallel) {
// The body of the foreach loop is executed in parallel for each i
writeln("processing ", i);
}

Concurrent
import std.stdio, std.concurrency, std.variant;
void foo()
{
bool cont = true;

while (cont)
{
receive( // delegates are used to match the message type
(int msg) => writeln("int received: ", msg),
(Tid sender) { cont = false; sender.send(-1); },
(Variant v) => writeln("huh?") // Variant matches any type
);
}

void main()
{
auto tid = spawn(&foo); // spawn a new thread running foo()
foreach (i; 0 .. 10)
tid.send(i);
//
tid.send(1.0f);
//
tid.send("hello"); //
tid.send(thisTid); //
}

send
send
send
send

some integers
a float
a string
a struct (Tid)

receive((int x) => writeln("Main thread received message: ", x));

Memorymanagement
Memoryisusuallymanagedwithgarbagecollection,butspecificobjectscanbefinalizedimmediatelywhenthey
gooutofscope.Explicitmemorymanagementispossibleusingtheoverloadedoperatorsnewanddelete,and
bysimplycallingC'smallocandfreedirectly.Garbagecollectioncanbecontrolled:programmerscanaddand
excludememoryrangesfrombeingobservedbythecollector,candisableandenablethecollectorandforcea
generationalorafullcollectioncycle.[12]Themanualgivesmanyexamplesofhowtoimplementdifferenthighly
optimizedmemorymanagementschemesforwhengarbagecollectionisinadequateinaprogram.[13]

SafeD
SafeD[14]isthenamegiventothesubsetofDthatcanbeguaranteedtobememorysafe(nowritestomemory
thatwerenotallocatedorthathavealreadybeenrecycled).Functionsmarked@safearecheckedatcompile
timetoensurethattheydonotuseanyfeaturesthatcouldresultincorruptionofmemory,suchaspointer
arithmeticanduncheckedcasts,andanyotherfunctionscalledmustalsobemarkedas@safeor@trusted.
Functionscanbemarked@trustedforthecaseswherethecompilercannotdistinguishbetweensafeuseofa
featurethatisdisabledinSafeDandapotentialcaseofmemorycorruption.

Interactionwithothersystems
C'sapplicationbinaryinterface(ABI)issupportedaswellasallofC'sfundamentalandderivedtypes,enabling
directaccesstoexistingCcodeandlibraries.DbindingsareavailableformanypopularClibraries.C's
standardlibraryispartofstandardD.

BecauseC++doesnothaveasinglestandardABI,DcanonlyfullyaccessC++codethatiswrittentotheC
ABI.TheDparserunderstandsanextern(C++)callingconventionforlimitedlinkingtoC++objects.
OnMicrosoftWindows,DcanaccessComponentObjectModel(COM)code.

History
WalterBrightdecidedtostartworkingonanewlanguagein1999.DwasfirstreleasedinDecember2001,[1]
andreachedversion1.0inJanuary2007.[15]Thefirstversionofthelanguage(D1)concentratedonthe
imperative,objectorientedandmetaprogrammingparadigms,[16]similartoC++.
DissatisfiedwithPhobos,D'sofficialruntimeandstandardlibrary,membersoftheDcommunitycreatedan
alternativeruntimeandstandardlibrarynamedTango.ThefirstpublicTangoannouncementcamewithindaysof
D1.0'srelease.[17]Tangoadoptedadifferentprogrammingstyle,embracingOOPandhighmodularity.Beinga
communityledproject,Tangowasmoreopentocontributions,whichallowedittoprogressfasterthanthe
officialstandardlibrary.Atthattime,TangoandPhoboswereincompatibleduetodifferentruntimesupport
APIs(thegarbagecollector,threadingsupport,etc.).Thismadeitimpossibletousebothlibrariesinthesame
project.Theexistenceoftwolibraries,bothwidelyinuse,hasledtosignificantdisputeduetosomepackages
usingPhobosandothersusingTango.[18]
InJune2007,thefirstversionofD2wasreleased.[2]ThebeginningofD2'sdevelopmentsignalledthe
stabilizationofD1thefirstversionofthelanguagehasbeenplacedinmaintenance,onlyreceivingcorrections
andimplementationbugfixes.D2wastointroducebreakingchangestothelanguage,beginningwithitsfirst
experimentalconstsystem.D2lateraddednumerousotherlanguagefeatures,suchasclosures,purity,and
supportforthefunctionalandconcurrentprogrammingparadigms.D2alsosolvedstandardlibraryproblemsby
separatingtheruntimefromthestandardlibrary.ThecompletionofaD2TangoportwasannouncedinFebruary
2012.[19]
ThereleaseofAndreiAlexandrescu'sbookTheDProgrammingLanguageonJune12,2010markedthe
stabilizationofD2,whichtodayiscommonlyreferredtoasjust"D".
InJanuary2011,Ddevelopmentmovedfromabugtracker/patchsubmissionbasistoGitHub.Thishasledto
asignificantincreaseincontributionstothecompiler,runtimeandstandardlibrary.[20]
InDecember2011,AndreiAlexandrescuannouncedthatD1,thefirstversionofthelanguage,wouldbe
discontinuedonDecember31,2012.[21]ThefinalD1release,Dv1.076,wasonDecember31,2012.[22]

Implementations
MostcurrentDimplementationscompiledirectlyintomachinecodeforefficientexecution.
DMDTheDigitalMarsDcompileristheofficialDcompilerbyWalterBright.Thefrontendis
licensedundertheBoostSoftwareLicense.[4]Thebackendsourcecodeisavailablebutnotunderan
opensourcelicense,[5]becauseitwaspartiallydevelopedatSymantecandcannotberelicensedasopen
source.[23]
GDCAfrontendfortheGCCbackend,builtusingtheopenDMDcompilersourcecode.[24]
LDCAcompilerbasedontheDMDfrontendthatusesLLVMasitscompilerbackend.Thefirst
releasequalityversionwaspublishedonJanuary9,2009.[25]Itsupportsversion2.0.[26]

DCompilerfor.NETAbackendfortheDprogramminglanguage2.0compiler.[27][28]Itcompiles
thecodetoCommonIntermediateLanguage(CIL)bytecoderatherthantomachinecode.TheCILcan
thenberunviaaCommonLanguageInfrastructure(CLR)virtualmachine.
SDCADcompilerusingacustomfrontendandLLVMasitscompilerbackend.ItiswritteninD
andusesaschedulertohandlesymbolresolutioninordertoelegantlyhandlethecompiletimefeaturesof
D.Thiscompilercurrentlysupportsalimitedsubsetofthelanguage.[29][30]

Developmenttools
Editorsandintegrateddevelopmentenvironments(IDEs)supportingDincludeEclipse,MicrosoftVisualStudio,
SlickEdit,Emacs,vim,SciTE,Smultron,TextMate,MonoDevelop,Zeus,[31]andGeanyamongothers.[32]
EclipsepluginsforDinclude:DDT,[33]andDescent(deadproject).[34]
VisualStudiointegrationisprovidedbyVisualD.[35]
Vimsupportsbothsyntaxhighlightingandcodecompletion(throughpatchedCtags).
AbundleisavailableforTextMate,andtheCode::BlocksIDEincludespartialsupportforthelanguage.
However,standardIDEfeaturessuchascodecompletionorrefactoringarenotyetavailable,though
theydoworkpartiallyinCode::Blocks(duetoD'ssimilaritytoC).
ApluginforXcode3isavailable,DforXcode,toenableDbasedprojectsanddevelopment.[36]
AnAddInforMonoDevelopisavailable,namedMonoD.[37]
KDevelop(aswellasitstexteditorbackend,Kate)autocompletionpluginisavailable.[38]
OpensourceDIDEsforWindowsexist,somewritteninD,suchasPoseidon,[39]DIDE,[40]andEntice
Designer.[41]
DapplicationscanbedebuggedusinganyC/C++debugger,likeGDBorWinDbg,althoughsupportforvarious
Dspecificlanguagefeaturesisextremelylimited.OnWindows,DprogramscanbedebuggedusingDdbg
(http://ddbg.mainia.de/),orMicrosoftdebuggingtools(WinDBGandVisualStudio),afterhavingconvertedthe
debuginformationusingcv2pdb(http://dsource.org/projects/cv2pdb).TheZeroBUGS
(http://zerobugs.codeplex.com/)debuggerforLinuxhasexperimentalsupportfortheDlanguage.Ddbgcanbe
usedwithvariousIDEsorfromthecommandlineZeroBUGShasitsowngraphicaluserinterface(GUI).

Examples
Example1
Thisexampleprogramprintsitscommandlinearguments.ThemainfunctionistheentrypointofaDprogram,
andargsisanarrayofstringsrepresentingthecommandlinearguments.AstringinDisanarrayof
characters,representedbychar[]inD1,orimmutable(char)[]inD2.
1
2
3
4
5
6
7

import std.stdio: writefln;


void main(string[] args)
{
foreach (i, arg; args)
writefln("args[%d] = '%s'", i, arg);
}

Theforeachstatementcaniterateoveranycollection.Inthiscase,itisproducingasequenceofindexes(i)
andvalues(arg)fromthearrayargs.Theindexiandthevaluearghavetheirtypesinferredfromthetypeof
thearrayargs.

Example2
ThefollowingshowsseveralDcapabilitiesandDdesigntradeoffsinaveryshortprogram.Ititeratesoverthe
linesofatextfilenamedwords.txt,whichcontainsadifferentwordoneachline,andprintsallthewordsthat
areanagramsofotherwords.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

import std.stdio, std.algorithm, std.range, std.string;


void main()
{
dstring[][dstring] signs2words;
foreach(dchar[] w; lines(File("words.txt")))
{
w = w.chomp().toLower();
immutable key = w.dup.sort().release().idup;
signs2words[key] ~= w.idup;
}

foreach(words; signs2words)
if(words.length > 1)
writefln(words.join(" "));

1.signs2wordsisabuiltinassociativearraythatmapsdstring(32bit/char)keystoarraysofdstrings.It
issimilartodefaultdict(list)inPython.
2.lines(File())yieldslineslazily,withthenewline.Ithastothenbecopiedwithiduptoobtainastring
tobeusedfortheassociativearrayvalues(theiduppropertyofarraysreturnsanimmutableduplicateof
thearray,whichisrequiredsincethedstringtypeisactuallyimmutable(dchar)[]).Builtin
associativearraysrequireimmutablekeys.
3.The~=operatorappendsanewdstringtothevaluesoftheassociatedynamicarray.
4.toLower,joinandchomparestringfunctionsthatDallowstousewithamethodsyntax.Thenameof
suchfunctionsisoftenverysimilartoPythonstringmethods.ThetoLowerconvertsastringtolower
case,join("")joinsanarrayofstringsintoasinglestringusingasinglespaceasseparator,andchomp
removesanewlinefromtheendofthestringifoneispresent.
5.Thesortisanstd.algorithmfunctionthatsortsthearrayinplace,creatingauniquesignatureforwords
thatareanagramsofeachother.Therelease()methodonthereturnvalueofsort()ishandytokeep
thecodeasasingleexpression.
6.Thesecondforeachiteratesonthevaluesoftheassociativearray,it'sabletoinferthetypeofwords.
7.keyisassignedtoanimmutablevariable,itstypeisinferred.
8.UTF32dchar[]isusedinsteadofnormalUTF8char[]otherwisesort()refusestosortit.There
aremoreefficientwaystowritethisprogram,thatusejustUTF8.

Seealso
Ddoc
Gtk+DSupport

References

1."DChangeLogtoNov72005".DProgramming
Language1.0.DigitalMars.Retrieved1December
2011.
2."Changelog".DProgrammingLanguage2.0.
DigitalMars.Retrieved27January2016.
3."ReleaseD2.070.0".Retrieved27January2016.
4."dmdfrontendnowswitchedtoBoostlicense".
RetrievedSeptember9,2014.
5."readme.txt".DMDsourcecode.GitHub.Retrieved
March5,2012.
6."D2.0FAQ".Retrieved11August2015.
7.Alexandrescu,Andrei(2010).TheDprogramming
language(Firsted.).UpperSaddleRiver,NJ:
AddisonWesley.p.314.ISBN0321635361.
8."Buildingassert()inSwift,Part2:__FILE__and
__LINE__".RetrievedSeptember25,2014.
9.Bright,Walter.DprogrammingLanguage
Specification(ebooked.).7227:DigitalMars(via
Amazon).MemorySafetyhasanentirechapter,
withrecipes.It'samajorthemeofthelanguage.
Failurestoreachthisstandardaredefects.
10.AndreiAlexandrescu(August2,2010).ThreeCool
ThingsAboutD.
11."Expressions".DigitalMars.Retrieved
December27,2012.
12."std.gc".DProgrammingLanguage1.0.Digital
Mars.Retrieved6July2010.
13."MemoryManagement".DProgramming
Language2.0.DigitalMars.RetrievedFebruary17,
2012.
14.BartoszMilewski."SafeDDProgramming
Language".Retrieved17July2014.
15."DChangeLog".DProgrammingLanguage1.0.
DigitalMars.Retrieved11January2012.
16."Intro".DProgrammingLanguage1.0.Digital
Mars.Retrieved1December2011.
17."Announcinganewlibrary".Retrieved15February
2012.
18."Wiki4DStandardLib".Retrieved6July2010.
19."TangoforD2:Allusermodulesported".Retrieved
16February2012.
20.WalterBright."Re:GitHubordsource?".Retrieved
15February2012.

21.AndreiAlexandrescu."D1tobediscontinuedon
December31,2012".Retrieved31January2014.
22."DChangeLog".DProgrammingLanguage1.0.
DigitalMars.Retrieved31January2014.
23."RedditcommentbyWalterBright".Retrieved
September9,2014.
24."gdcprojecthomepage".Retrieved14October
2012.
25."LLVMDcompilerprojectonDSource".Retrieved
3July2010.
26."BuildInstructionsPhobosDruntimeTrunkldcD
ProgrammingLanguageTrac".Retrieved
11August2015.
27."D.NETprojectonCodePlex".Retrieved3July
2010.
28.JonathanAllen(15May2009)."Sourceforthe
D.NETCompilerisNowAvailable".InfoQ.
Retrieved6July2010.
29."DConf2014:SDC,aDCompilerasaLibraryby
AmaurySechet".Retrieved8January2014.
30."deadalnix/SDC".Retrieved8January2014.
31."Wiki4D:EditorSupport/ZeusForWindows".
Retrieved11August2015.
32."Wiki4DEditorSupport".Retrieved3July2010.
33."GoogleProjectHosting".Retrieved11August
2015.
34."descent".Retrieved11August2015.
35."VisualD".Retrieved11August2015.
36."MichelFortinDforXcode".Retrieved
11August2015.
37."MonoDDSupportforMonoDevelop".
Retrieved11August2015.
38."Dav1dde/lumen".GitHub.Retrieved11August
2015.
39."poseidon".Retrieved11August2015.
40."MonoDDSupportforMonoDevelop".
Retrieved11August2015.
41."EnticeDesignerDprogramming.comTheD
programminglanguage".Retrieved11August
2015.

Furtherreading
Alexandrescu,Andrei(January4,2010).TheDProgrammingLanguage(1ed.).AddisonWesley
Professional.ISBN9780321635365.
Alexandrescu,Andrei(June15,2009)."TheCaseforD".Dr.Dobb'sJournal.
Bright,Walter(April8,2014)."HowICametoWriteD".Dr.Dobb'sJournal.
ehreli,Ali(February1,2012)."ProgramminginD".(distributedunderCCBYNCSAlicense).This
bookprovidesabasiclevelintroduction.
Metz,Cade(July7,2014)."TheNextBigProgrammingLanguageYouveNeverHeardOf".Wired.
Ruppe,Adam(May2014).DCookbook(1ed.).PACKTPublishing.ISBN9781783287215.

Externallinks
Officialwebsite(http://dlang.org)
DigitalMars(http://www.digitalmars.com)
DProgrammingLanguage(https://github.com/D
ProgrammingLanguage)onGitHub
Retrievedfrom"https://en.wikipedia.org/w/index.php?
title=D_(programming_language)&oldid=706454897"

Wikibookshasabookon
thetopicof:ABeginner's
GuidetoD
Wikibookshasabookon
thetopicof:D
Programming

Categories: Cprogramminglanguagefamily Classbasedprogramminglanguages


Multiparadigmprogramminglanguages Systemsprogramminglanguages
Programminglanguagescreatedin2001 Staticallytypedprogramminglanguages
Freecompilersandinterpreters Proceduralprogramminglanguages
Objectorientedprogramminglanguages Crossplatformsoftware Highlevelprogramminglanguages
Thispagewaslastmodifiedon23February2016,at12:10.
TextisavailableundertheCreativeCommonsAttributionShareAlikeLicenseadditionaltermsmay
apply.Byusingthissite,youagreetotheTermsofUseandPrivacyPolicy.Wikipediaisaregistered
trademarkoftheWikimediaFoundation,Inc.,anonprofitorganization.

You might also like