Quanto tempo demora um código complexo a compilar?

1

O quadrinho XKCD abaixo sugere que o código leva um tempo significativo para ser compilado (talvez não haja tempo suficiente para encenar uma luta de espadas, mas você a ideia). No entanto, com os códigos Java simples em que trabalhei, são necessários menos de 2 segundos para compilar 1.000 linhas ou mais no BlueJ, e outros IDEs como o Eclipse parecem compilar dinamicamente de alguma forma.

Então, em que circunstâncias (linguagem, complexidade de código, etc) seria um pedaço de código realmente levar muito tempo (digamos, > 1 minuto) para compilar, ou este cômico simplesmente toma liberdades criativas (o que parece diferente de xkcd)? .

    
por Blaine 27.05.2017 / 17:02

2 respostas

0

Existem muitos fatores que contribuem para isso, mas o tamanho é grande. A maioria dos sistemas de compilação modernos tenta executar a compilação parcial ao alterar o código, de modo que apenas as partes alteradas sejam criadas. 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 se tornar bem grande. Ao compilar grandes bibliotecas enquanto também compila seu próprio código-fonte, como muitas vezes é feito no mundo C / C ++ nativo, você também aumentará seus tempos de compilação.

Especialmente com C e C ++, o tempo gasto analisando cabeçalhos é considerável. É um processo de E / S muito pesado para ler repetidamente milhares de cabeçalhos repetidamente. Esse é um dos motivos pelos quais a técnica de cabeçalhos pré-compilados foi criada. Claro, um SSD também acelera muito.

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

    
por 27.05.2017 / 22:50
0

Com a tecnologia atual, seria necessária uma base de código muito grande para precisar de um minuto para compilar. Mas quando os dinossauros (mainframes e grandes minicomputadores - PDP 11/70, 64K de memória central) se espalharam 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. PCs desktop. Se você tivesse uma conexão de 9600 bauds para ele, você era um dos poucos escolhidos - a maioria de nós estava grata por ter sido atualizada para 2400! A máquina era compartilhada no tempo entre os usuários conectados, tarefas de divisão de tempo na forma round-robin.

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

Eu me lembro de uma conversa semelhante (pior!) com aquele desenho animado, por volta das 3:30 da madrugada, uma noite, quando o prazo se aproximava. O departamento estava em 3 turnos (diferencial de turno? Parafuso!) Porque o projeto era tão ruim, a única máquina para 25 SWEs estava tão atolada. Fui chamado para ler um papel no meu terminal, tentando não dormir, enquanto esperava por uma compilação para completar.

    
por 19.09.2018 / 16:35

Tags