Starting with #Delphi #XE2 many of the new RTL units related to Vcl styles, OSX and so on, uses inc files to declare types, classes and implement code (just like the FPC does), what is the justification to do that? you can see what i mean if you inspect one of these folders (sourcertlposix, sourcertlposixosx, sourcertlsys )
Possibly to avoid duplicating this stuff in framework/platform specific units and without adding them to the most basic RTL units. Then again, that could also have been achieved with separate units. For type declarations that should really have been done. For implementation code I can see one reason to put it into an .inc
file instead of its own unit: the code is relying on the Delphi specific rules regarding private
class members (strict private
was added to avoid this).
If one looks at the .inc
files, it is apparent that they started out as including constants and data that may change. I use them for the same purpose.
Then they have started putting structures into them as well.
One reason as mentioned by Marjan is for framework and platform specific units. One can have the same definitions but different implementations.
Another is to avoid circular unit
reference issues. This would probably, also speed up compilation, because smaller units are being loaded in the initial phase.