2

Приведенный ниже комикс XKCD предполагает, что для компиляции кода требуется значительное количество времени (возможно, не достаточно времени для организации боя на мечах, но вы поняли идею). Однако с простыми кодами Java, над которыми я работал, компиляция 1000 строк в BlueJ занимает менее 2 секунд, а другие IDE, такие как Eclipse, в некоторой степени компилируются на лету.

Таким образом, при каких обстоятельствах (язык, сложность кода и т.д.) На сборку кода на самом деле может потребоваться много времени (скажем,> 1 минуты), или этот комикс просто использует творческие возможности (что, в отличие от xkcd).

2 ответа2

0

Есть много факторов, которые способствуют этому, но размер большой. Большинство современных систем сборки пытаются выполнить частичную компиляцию, когда вы изменяете код, так что создаются только измененные части. Однако некоторые инструменты не способны на это.

При компиляции миллионов строк кода .NET, разбросанных по сотням проектов, время компиляции становится довольно большим. При компиляции больших библиотек и компиляции собственного исходного кода, как это часто делается в нативном мире C/C++, вы также увеличите время компиляции.

Особенно в C и C++ время, потраченное на разбор заголовков, значительно. Это очень трудоемкий процесс ввода-вывода - многократно читать тысячи заголовков снова и снова. Это одна из причин, почему была создана технология скомпилированных заголовков. Конечно, SSD значительно ускоряет это.

Изменить: я забыл упомянуть, что сборки часто включают в себя специализированные генераторы кода или компиляторы DSL. Эти инструменты часто создаются на заказ собственными проектами, которые не так высоко оптимизированы, как широко используемые инструменты, поэтому они могут стать узким местом при интенсивном использовании.

0

С современными технологиями для компиляции потребовалась бы достаточно большая кодовая база. Но назад, когда динозавры (мэйнфреймы и большие мини-компьютеры - PDP 11/70, вспоминается 64 КБ памяти ядра) бродили по земле (середина 70-х), даже терминал, подключенный к единственному компьютеру для команды разработчиков программного обеспечения, был больше, чем сегодня настольные ПК. Если у вас было соединение со скоростью 9600 бод, вы были одним из немногих избранных - большинство из нас были благодарны за повышение до 2400! Машина распределялась по времени между подключенными пользователями, сокращая время в круговом режиме.

Когда приближался крайний срок, и каждый пытался скомпилировать свою часть целевой системы, даже время отклика терминальной связи могло пострадать. В серьезных случаях процессор тратит столько же времени на обмен заданиями с диска, сколько фактически обрабатывает их. В таких ситуациях время компиляции порядка нескольких минут не было редкостью.

Я помню подобное (хуже!) Разговор на этот мультфильм, около 3:30 ночи, когда приближался крайний срок. Кафедра была на 3 смены (сменно-дифференциальная? Да пошло оно!) поскольку проект был настолько ужасным, единственная машина для 25 SWE была так увязла. Меня вызвали за чтением бумажной книги на моем терминале, пытаясь не заснуть, ожидая завершения компиляции.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .