Bruno da Silva de Oliveira Hydra: Compilação Distribuída de código fonte Florianópolis SC Junho / 2004
Bruno da Silva de Oliveira Hydra: Compilação Distribuída de código fonte Orientador: Prof. Dr. Mario Dantas Co-orientador: M. Sc. Eduardo Kern Bacharelado em Cientista da Computação Departamento de Informática e Estatística Universidade Federal de Santa Catarina Florianópolis SC Junho / 2004
Rascunho do Trabalho de Final de Curso sob o título Hydra: Compilação Distribuída de código fonte, proposta por Bruno da Silva de Oliveira e revisado em 11 de junho de 2004, em Florianópolis, Santa Catarina, por: Prof. Dr. Mario Dantas Departamento de Informática e Estatística - UFSC Orientador M. Sc. Eduardo Kern ESSS - Engineering Simulation and Scientific Software Co-orientador
Sumário 1 Resumo p. 4 2 Introdução p. 5 3 Tema p. 6 3.1 Delimitação do Tema............................ p. 6 4 Justificativa p. 7 5 Objetivo p. 8 6 Metodologia p. 9 7 Resultados Esperados p. 10 Referências p. 11
4 1 Resumo A linguagem de programação C++, apesar de ser auto-nível e possibilitar a produção de um código de execução bastante eficiente, impõe ao desenvolvedor um custo relativamente alto: o tempo necessário para a compilação do seu código. Técnicas agora disponíveis, especialmente Template Metaprogramming, enquanto promovem a geração de código genérico, contribuem ainda mais para este custo. Este trabalho tem como o objetivo o estudo e a criação de uma ferramenta que distribua o processo de compilação entre várias máquinas conectadas através de uma rede local, diminuindo assim o tempo e os custos necessários para o mesmo.
5 2 Introdução As linguagens de programação C e C++ têm como vantagem serem linguagens de auto-nível e de gerarem código nativo de execução muito eficiente, sendo ideal para sistemas que possuem porções custosas em termos de recursos computacionais. Mas este poder possui um custo: a compilação do código fonte. A compilação do código fonte é o trabalho realizado por um programa (chamado de Compilador) de transformar o texto da linguagem de programação em uma representação binária que pode ser então executada pelo computador; este processo normalmente é bastante custoso, tanto em tempo de processamento quanto em memória, dificultando bastante o trabalho do desenvolvedor de software.
6 3 Tema O tema deste trabalho é o desenvolvimento de uma ferramenta que distribua o processo de compilação de arquivos fonte nas linguagens de programação C e C++ entre vários computadores conectados em uma rede local, com o objetivo de reduzir sensivelmente o tempo necessário. 3.1 Delimitação do Tema Apesar de na teoria o modelo da ferramenta suportar a compilação distribuída de outras linguagens de programação, o escopo deste trabalho se limita somente às linguagens C/C++. Suporte para outras linguagens envolve diferenças sutis, princialmente em como lidar com as dependências entre os vários arquivos de um projeto, e pode ser material para um estudo futuro.
7 4 Justificativa A indústria de desenvolvimento de software vêm evoluindo cada vez mais. O mercado é ágil, sendo necessário buscar técnicas que agilizem o desenvolvimento, reduzindo o custo e principalmente o tempo para a conclusão de um projeto. Boa parte do tempo de um desenvolvedor que utiliza as linguagens C ou C++ é gasto no processo de compilação. Em grandes projetos, é comum a compilação completa do sistema levar horas, podendo chegar a até dias em sistemas muito grandes. A redução deste tempo pode ser então uma solução simples e barata para reduzir o tempo total do software, já que o preço do tempo do desenvolvedor é muito maior que o custo com o equipamento disponível.
8 5 Objetivo O objetivo deste trabalho é implementar uma ferramenta que distribua o processo de compilação entre várias máquinas conectadas em uma rede local, reduzindo substancialmente o tempo total necessário. Essa ferramenta foi batizada de Hydra, em referência à besta mitológica de várias cabeças. Além de reduzir o tempo de compilação, a ferramenta deve possuir as seguintes características: 1. Multiplataforma - Trabalhar no maior número de sistemas operacionais possível. 2. Independência de Compilador - trabalhar com qualquer compilador C/C++, atendendo apenas alguns pré-requisitos, como conhecimento dos parâmetros compreendidos pelo compilador. 3. Não Obtrusivo - O Hydra deve alterar o mínimo possível a maneira como o programador trabalha, adaptando-se ao seu ambiente.
9 6 Metodologia O Hydra deverá ser implementado na linguagem de programação interpretada Python [Rossum 2004], que é uma linguagem de auto-nível, interpretada, orientada a objetos e de código aberto. Ela atende o requisito de ser multi-plataforma e possuir ferramentas para comunicação em rede. A comunicação de rede deverá ser implementada usando o pacote Pyro (Python Remote Objects) [Jong 2003], que é um avançado e poderoso sistema de Objetos Distribuídos, facilitando em muito os detalhes de comunicação em rede. Utilizando Pyro, o usuário somente codifica como se estivesse trabalhando com objetos locais, enquanto o pacote cuida de todo o trabalho de comunicação em rede.
10 7 Resultados Esperados Supõe-se que a compilação paralela em múltiplas máquinas deve reduzir consideravelmente o tempo de compilação, com cada máquina extra diminuindo o tempo de forma proporcional. No entanto um aproveitamento de 100% é considerado impossível ([distcc 2002]), por isso ganhos de 70% a 90% são esperados.
11 Referências [distcc 2002]DISTCC. http://distcc.samba.org/, 2002. [Jong 2003]JONG, I. de. Pyro. http://pyro.sourceforge.net/, 2003. [Rossum 2004]ROSSUM, G. van. Python. http://www.python.org, 2004.