Ha senso scrivere script di compilazione in C ++?

15

Sto usando CMake per generare i miei progetti IDE / makefile, ma ho ancora bisogno di chiamare "script" personalizzati per manipolare i miei file compilati o anche generare codice.

Nei progetti precedenti ho usato Python ed era OK, ma ora sto avendo grossi problemi a gestire molte dipendenze in due progetti molto grandi su cui sto lavorando, quindi voglio minimizzare le dipendenze ovunque.

Qualcuno mi ha suggerito di usare C ++ per scrivere i miei script di compilazione invece di aggiungere una dipendenza dalla lingua solo per quello. I progetti utilizzano già C ++, quindi ci sono diversi vantaggi che posso vedere:

  • per costruire l'intero progetto, solo un compilatore C ++ e CMake sarebbero necessari, nient'altro (tutte le altre dipendenze sono C o C ++);
  • La sicurezza del tipo C ++ (quando si utilizza il C ++ moderno) rende tutto più semplice da ottenere "corretto";
  • è anche la lingua che conosco e meglio mi sento più a mio agio anche se sono in grado di scrivere un buon codice Python;
  • potenziale guadagno in termini di velocità di esecuzione (ma non credo che sarà davvero percepibile);

Tuttavia, penso che potrebbero esserci alcuni inconvenienti e non sono sicuro del reale impatto in quanto non ho ancora provato:

  • potrebbe essere più lungo per scrivere il codice (che dice che non sono sicuro perché sono abbastanza efficiente in C ++ per scrivere qualcosa che funzioni velocemente, quindi forse per questo sistema non sarebbe così lungo scrivere) (compilazione il tempo non dovrebbe essere un problema per questo caso);
  • Devo supporre che tutti i file di testo che leggerò come input siano in UTF-8, non sono sicuro che possa essere facilmente controllato in runtime in C ++ e la lingua non lo controllerà per te;
  • le librerie in C ++ sono più difficili da gestire rispetto ai linguaggi di scripting;

Mi manca esperienza e forsight quindi forse mi mancano vantaggi e svantaggi. Quindi la domanda è: ha senso usare C ++ per questo? hai esperienze da segnalare e vedi vantaggi e svantaggi che potrebbero essere importanti?

    
posta Klaim 04.04.2012 - 16:34
fonte

4 risposte

24

Usa solo Python.

Sviluppo in C ++ e faccio i miei script di compilazione in Python, e troverei doloroso creare script in C ++:

  • Python rende banale la manipolazione di dizionari, elenchi, dizionari nidificati di dizionari di elenchi, ecc. (Ad esempio, uno dei miei script usa una gerarchia multilivello di tutti i miei strumenti, versioni di strumenti e versioni di strumenti 'percorsi.) C ++ può fare lo stesso con i modelli e le classi personalizzate, ma è molto più verboso (che si traduce in più righe di codice, che generalmente si traduce in una minore produttività).
  • Python fornisce librerie e routine di alto livello come la sua gestione XML e JSON, subprocesso e os.walk . Di nuovo, C ++ può farlo, ma è molto più difficile trovare le librerie, imparare le loro API, assemblare correttamente le chiamate (che sono spesso di livello più basso), ecc.
  • Gli script di build sono un'attività a valore zero (per prendere in prestito un termine da lean). È meglio usare il più alto livello possibile di linguaggio, per farli terminare il più rapidamente possibile, per tornare al lavoro a vantaggio degli utenti.
  • Nella mia esperienza, la creazione di script tende a crescere in modi imprevisti. Anche se un'attività sembra inizialmente semplice per C ++, può diventare complicata in fretta. Quando si presenta un nuovo requisito, spesso è molto più semplice affrontare la gestione in uno script Python piuttosto che farlo in C ++ (che potrebbe richiedere la ricerca o la lettura su nuove API di libreria, ecc.).

Per quanto riguarda i vantaggi elencati per C ++:

  • L'aggiunta di una singola dipendenza (Python) non dovrebbe complicare in modo significativo la compilazione. Ad esempio, è già standard nella maggior parte delle installazioni Linux. Grazie alle librerie di "batterie incluse" di Python, potrebbe anche essere più semplice da gestire rispetto alle librerie C ++ da cui dipendono gli script di compilazione.
  • La sicurezza del tipo fornita da C ++ è molto utile per progetti di grandi dimensioni, non per piccoli script.
  • Python completa molto bene C ++ (alto livello versus di livello inferiore, digitato dinamicamente rispetto a quello statico, ecc.) e può anche integrarsi con C ++ molto bene (grazie a SWIG e Boost.Python) se in seguito vuoi farlo , quindi vale la pena imparare per un programmatore C ++.
  • Come hai detto, la velocità di esecuzione dovrebbe essere non omogenea.
risposta data 04.04.2012 - 17:08
fonte
1

Credo che questa sia una domanda specifica del caso. Direi che non esiste una risposta corretta se ha senso o non usare C ++ per gli script di build, l'unico modo per capirlo è provarlo nella pratica.

Personalmente vedrei Python superiore a C ++ per via della migliore espressività del linguaggio e più facile (opinione personale, ovviamente) strumenti di libreria standard per gestire il compito di manipolare file binari e generare codice. Naturalmente, potrebbero essere disponibili librerie sofisticate per l'attività, ma in caso contrario, scommetterei personalmente che Python fosse la risposta "più spesso corretta" - in generale.

    
risposta data 04.04.2012 - 17:00
fonte
1

Non scrivere script tu stesso, stai duplicando gli sforzi e reinventando le ruote.

Usa qualcosa come SCONS o anche Maven 3 che ha supporto per i sistemi di compilazione C ++ .

Un buon sistema di compilazione, indipendentemente dalla lingua, non dovrebbe richiedere una logica personalizzata sotto forma di script per costruire un artefatto eseguibile funzionante.

Se devi scrivere script per un sistema di build per personalizzarlo, non è un buon sistema di build. Scrivere un plugin per un sistema di compilazione è una storia diversa, ma comunque dovrebbe essere molto particolare per un ambiente / hardware, e dovrebbe essere qualcosa a cui raramente viene fatto ricorso.

    
risposta data 04.04.2012 - 18:49
fonte
0

Per mettere a fuoco sulla domanda:

Does it make sense to write build scripts in C++?

La risposta è un semplice no .

La risposta attualmente accettata fa lo zoom in python ed elenca un sacco di problemi validi, ma vorrei aggiungere un motivo indipendente dalla lingua:

In realtà non vuoi scrivere nulla in qualsiasi linguaggio compilato se puoi aiutarlo:

  • Avrai bisogno di uno script per avviare lo script!
  • O avresti bisogno di controllare lo script compilato nel controllo del codice sorgente (e tenerlo sincronizzato con le fonti archiviate!)
  • Lo script ha anche improvvisamente una configurazione di build per lo script allegato. (Che deve essere mantenuto!)

Inoltre, andare con l'altra risposta:

Probabilmente inoltre non vuoi usare un linguaggio di scripting "grezzo" per creare i tuoi script di build (ho capito che le complessità del C ++ sarebbero state gestite da CMake).

Ciò che probabilmente dovrebbe fare è scegliere uno dei Build . Sistemi . out . . e vedere se uno si adatta al tuo conto. scriptability / extendability / play-nice-with-CMake / crossplatformness.

    
risposta data 27.11.2017 - 16:27
fonte

Leggi altre domande sui tag