Walter Bright wrote:
Christopher Wright wrote:
Eh, this would have to extend to every function, since static ctors
can call functions. And these functions can be provided without
implementations via a .di file. This is fail.
Such problems are called "whole program analysis", or "interprocedural
analysis". There are a lot of cool things you can do with that, but of
course they require 100% of the program text to be available to the
compiler.
That isn't going to happen with D (even if all the D source were
available, what about calling C binaries?). So we have to rely on other
mechanisms.
You could relax the rule: Even if modules A and B both have 'static
this', there is no circular dependency if:
(1) throughout the whole of module A, it only uses pure functions from
module B.
OR
(2) if the constructor of module A doesn't directly access static
variables of module B, and EVERY function it calls is pure.
But that probably doesn't open up very many use cases.