D (Programming Language) - Wikipedia, The Free Encyclopedia
D (Programming Language) - Wikipedia, The Free Encyclopedia
D (Programming Language) - Wikipedia, The Free Encyclopedia
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
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)
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
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
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