D's garbage collector is quite safe. Most non-trivial programs use a mix of stack allocation, RAII, malloc-style allocation, and GC. Each style has aspects they're best at.
GC is particularly well-suited when using compile time function evaluation, which executed D code at compile time (i.e. adanced constant folding, where functions can be called).
My remark regarding "safety" wasn't with respect to the quality or correctness of the implementation. My concern is the case where you've found yourself in a situation where you're relying too much on GC, and the application is experiencing long pauses. Changing the design to rely more on manual allocation is one way out, but having more GC choices would be nice too.
GC is particularly well-suited when using compile time function evaluation, which executed D code at compile time (i.e. adanced constant folding, where functions can be called).