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.

Reply via email to