Every programmer knows about the logical structure of the code they write, but most aren't even aware about the concept of “physical structure” in program code.
“Physical structure” problems only arise when programming languages have to use processor to include other files. The only example of this that really matters is C and C++, where the #include directive is necessary to make use of code in another compilation unit or library. Other modern languages, such as C# or Java, don't have these issues.
This article on mitigating problems with the physical structure of C++ programs is one of the best reads on the topic I've ever encountered, and is recommended if you program in C or C++.
I started work on Macaroni for C++ years ago because I was sick of copying and pasting to create header files, wasting LOC on include guards, or other grostesque preprocessor crap, and that was before I had to spend time adding boilerplate for features similar to reflection. At the time I was starting to prefer writing C++ to C#, buthaving to define so much stuff for the processor took all the fun out of it.
These days, Macaroni is finished enough that I feel confident using it on big projects.C++ still takes longer to write than Java or C#, but more because the language demands that I, as a coder, know what I'm doing and state things precisely. The benefit is the resulting code is usually more expressive and readable than Java or C# and has a staggering amount of portability.
One issue I'm now seeing with Macaroni is because it enables writing C++ code faster and more succinctly, it makes it easier to write it like C# and ignore the resulting physical structure of the generated source. This could lead to projects that resemble balls of mud and have longer compile times.
Thankfully, Macaroni also makes it easier to write well physically structured C++ code since it has tricks like the “~hidden” keyword to hide class functions in the “Cpp-only” version of the class definition, as well as the ~block keyword which makes it easy to add helper functions to a class in an anonymous namespace. Today, Macaroni makes a good effort to use forward declarations instead of #include directives if it detects the later is unnecessary, but in the future I'd like to also generate its library-wide config header files with precompiled header support for appropriate platforms.
The problem of code's physical structure is something that makes C++ more difficult to use compared to it's newer native language rivals. I'd I'd love it if Macaroni could alleviate this and make C++ a more attractive choice for non-believers.