Почему моя IDE не выполняет фоновую компиляцию / сборку?


13

Сегодня я занимаюсь разработкой на довольно сложном компьютере, он имеет несколько ядер, SSD-накопителей и тому подобное. Тем не менее, большую часть времени я программирую на компьютере, ничего не делая. Когда мне нужно в лучшем случае скомпилировать и запустить / развернуть несколько сложный проект, это все равно занимает пару секунд. Почему? Теперь, когда мы все больше и больше живем в «век мгновений», почему я не могу нажать F5 в Visual Studio и сразу же запустить / развернуть мое приложение?

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

Люди склонны редактировать файлы в разных сборках, что если Visual Studio / IDE постоянно выполняет компиляцию / сборку всего, что я модифицировал, в любое время, чтобы это было уместно. Черт возьми, если они хотят продвинуться вперед, они могут сделать компиляцию для каждого класса. Компиляция может не работать, но тогда она может просто ничего не делать (кроме добавления сообщений об ошибках в окно ошибок).

Конечно, современный компьютер мог бы посвятить ядро ​​или два для этой задачи, и если кто-то нашел это раздражающим, это могло быть отключено выбором. Я знаю, что, вероятно, существует тысяча технических проблем и какое-то необычное теневое копирование, которые необходимо решить, чтобы это было беспроблемным и практичным, но это наверняка сделало бы программирование более плавным.

Есть ли практическая причина, почему этот сценарий невозможен? Будет ли изнашиваться постоянно пишущий двоичный файл слишком большим? Разве сборки не могут храниться в памяти до тех пор, пока они не будут развернуты / запущены?


Visual Studio делает это для vb.net и, по крайней мере, частично для c #. Это на самом деле точка в вечной дискуссии c # / vb.net: codinghorror.com/blog/2007/06/…
Матье

да, я посмотрел на эту статью. Это в основном в контексте анализа / компиляции сообщений об ошибках, и не так много для мгновенного развертывания / запуска приложений
Homde

@konrad, VB.NET также не предлагает фоновую компиляцию?
Pacerier

Ответы:


6

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


1
Ура Затмение!
MattC

Здорово, кто-нибудь этим пользуется? Есть ли разница?
Homde

2
Это имеет огромное значение. И это чрезвычайно полезно для быстрого программирования - оно может генерировать объявления методов посредством вызова, который вы пишете на лету. Я использовал его годами от разработки приложений Java до приложений Web 2.0 на основе Java, разработки и расширения ffmpeg (на C и C ++), PERL и Python. У них есть плагины для почти всех мыслимых языков.
Брайан

6

Задумывались ли вы о том, сколько нажатий клавиш вы нажимаете, прежде чем получить файл в состоянии, когда его можно скомпилировать? Серьезно, посмотрите, что произойдет, если вы попытаетесь скомпилировать класс f, класс fo, класс foo и т. Д. Когда вы хотите, чтобы среда IDE сообщала вам об исправлении опечатки, а не о том, чтобы просто закончить ввод? Я бы спросил, насколько хорошо вы продумали это, создавая что-то с нуля, потому что именно здесь я мог видеть, что это действительно очень больно.


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

2

Visual Studio не предоставляет средства автоматической компиляции. Но да, некоторые IDE, такие как Eclipse, выполняют автоматическую компиляцию при сохранении любого файла. Надеюсь, в будущих версиях Visual Studio Microsoft добавит эту функцию.


1

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


7
Это делает фоновый анализ . Это не то же самое, что полная компиляция.
Мейсон Уилер

да, конечно, но, кажется, они останавливаются на шаг. Если в любом случае выполняется некоторая компиляция / разбор, почему бы не пройти весь путь и не использовать его в процессе сборки / запуска?
Homde

1
@MKO: AFAIK, в большом количестве Ид, дерево разбора будет использован в процессе сборки (вместо того , чтобы повторно разбор для компилятора) , если источник не изменился , так как он был создан.
Анон.

1

Вы всегда можете разбить проект на предварительно скомпилированные компоненты. Я предпочитаю, чтобы мой компьютер компилировался по команде. Познавательное трение одного человека - это время размышления другого человека и получения кофе.


1

Если вы используете Visual Studio и разрабатываете на C # или VB Reshaper может сделать это за вас. http://www.jetbrains.com/resharper/ Я экономлю много времени, зная все места, где мои изменения интерфейса нарушают код без необходимости перекомпиляции вручную.

(Также я думаю, что Решарпер - это дерьмо и по многим другим причинам.)


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

1

Я не знаю, мне нравится собирать вещи. Я вроде как владею своим кодом и говорю компьютеру: « Ха! Давайте посмотрим, как вы отвергаете ЭТО! »

Затем я получаю ошибку компиляции, исправляю ее, затем: « Ха! Теперь давайте посмотрим, как вы отклоните ЭТО! »

Затем он компилируется, и я беру кофе. Приятно. :)


Чувствует себя хорошо ..... За исключением случаев, когда вам нужно сделать это 6500 раз за один день.
Pacerier

0

Примечание: это взято из моего опыта работы с Netbeans (Java), поэтому это может не относиться к Visual Studio

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

Проблема в том, когда вы хотите построить весь свой проект. Иногда я думаю, что не все ошибки могут быть обнаружены с помощью этой «живой» компиляции, поэтому она просто перестраивает все. Также может случиться так, что живой скомпилированный класс содержит дополнительную информацию, которая нужна IDE, но не должна распространяться в двоичном виде.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.