Esistono soluzioni affidabili per annotazioni / reflection / code-metadata in C?

7

Non tutte le lingue supportano le annotazioni java-like o gli attributi C # o i metadata del codice in generale, tuttavia ciò non significa che non sia possibile avere nelle lingue che non lo contengono.

Un esempio è PHP con Stubbles e Documentazione annotazione libreria .

La mia domanda è, c'è qualcosa di simile a C ?, o ci sono dei modi affidabili per fare riflessioni con i metadati di codice estesi in C?

Idealmente, sto cercando qualcosa che legge i commenti simili a javadoc.

Modifica: il motivo per cui * che richiede * rispetto al solo desiderio, è che ho bisogno di generare codice C e metadati di codice da un database, oltre a poter modificare quel metadato e aggiorna il database. Il volume del lavoro (~ 15.000 variabili / strutture / funzioni da generare da questo database) giustifica la soluzione.

    
posta dukeofgaming 15.11.2012 - 16:01
fonte

2 risposte

3

La cosa più vicina che riesco a pensare è MetaC:

link

(Già menzionato da FrustratedWithFormsDesigner alcuni giorni fa)

Metti da parte questo, ci sono un certo numero di altri sistemi basati sul preprocessore C che può essere usato (o abusato) per questo compito. Dai un'occhiata a Boost.Preprocessore, ad esempio:

link

Oppure P99 e ABCPP:

link

link

Nonostante ciò, ti consiglio caldamente di utilizzare uno strumento di generazione del codice in piena regola per questa attività (come già ha fatto Brian).

Tutti i suddetti strumenti basati sul preprocessore, alla fine, sono solo modi contorti per eseguire una sorta di generazione di codice. Potresti semplicemente implementare il tuo strumento di generazione del codice completo e ben educato. Ruby, Python e Perl offrono molti buoni strumenti per questo. Ad esempio, Ruby ha il proprio framework di modellazione e generazione del codice:

link

link

Molti altri esistono per altri linguaggi di scripting. Potresti anche usare un motore di template normalmente usato per lo sviluppo di applicazioni web, come Cheetah (basato su Python):

link

Dai anche un'occhiata al framework WLang generico basato su Ruby:

link

Usando un linguaggio di scripting per scopi generici e una struttura di generazione del codice, finirai per sviluppare una vera applicazione indipendente che interrogherà il tuo DB e genererà metadati e codice di conseguenza. Può sembrare una soluzione grande e complicata, ma in realtà è più semplice da scrivere e molto più gestibile rispetto a quella basata su un preprocessore (perché un linguaggio di scripting completo è molto più potente e flessibile del preprocessore C).

Inoltre, dal tuo "elenco di richieste di funzionalità" ho la sensazione che nessuno degli strumenti esistenti basati sul preprocessore possa essere usato per il tuo compito "così com'è" perché il preprocessore C non può facilmente trattare con un DB e perché molto probabilmente il tuo compito richiederà un processo a due passaggi (un passaggio per interrogare il DB e generare i metadati richiesti e un secondo per generare il codice C dai metadati).

Questo può essere un altro motivo per utilizzare un linguaggio di scripting in piena regola.

    
risposta data 22.11.2012 - 12:43
fonte
2

Hai preso in considerazione la generazione del codice ??

Gli attributi e il loro comportamento associato sono solo codice se puoi espanderli. Ci vorrebbe un sacco di setup ma avresti il pieno controllo. Se stai generando questo da un database, penso che tu abbia un caso estremamente strong - questo è ciò che fanno gli ORM.

    
risposta data 15.11.2012 - 20:55
fonte

Leggi altre domande sui tag