¿Cuánto tiempo tarda en compilarse un código complejo?

¿Cuánto tiempo tarda en compilarse un código complejo?

ElXKCDEl cómic a continuación sugiere que el código requiere una cantidad significativa de tiempo para compilarse (tal vez no sea suficiente tiempo para organizar una pelea de espadas, pero se entiende la idea). Sin embargo, con los códigos Java simples en los que he trabajado, se necesitan menos de 2 segundos para compilar aproximadamente 1000 líneas en BlueJ, y otros IDE como Eclipse parecen compilarse sobre la marcha hasta cierto punto.

Entonces, ¿bajo qué circunstancias (lenguaje, complejidad del código, etc.) un fragmento de código realmente tardaría mucho tiempo (digamos, >1 minuto) en compilarse, o este cómic simplemente se está tomando libertades creativas (lo que parece diferente a xkcd)?

ingrese la descripción de la imagen aquí

Respuesta1

Hay muchos factores que contribuyen a esto, pero el tamaño es uno de los más importantes. La mayoría de los sistemas de compilación modernos intentan realizar una compilación parcial cuando se cambia el código, de modo que solo se construyan las partes que cambiaron. Sin embargo, algunas herramientas no son capaces de hacer esto.

Al compilar millones de líneas de código .NET repartidas en cientos de proyectos, el tiempo de compilación comienza a ser bastante largo. Al compilar bibliotecas grandes y al mismo tiempo compilar su propio código fuente, como se hace a menudo en el mundo nativo de C/C++, también aumentará los tiempos de compilación.

Especialmente con C y C++, el tiempo dedicado a analizar los encabezados es considerable. Es un proceso de E/S muy complicado para leer repetidamente miles de encabezados una y otra vez. Ésta es una de las razones por las que se creó la técnica de encabezados precompilados. Por supuesto, un SSD también acelera enormemente esto.

Editar: olvidé mencionar que las compilaciones a menudo incluyen generadores de código especializados o compiladores DSL. Estas herramientas suelen ser proyectos internos personalizados que no están tan optimizados como las herramientas más utilizadas, por lo que pueden convertirse en un cuello de botella si se utilizan mucho.

Respuesta2

Con la tecnología actual, se necesitaría una base de código bastante grande para necesitar incluso un minuto para compilar. Pero en la época en que los dinosaurios (mainframes y grandes minicomputadoras - PDP 11/70, me viene a la mente 64K de memoria central) vagaban por la Tierra (mediados de los años 70), incluso un terminal conectado a la única computadora para un equipo de software era más grande que el de hoy. PC de escritorio. Si tenía una conexión de 9600 baudios, era uno de los pocos elegidos: ¡la mayoría de nosotros agradecimos que nos actualizaran a 2400! La máquina se compartía en tiempo entre los usuarios conectados, dividiendo el tiempo en trabajos por turnos.

Cuando se acercaba una fecha límite y todos intentaban compilar su parte del sistema de destino, incluso los tiempos de respuesta de las comunicaciones terminales se veían afectados. En casos severos, la CPU pasó tanto tiempo intercambiando trabajos desde el disco como procesándolos. En esas situaciones, los tiempos de compilación del orden de muchos minutos no eran infrecuentes.

Recuerdo una conversación similar (¡peor!) a esa caricatura, alrededor de las 3:30 am una noche cuando se acercaba la fecha límite. El departamento estaba en 3 turnos (¿diferencial de turnos? ¡Al diablo con eso!) porque el proyecto estaba tan mal, la única máquina para 25 SWE estaba tan atascada. Me llamaron por leer un libro de bolsillo en mi terminal, tratando de no quedarme dormido, mientras esperaba que se completara una compilación.

información relacionada