Idee per il preprocessore:
1)si potrebbe fare estendendo quello esistente in modo da utilizzare la filosofia java per gli annotation @annotation(prameters).
I primi che mi vengono in mente sono ad esempio
{@SuppressWarning("unused parameter")}.
per arrivare a quelli più "complessi"
{@LinkDynamicLibrary("nomefile.a")}.
{@LinkCppObjectFile("nomefile.o")}.
{@LinkCObjectFile("nomefile.o")}.
(Gli ultimi due annotation possibili non ho proprio la minima idea di come realizzarli :p )
2) per ogni categoria/gruppo di annotation racchiuderli in contentitori caricabili dinamicamente (dll/so/dl) per la gestione.
Il compilatore java per vedere la gestione delle annotation usa dei ".class" che vengono caricati al momento dal classloader a gestire dinamicamente le "espansioni" del compilatore.
Alternativamente, evitando i generics introdotti (un abominio per chi arriva dal c++) implementare un preprocessore che sia un template manager a tutti gli effetti.
Sfiga? I sorgenti devono essere sempre disponibili, in modo da poter generare al volo i sorgenti veri da compilare.
Stilgar
PS:
Occhio a provocare la mia fantasia :D Non sempre devo saperle fare le cose per immaginarle/sognarle ;)
Le annotation avrebbero bisogno di supporto anche da parte del core team di freepascal. Mica è una cosa da fare un'oretta alla sera ;)
ROTFL :D :D :D
Certo che non ti si può accennare niente, che subito parti con la pianificazione ;D
Beh, io pensavo a qualcosa di mooooolto più semplice, del tipo:
{@rebuild mylibdir/libreria.a}
che esegue il rebuild della libreria partendo dai sorgenti e dal makefile presenti in mylibdir.
A suo tempo avevo pensato a un meccanismo del genere per facilitare la programmazione sul nintendo ds: un preprocessore si sarebbe dovuto occupare, ad esempio, di lanciare grit per convertire al volo le immagini. Poi lasciai perdere, perché decisi di utilizzare i makefile ::)