It's a programmer contract, nothing more. It forces the code to be functional, not procedural. Just like const and @safe are simply programmer contracts, functional would mean no explicit stack allocation, except that allocated in called functions.