¿Tiene sentido escribir scripts de compilación en C ++?

15

Estoy usando CMake para generar mis proyectos IDE / makefiles, pero aún necesito llamar "scripts" personalizados para manipular mis archivos compilados o incluso generar código.

En proyectos anteriores, he estado usando Python y estaba bien, pero ahora tengo serios problemas para administrar muchas dependencias en dos proyectos muy grandes en los que estoy trabajando, así que quiero minimizar las dependencias en todas partes.

Alguien me sugirió usar C ++ para escribir mis scripts de compilación en lugar de agregar una dependencia de lenguaje solo para eso. Los proyectos themeselves ya usan C ++, por lo que hay varias ventajas que puedo ver:

  • para compilar todo el proyecto, solo serían necesarios un compilador de C ++ y CMake, nada más (todas las demás dependencias son C o C ++);
  • La seguridad de tipo C ++ (cuando se usa C ++ moderno) hace que todo sea más fácil de "corregir";
  • también es el idioma que mejor conozco, así que me siento más cómodo con él, incluso si soy capaz de escribir un buen código Python;
  • ganancia potencial en la velocidad de ejecución (pero no creo que sea realmente perceptible);

Sin embargo, creo que puede haber algunos inconvenientes y no estoy seguro del impacto real ya que aún no lo he intentado:

  • podría ser más largo para escribir el código (que decía que no estoy seguro porque soy lo suficientemente eficiente en C ++ para escribir algo que funcione rápidamente, por lo que tal vez para este sistema no sea tan largo escribir) (compilación el tiempo no debería ser un problema para este caso);
  • Debo suponer que todos los archivos de texto que leeré como entrada están en UTF-8, no estoy seguro de que puedan verificarse fácilmente en tiempo de ejecución en C ++ y el idioma no lo verificará por usted;
  • las bibliotecas en C ++ son más difíciles de administrar que en los lenguajes de scripting;

Me falta experiencia y visión, por lo que tal vez me falten ventajas e inconvenientes. Entonces la pregunta es: ¿tiene sentido usar C ++ para esto? ¿Tiene experiencias que informar y ve ventajas y desventajas que podrían ser importantes?

    
pregunta Klaim 04.04.2012 - 16:34

4 respuestas

24

Solo usa Python.

Me desarrollo en C ++ y hago mis scripts de compilación en Python, y me resultaría doloroso hacer scripts de compilación en C ++:

  • Python hace que sea trivial manipular diccionarios, listas, diccionarios anidados de diccionarios de listas, etc. (Por ejemplo, uno de mis scripts usa una jerarquía de múltiples niveles de todas mis herramientas, versiones de herramientas y versiones de herramientas 'rutas.) C ++ puede hacer lo mismo con las plantillas y las clases personalizadas, pero es mucho más detallado (lo que se traduce en más líneas de código, lo que generalmente se traduce en una menor productividad).
  • Python proporciona bibliotecas y rutinas de alto nivel como su manejo de XML y JSON, subprocess , y os.walk . Una vez más, C ++ puede hacer esto, pero es mucho más trabajo encontrar las bibliotecas, aprender sus API, ensamblar correctamente las llamadas (que a menudo son de nivel inferior), etc.
  • Los scripts de construcción son una actividad sin valor agregado (para tomar prestado un término de lean). Es mejor usar un lenguaje de alto nivel como sea posible, para que se realicen lo más rápido posible, para volver al trabajo y beneficiar a sus usuarios.
  • En mi experiencia, los scripts de construcción tienden a crecer de forma imprevista. Incluso si una tarea parece inicialmente simple para C ++, puede complicarse rápidamente. Cuando surge un nuevo requisito, a menudo es mucho más sencillo manejar el manejo de un script de Python que hacerlo en C ++ (lo que puede requerir encontrar o leer nuevas API de biblioteca, etc.).

Con respecto a las ventajas que enumera para C ++:

  • Agregar una única dependencia (Python) no debería complicar significativamente tu compilación. Ya es estándar en la mayoría de las instalaciones de Linux, por ejemplo. Gracias a las bibliotecas de "baterías incluidas" de Python, puede ser incluso más fácil de administrar que las bibliotecas de C ++ de las que dependerán sus scripts de construcción.
  • El tipo de seguridad que proporciona C ++ es más útil para proyectos grandes, no para scripts pequeños.
  • Python complementa muy bien C ++ (alto nivel versus nivel inferior, tipografía dinámica versus tipografía estática, etc.) e incluso puede integrarse con C ++ muy bien (gracias a SWIG y Boost.Python) si más adelante quieres hacer eso , por lo que vale la pena aprender para un programador de C ++.
  • Como dijiste, la velocidad de ejecución debería ser una cuestión no publicada.
respondido por el Josh Kelley 04.04.2012 - 17:08
1

Creo que esta es una pregunta específica del caso. Yo diría que no hay una respuesta correcta si tiene sentido o no usar C ++ para los scripts de compilación, la única forma de averiguarlo es probarlo en la práctica.

Personalmente vería a Python superior a C ++ debido a una mejor expresividad del lenguaje y herramientas de biblioteca estándar más sencillas (opinión personal, por supuesto) para administrar la tarea de manipular archivos binarios y generar código. Por supuesto, las bibliotecas sofisticadas desarrolladas para la tarea podrían estar disponibles, pero si no, entonces personalmente apostaría definitivamente por que Python sea la respuesta "más a menudo correcta", en el caso general.

    
respondido por el zxcdw 04.04.2012 - 17:00
1

No escriba scripts, está duplicando esfuerzos y reinventando ruedas.

Use algo como SCONS o incluso Maven 3, que tiene soporte para sistemas de compilación C ++ .

Un buen sistema de compilación, independientemente del idioma, no debería requerir una lógica personalizada en forma de scripts para construir un artefacto ejecutable que funcione.

Si tiene que escribir scripts para que un sistema de compilación lo personalice, no es un buen sistema de compilación. Escribir un complemento para un sistema de compilación es una historia diferente, pero aún así debería ser muy particular para un entorno / hardware en su mayoría, y debería ser algo a lo que rara vez se recurre.

    
respondido por el Jarrod Roberson 04.04.2012 - 18:49
0

Para centrarse en la pregunta:

  

¿Tiene sentido escribir scripts de compilación en C ++?

La respuesta es un simple no .

La respuesta actualmente aceptada se enfoca en Python y enumera un montón de preocupaciones válidas, pero me gustaría agregar una razón independiente del idioma:

Realmente no desea escribir en cualquier cualquier lenguaje compilado si puede evitarlo:

  • ¡Necesitará una secuencia de comandos para arrancar la secuencia de comandos!
  • O deberías ingresar el script compilado en el control de fuente (¡y mantenerlo sincronizado con las fuentes registradas!)
  • De repente, el script también tiene una configuración de compilación para el script adjunto. (¡Eso necesita ser mantenido!)

Además, va con la otra respuesta:

Probablemente usted también no quiera usar un lenguaje de script "en bruto" para crear sus scripts de compilación (entiendo que CMake manejaría las complejidades de C ++).

Lo que probablemente debería hacer es elegir uno de los Build . Sistemas . out . allí . y ver si uno se ajusta a su factura. capacidad de script / extensibilidad / play-nice-with-CMake / crossplatformness.

    
respondido por el Martin Ba 27.11.2017 - 16:27

Lea otras preguntas en las etiquetas