D (programming language)
The D programming language is an object-oriented, imperative, multi-paradigm system programming language. D language originated as a re-engineering of C++, and D's design goals try combining the performance of compiled languages with the safety and expressive power of modern dynamic languages. Native D code is commonly as fast as equivalent C++ code, while being shorter and memory-safe.[4]
Paradigm(s) | multi-paradigm: procedural, object-oriented, functional, generic |
---|---|
Appeared in | 8 December 2001[1] |
Designed by | Walter Bright, Andrei Alexandrescu (since 2006) |
Developer | Digital Mars, Andrei Alexandrescu (since 2006) |
Typing discipline | strong, static |
Major implementations | DMD (reference implementation), GDC, LDC |
Influenced by | C, C++, C#, Eiffel, Java, Python, Ruby |
Influenced | MiniD, DScript, Vala, Qore |
OS | DMD: Unix-like, Windows, Mac OS X |
License | GPL/Artistic (DMD frontend), Boost (standard and runtime libraries), source available (DMD backend),[2] Fully open-source (LDC and GDC)[3] |
Usual filename extensions | .d |
Website | dlang |
D Programming at Wikibooks |
Examples
Example 1
This example program prints its command line arguments. The main
function is the entry point of a D program, and args
is an array of strings representing the command line arguments. A string
in D is an array of characters, represented by char[]
in D1, or immutable(char)[]
in D2.
<syntaxhighlight lang="D"> import std.stdio: writefln;
void main(string[] args) {
foreach (i, arg; args) writefln("args[%d] = '%s'", i, arg);
} </syntaxhighlight>
The foreach
statement can iterate over any collection. In this case, it is producing a sequence of indexes (i
) and values (arg
) from the array args
. The index i
and the value arg
have their types inferred from the type of the array args
.
Example 2
The following shows several D capabilities and D design trade-offs in a very short program. It iterates the lines of a text file named words.txt
that contains a different word on each line, and prints all the words that are anagrams of other words.
<syntaxhighlight lang="D">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(" "));
}</syntaxhighlight>
signs2words
is a built-in associative array that maps dstring (32-bit / char) keys to arrays of dstrings. It is similar todefaultdict(list)
in Python.lines(File())
yields lines lazily, with the newline. It has to then be copied withidup
to obtain a string to be used for the associative array values (theidup
property of arrays returns an immutable duplicate of the array, which is required since thedstring
type is actuallyimmutable(dchar)[]
). Built-in associative arrays require immutable keys.- The
~=
operator appends a new dstring to the values of the associate dynamic array. toLower
,join
andchomp
are string functions that may be used with a method-like syntax. The name of such functions is often very similar to Python string methods. ThetoLower
converts a string to lower case,join(" ")
joins an array of strings into a single string using a single space as separator, andchomp
removes a newline from the end of the string if one is present.- The
sort
is an std.algorithm function that sorts the array in place, creating a unique signature for words that are anagrams of each other. Therelease()
method on the return value ofsort()
is handy to keep the code as a single expression. - The second
foreach
iterates on the values of the associative array, it's able to infer the type ofwords
. key
is assigned to an immutable variable; its type is inferred.- UTF-32 dchar[] is used instead of normal UTF-8 char[] otherwise
sort()
refuses to sort it. There are more efficient ways to write this program, that use just UTF-8.
References
- ↑ "D Change Log to Nov 7 2005". D Programming Language 1.0. Digital Mars. Retrieved 13 June 2014.
- ↑ "github". DMD source code. GitHub. Retrieved 13 June 2014.{{|bot=InternetArchiveBot |fix-attempted=yes }}
- ↑ FAQ of digitalmars Retrieved 13 June 2014
- ↑ Bright, Walter. D programming Language Specification (e-book ed.). 7227: Digital Mars (via Amazon).
{{cite book}}
: CS1 maint: location (link)
Further reading
- Alexandrescu, Andrei (January 4, 2010). The D Programming Language (1 ed.). Addison-Wesley Professional. ISBN 978-0-321-63536-5.
- Alexandrescu, Andrei (June 15, 2009). "The Case for D". Dr. Dobb's Journal.
- Çehreli, Ali (February 1, 2012). "Programming in D". (distributed under CC-BY-NC-SA license). This book provides a basic level introduction.
Other websites
The English Wikibooks has more information on: |
The English Wikibooks has more information on: |