D's syntax isn't quite as nice as, say, Haskell (which strongly depends on preference anyway), but it has all the necessary tools to write strongly pure, referentially-transparent functions. There's the `pure` and `immutable` keywords that let the compiler statically verify the above properties.