¿Existen soluciones confiables para las anotaciones / reflexión / código-metadatos en C?

7

No todos los idiomas son compatibles con las anotaciones de tipo java o los metadatos de código o los atributos de tipo C # en general, sin embargo, eso no significa que no sea posible tenerlos en idiomas que no lo tengan.

Un ejemplo es PHP con Stubbles y Biblioteca de anotaciones de doctrina .

Mi pregunta es, ¿hay algo como esto para C? ¿O hay alguna forma confiable de hacer reflexión con metadatos de código extendido en C?

Idealmente, estoy buscando algo que lea comentarios similares a javadoc.

Editar: La razón por la que * necesito * en lugar de solo querer, es que necesito generar código C y metadatos de código de una base de datos, así como poder editar esa metadada y actualizar la base de datos. El volumen del trabajo (~ 15,000 variables / estructuras / funciones para generar desde esta base de datos) justifica la solución.

    
pregunta dukeofgaming 15.11.2012 - 16:01

2 respuestas

3

Lo más cercano que puedo pensar es en MetaC:

enlace

(Ya mencionado por FrustratedWithFormsDesigner hace unos días)

Dejando esto de lado, hay una serie de otros sistemas basados en el preprocesador de C que se pueden usar (o abusar) para esta tarea. Eche un vistazo a Boost.Preprocessor, por ejemplo:

enlace

O P99 y ABCPP:

enlace

enlace

A pesar de esto, te sugiero encarecidamente que utilices algún tipo de herramienta de generación de código en toda regla para esta tarea (como Brian ya lo hizo).

Al final, todas las herramientas basadas en preprocesadores mencionadas anteriormente son simplemente formas complicadas de realizar algún tipo de generación de código. En su lugar, podría implementar su propia herramienta de generación de código completa y de buen comportamiento. Ruby, Python y Perl ofrecen muchas buenas herramientas para esto. Por ejemplo, Ruby tiene su propio marco de generación de código y modelado:

enlace

enlace

Existen muchos otros para otros lenguajes de script. Incluso podría usar un motor de plantillas que normalmente se usa para desarrollar aplicaciones web, como Cheetah (basado en Python):

enlace

Eche un vistazo al marco WLang basado en Ruby de propósito general, también:

enlace

Al utilizar un lenguaje de script de propósito general y un marco de generación de código, terminará desarrollando una aplicación real e independiente que consultará su base de datos y generará metadatos y códigos en consecuencia. Puede parecer una solución grande y complicada, pero en realidad es más fácil de escribir y mucho más fácil de mantener que una basada en preprocesador (porque un lenguaje de scripting completo es mucho más poderoso y flexible que el preprocesador C).

Además, de su "lista de solicitudes de características" me da la sensación de que ninguna de las herramientas existentes basadas en preprocesadores puede usarse para su tarea "tal cual" porque el preprocesador C no puede manejar fácilmente una base de datos y porque lo más probable es que su tarea requiera un proceso de dos pasadas (una pasada para consultar la base de datos y generar los metadatos necesarios y una segunda para generar el código C a partir de los metadatos).

Esta puede ser otra razón para usar un lenguaje de scripting completo.

    
respondido por el AlexBottoni 22.11.2012 - 12:43
2

¿Has considerado generar código?

Los atributos y su comportamiento asociado son solo código si pudiera expandirlos. Tomaría una tonelada de configuración pero tendría control total. Si está generando esto desde una base de datos, creo que tiene un caso extremadamente sólido: esto es lo que hacen los ORMs.

    
respondido por el brian 15.11.2012 - 20:55

Lea otras preguntas en las etiquetas

Comentarios Recientes

¡Gracias! [Simon] Creo que a partir de la versión 0.6 con permiso ahora se necesita para obtener / recuperar datos de cadenas legales de /script.Suffixes. Me gustaría señalar que algunos resultados se encuentran debido a eso. Esto se rompe en la versión 0.5.1, en la actualización el 31-09-2012 para resolver eso. La refactorización ha mejorado el flujo de visualización de la página, es posible que desee consultar el lector beta si experimenta contenido extraño. [32Kmsg] Un problema simple: debe preguntar, consultar... Lee mas