Quanto tempo leva para compilar um código complexo

Quanto tempo leva para compilar um código complexo

OXKCDa história em quadrinhos abaixo sugere que o código leva uma quantidade significativa de tempo para ser compilado (talvez não seja tempo suficiente para encenar uma luta de espadas, mas você entendeu). No entanto, com os códigos Java simples em que trabalhei, leva menos de 2 segundos para compilar cerca de 1.000 linhas no BlueJ, e outros IDEs, como o Eclipse, parecem compilar dinamicamente até certo ponto.

Então, em que circunstâncias (linguagem, complexidade do código, etc.) um pedaço de código realmente levaria muito tempo (digamos,> 1 minuto) para ser compilado, ou esta história em quadrinhos está simplesmente tomando liberdades criativas (o que parece diferente do xkcd).

insira a descrição da imagem aqui

Responder1

Existem muitos fatores que contribuem para isso, mas o tamanho é um grande problema. A maioria dos sistemas de construção modernos tentam realizar compilação parcial quando você altera o código, de modo que apenas as partes que foram alteradas sejam construídas. No entanto, algumas ferramentas não são capazes disso.

Ao compilar milhões de linhas de código .NET espalhadas por centenas de projetos, seu tempo de compilação começa a ficar bastante grande. Ao compilar grandes bibliotecas e ao mesmo tempo compilar seu próprio código-fonte, como geralmente é feito no mundo C/C++ nativo, você também aumentará o tempo de compilação.

Especialmente com C e C++, o tempo gasto na análise de cabeçalhos é considerável. É um processo muito pesado de E/S ler repetidamente milhares de cabeçalhos. Esta é uma das razões pelas quais a técnica de cabeçalhos pré-compilados foi criada. Claro, um SSD também acelera muito isso.

Editar: esqueci de mencionar que as compilações geralmente incluem geradores de código especializados ou compiladores DSL. Essas ferramentas geralmente são projetos internos personalizados que não são tão otimizados quanto as ferramentas amplamente utilizadas, portanto, podem se tornar um gargalo se forem muito usadas.

Responder2

Com a tecnologia atual, seria necessária uma base de código muito grande para precisar de um minuto para compilar. Mas na época em que os dinossauros (mainframes e grandes minicomputadores - PDP 11/70, vem à mente 64K de memória central) vagavam pela Terra (meados dos anos 70), até mesmo um terminal conectado ao único computador de uma equipe de software era maior do que o de hoje. computadores desktop. Se você tivesse uma conexão de 9600 baud, você seria um dos poucos escolhidos - a maioria de nós ficou grata por ter atualizado para 2400! O tempo da máquina era compartilhado entre os usuários conectados, dividindo o tempo dos trabalhos em rodízio.

Quando o prazo se aproximava e todos tentavam compilar sua parte do sistema de destino, até mesmo os tempos de resposta da comunicação do terminal seriam prejudicados. Em casos graves, a CPU gastava tanto tempo trocando tarefas do disco quanto processando-as. Nessas situações, tempos de compilação da ordem de muitos minutos não eram incomuns.

Lembro-me de uma conversa semelhante (pior!) À daquele desenho animado, por volta das 3h30 da manhã, quando o prazo se aproximava. O departamento estava em 3 turnos (diferencial de turno? Dane-se!) porque o projeto estava tão mal executado que a única máquina para 25 SWEs estava tão atolada. Fui chamado por ler um livro no meu terminal, tentando não adormecer, enquanto esperava a conclusão de uma compilação.

informação relacionada