Sebbene possano essere utili per te come forma di documentazione, il sistema che circonda i file di intestazione è straordinariamente inefficiente.
C è stato progettato in modo che ogni passaggio di compilazione costruisca un singolo modulo; ogni file sorgente è compilato in una sessione separata del compilatore. I file di intestazione, d'altra parte, vengono iniettati in quella fase di compilazione per ciascuno dei file sorgente che li fanno riferimento.
Questo significa che se il tuo file di intestazione è incluso in 300 file sorgente, viene analizzato e compilato ripetutamente, 300 volte separate durante la creazione del programma. La stessa identica cosa con lo stesso identico risultato, ancora e ancora. Si tratta di un enorme spreco di tempo ed è uno dei motivi principali per cui i programmi C e C ++ richiedono così tanto tempo per essere costruiti.
Tutte le lingue moderne evitano intenzionalmente questa assurda piccola inefficienza. Invece, tipicamente in linguaggi compilati, i metadati necessari vengono memorizzati all'interno dell'output di compilazione, consentendo al file compilato di agire come una sorta di riferimento rapido che descrive cosa contiene il file compilato. Tutti i vantaggi di un file di intestazione, creati automaticamente senza alcun lavoro aggiuntivo da parte tua.
Alternativamente nelle lingue interpretate, ogni modulo che viene caricato rimane in memoria. Il riferimento o l'inclusione o la richiesta di alcune librerie leggerà e compilerà il codice sorgente associato, che rimane residente fino alla fine del programma. Se lo richiedi anche altrove, nessun lavoro aggiuntivo poiché è già stato caricato.
In entrambi i casi, è possibile "sfogliare" i dati creati da questo passaggio utilizzando gli strumenti del linguaggio. In genere l'IDE avrà un browser di classe di qualche tipo. E se la lingua ha un REPL, può anche essere spesso utilizzata per generare un riepilogo della documentazione di qualsiasi oggetto caricato.