To wymaga obsługi języka (inaczej, kompilatory C/C++ i nie może to zbyt)
W szczególności wymaga, aby kompilator generuje autonomiczne moduły, które eksponują metadane, do których mogą odwoływać się inne moduły.
Zespoły .NET są prostym przykładem. Wszystkie pliki w projekcie są kompilowane razem, generując jedną bibliotekę dll. Ta biblioteka dll może być sprawdzana przez .NET, aby określić, które typy zawiera, tak aby inne zestawy mogły wywoływać zdefiniowane w niej funkcje.
I aby z tego skorzystać, musi być legalne w języku, aby odwoływać się do innych modułów.
W języku C++, co definiuje granicę modułu? Język określa, że kompilator uwzględnia dane tylko w bieżącej jednostce kompilacji (plik .cpp + zawarte nagłówki). Nie ma mechanizmu określającego "Chciałbym nazwać funkcję Foo w pasku modułu, nawet jeśli nie mam prototypu ani nic podobnego podczas kompilacji". Jedynym mechanizmem do dzielenia się informacjami o typach między plikami jest #includes.
Istnieje propozycja dodania systemu modułów do C++, ale nie będzie to kodowanie w C++ 0x. Ostatnio widziałem, że plan polegał na rozważeniu TR1 po wyjściu 0x.
(Warto wspomnieć, że system #include w języku C/C++ był pierwotnie używany, ponieważ kompilacja przyspiesza kompilację. W latach 70-tych umożliwiła kompilatorowi przetworzenie kodu w prostym skanowaniu liniowym. nie musiałem budować drzew składniowych ani innych "zaawansowanych" funkcji. Dzisiaj tabele się zmieniły i stały się ogromnym wąskim gardłem, zarówno jeśli chodzi o użyteczność, jak i prędkość kompilacji.)
Ja * wierzę * zrozumiałeś mnie właściwie. Zasadniczo mam na myśli pomysł w C/C++, że każdy plik źródłowy jest własną jednostką kompilacji. Nie wydaje się, żeby tak było w C# lub Java. –