Сколько времени занимает компиляция сложного кода

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

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

enter image description here

13
задан Blaine
09.03.2023 16:36 Количество просмотров материала 2960
Распечатать страницу

2 ответа

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

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

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

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

0
отвечен dss539 2023-03-11 00:24

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

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

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

0
отвечен JRobert 2023-03-11 02:41

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх