On Monday, 22 May 2023 at 11:23:32 UTC, Adam D Ruppe wrote:
>On Monday, 22 May 2023 at 08:21:50 UTC, Walter Bright wrote:
>Personally, I like to make the core code version-independent and OS-independent and hide the variances in separate modules. Isn't foo() clean looking?
I agree with you that having the option of using run-time guards like assert(0) / throw new NotImplementedEx() and even using empty declarations at compile-time is very convenient in practice to get going with a port. On the other hand, I also find a great amount in being able to get an almost complete list of things that I need to fix at compile-time in terms of planning my work. Based on your blog post it would seem that two approaches are opposite to each other, but I think we should find a way to have our cake and eat it.
A better solution (in that it works with the existing code using static asserts) would be having fully lazy compilation model further along the lines of dmd -i:
starting from set of root symbols (e.g. main, unittest when unit tests are enabled, and functions explicitly marked as export) the compiler should semantically analyse only the declarations which are referenced (directly or indirectly) from the root set. That way, if any symbol (be it enum, struct, function, etc.) is not referenced, it won't analysed and the static assert won't be hit.
Permalink
Reply