One major problem is the D's inability to create dynamic libraries. D is a great language, but without that ability it can only be used for small programs, tools, etc. and never in production.
The D Runtime is a step forward, because it faces that problem. I noticed following: extern (C) void* rt_loadLibrary( in char[] name ); extern (C) bool rt_unloadLibrary( void* ptr ); /** * Locates a dynamic library with the supplied library name and dynamically * loads it into the caller's address space. If the library contains a D * runtime it will be integrated with the current runtime. * * Params: * name = The name of the dynamic library to load. * * Returns: * A reference to the library or null on error. */ static void* loadLibrary( in char[] name ) { return rt_loadLibrary( name ); } /** * Unloads the dynamic library referenced by p. If this library contains a * D runtime then any necessary finalization or cleanup of that runtime * will be performed. * * Params: * p = A reference to the library to unload. */ static bool unloadLibrary( void* p ) { return rt_unloadLibrary( p ); } However If the library contains a D runtime it will be integrated with the current runtime. Is this really needed? If the intention is to replace C/C++ some day, why not just provide a dynamic D library? (like in this project: http://www.dsource.org/projects/ddl/) It can contain only compiled D code accompanied with meta-data like platform, version, etc. and be used only by D programs. No runtime is needed within the DDL. When the DDL is loaded it will be managed by the same GC which manages the program itself. Even Phobos can be a DDL. Maybe I am missing something and that's why I would like to hear your opinion.