One of D's core design decision was to be consistent and avoid corner cases
in the language.
This is called turtles all the way down.
One good example for this consistency are
For a simple hello world program in D,
imports are needed.
import statement makes all public functions
and types from the given module available.
import statement does not need to appear at the top of a source file.
It can also be used locally within functions or any other scope.
In the following chapters you will see that this applies to almost all concepts in D. The language doesn't expose arbitrary restrictions on you.
The standard library, called Phobos,
is located under the package
and its modules are referenced through
import statement can also be used to selectively
import certain symbols of a module:
import std.stdio : writeln, writefln;
Selective imports can be used to improve readability by making it obvious where a symbol comes from, and also as a way to prevent clashing of symbols with the same name from different modules.
D's module system — in contrast to other systems — is entirely based on files.
my.cat always refers to a file
cat.d in the folder
my needs to be in the current working directory or
in one of the explicitly specified directory imports (
Lastly, to ease splitting big modules up into multiple smaller files,
cat.d, a folder
cat/ could be used as well.
The D compiler would then try to load
my/cat/package.d instead of
The convention (but not a hard rule) for
package.d files is to publicly import
all other modules in the same folder.