Faz sentido escrever scripts de construção em C ++?

15

Estou usando o CMake para gerar meus projetos IDE / makefiles, mas ainda preciso chamar "scripts" personalizados para manipular meus arquivos compilados ou até gerar código.

Em projetos anteriores eu tenho usado o Python e tudo bem, mas agora estou tendo sérios problemas para gerenciar muitas dependências em dois projetos muito grandes que estou trabalhando, então eu quero minimizar as dependências em todos os lugares. / p>

Alguém sugeriu que eu usasse o C ++ para escrever meus scripts de construção em vez de adicionar uma dependência de linguagem apenas para isso. Os projetos templateselves já usam C ++ então tem várias vantagens que eu posso ver:

  • para construir o projeto inteiro, apenas um compilador C ++ e o CMake seriam necessários, nada mais (todas as outras dependências são C ou C ++);
  • Segurança do tipo C ++ (ao usar o C ++ moderno) torna tudo mais fácil para ficar "correto";
  • é também a língua que conheço melhor, por isso estou mais à vontade com ela, mesmo que consiga escrever um bom código Python;
  • ganho potencial na velocidade de execução (mas não acho que será realmente perceptível);

No entanto, acho que pode haver algumas desvantagens e não tenho certeza do impacto real, pois ainda não tentei:

  • pode demorar mais para escrever o código (o que disse que não tenho certeza porque sou eficiente o suficiente em C ++ para escrever algo que funcione rapidamente, então talvez para esse sistema não demoraria tanto para escrever) (compilação o tempo não deve ser um problema para este caso);
  • Devo supor que todos os arquivos de texto que eu vou ler como entrada estão em UTF-8, não tenho certeza se pode ser facilmente verificado em tempo de execução em C ++ e o idioma não irá verificar isso para você;
  • bibliotecas em C ++ são mais difíceis de gerenciar do que em linguagens de script;

Eu não tenho experiência e visão, então talvez eu esteja perdendo vantagens e desvantagens. Então a questão é: faz sentido usar o C ++ para isso? você tem experiências para relatar e você vê vantagens e desvantagens que podem ser importantes?

    
por Klaim 04.04.2012 / 16:34
fonte

4 respostas

24

Use o Python apenas.

Eu desenvolvo em C ++ e faço meus scripts de construção em Python, e acho difícil criar scripts em C ++:

  • O Python torna trivial manipular dicionários, listas, dicionários aninhados de dicionários de listas, etc. (Por exemplo, um dos meus scripts usa uma hierarquia de vários níveis de todas as minhas ferramentas, versões de ferramentas e versões de ferramentas 'caminhos'.) C ++ pode fazer o mesmo com modelos e classes personalizadas, mas é muito mais detalhado (o que se traduz em mais linhas de código, o que geralmente se traduz em menor produtividade).
  • O Python fornece bibliotecas e rotinas de alto nível, como o tratamento XML e JSON, o subprocesso e os.walk . Novamente, o C ++ pode fazer isso, mas é muito mais trabalhoso encontrar as bibliotecas, aprender suas APIs, montar corretamente as chamadas (que geralmente são de nível mais baixo), etc.
  • Os scripts de construção são uma atividade sem valor agregado (para emprestar um termo do lean). É melhor usar uma linguagem de alto nível quanto possível, para fazê-las o mais rápido possível, para voltar ao trabalho, o que beneficia seus usuários.
  • Na minha experiência, construir scripts tende a crescer de maneiras imprevistas. Mesmo que uma tarefa pareça inicialmente simples para o C ++, ela pode ficar complicada rapidamente. Quando um novo requisito surge, é muito mais fácil lidar com o manuseio em um script Python do que em C ++ (o que pode exigir a localização ou leitura de novas APIs de biblioteca, etc.).

Com relação às vantagens que você lista para o C ++:

  • Adicionar uma única dependência (Python) não deve complicar significativamente sua compilação. Já é padrão na maioria das instalações do Linux, por exemplo. Graças às bibliotecas de "baterias incluídas" do Python, pode até ser mais fácil gerenciar do que as bibliotecas C ++ das quais seus scripts de construção dependeriam.
  • O tipo de segurança que o C ++ oferece é mais útil para grandes projetos, não para pequenos scripts.
  • O Python complementa muito bem o C ++ (alto nível versus nível inferior, dinamicamente tipado versus estaticamente tipado, etc.) e pode até mesmo se integrar muito bem ao C ++ (graças a SWIG e Boost.Python) se você quiser fazer isso mais tarde , então vale a pena aprender para um programador C ++.
  • Como você disse, a velocidade de execução deve ser um problema.
por 04.04.2012 / 17:08
fonte
1

Acredito que esta seja uma questão específica de caso. Eu diria que não há resposta correta se faz sentido ou não usar o C ++ para construir scripts, a única maneira de descobrir isso é testá-lo na prática.

Pessoalmente, eu veria o Python superior ao C ++ por causa da melhor expressividade da linguagem e das ferramentas de biblioteca padrão mais fáceis (opinião pessoal, é claro) para gerenciar a tarefa de manipular arquivos binários e gerar código. É claro, bibliotecas sofisticadas desenvolvidas para a tarefa podem estar disponíveis, mas se não, eu pessoalmente teria apostado que o Python seria a resposta "mais frequente" - no geral.

    
por 04.04.2012 / 17:00
fonte
1

Não escreva scripts, você está duplicando esforços e reinventando rodas.

Use algo como SCONS ou até mesmo o Maven 3, que tem suporte para sistemas de compilação C ++ .

Um bom sistema de compilação, independentemente do idioma, não deve exigir lógica personalizada na forma de scripts para criar um artefato executável em funcionamento.

Se você tiver que escrever scripts para um sistema de compilação para personalizá-lo, não é um bom sistema de compilação. Escrever um plug-in para um sistema de compilação é uma história diferente, mas ainda assim deve ser muito particular para um ambiente / hardware, e deve ser algo que raramente é usado.

    
por 04.04.2012 / 18:49
fonte
0

Para focar na pergunta:

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

A resposta é simples não .

A resposta aceitada atualmente aumenta o zoom em python e lista um monte de preocupações válidas, mas eu gostaria de adicionar uma razão independente da linguagem:

Você realmente não quer fazer script em nada em qualquer linguagem compilada, se puder ajudar:

  • Você precisará de um script para fazer o bootstrap do script!
  • Ou você precisaria verificar o script compilado no controle de origem (e mantê-lo em sincronia com as fontes marcadas!)
  • O script também possui uma configuração de construção para o script anexado. (Isso precisa ser mantido!)

Além disso, indo com a outra resposta:

Provavelmente você também não quer usar uma linguagem de script "bruta" para criar seus scripts de construção (concluo que as complexidades do C ++ seriam tratadas pelo CMake).

O que você provavelmente deve fazer é escolher um dos Build . Sistemas . fora . . e veja se alguém se encaixa na sua conta. scriptability / extendability / play-nice-com-CMake / crossplatformness.

    
por 27.11.2017 / 16:27
fonte