The D runtime is made up of three logically separate parts: a compiler runtime library, a garbage collector, and a common application layer. Each of these parts represents a specific subset of functionality required for the proper functioning of any D program, and each may only interact with the others through a set of well-defined C routines, described herein. Any remaining external dependencies should be limited to standard or platform-specific C libraries. The rationale behind this design is to simplify the addition of support for new compilers, memory management strategies, and so on, and to allow the appropriate set of features to be chosen by the user at link-time.
Whenever possible, the runtime spec is identical across language version. However, as the language evolves and features are added, some differences become unavoidable. Separate versions of this spec will be provided for each language version, as well as a list of differences from the spec for the prior language version.