Любая причина, почему C # / VS не имеет функции автоматической сборки, как Java / Eclipse? - PullRequest
8 голосов
/ 11 сентября 2010

Я - разработчик на C # / .Net, который только начал разработку Java для Android, и, используя Eclipse, я заметил, что он компилируется по ходу работы, так что вам не придется ждать, пока программа соберется.Это кажется довольно удивительным, если только что-то не происходит, я не понимаю.

Мне было интересно, почему C # и Visual Studio IDE не предоставляют эту функциональность?Есть ли причина?

Ответы [ 5 ]

18 голосов
/ 12 сентября 2010

Это не имеет ничего общего с Java. Это больше особенность Eclipse. В частности, инкрементная фоновая компиляция является стандартной функцией всех IDE Smalltalk начиная с 1978 года или около того, и даже дольше, чем в Lisp IDE.

Eclipse изначально был средой разработки Smalltalk, написанной на Smalltalk, и до сих пор поддерживается подразделением IBM Smalltalk. Поэтому, когда подразделение IBM Smalltalk разработало собственный компилятор Java, они, естественно, написали, что он будет инкрементным и реинтегрирующим, как и их компиляторы Smalltalk. И этот компилятор, названный Jikes , был с открытым исходным кодом вместе с Eclipse и стал ecj (Eclipse Compiler для Java) , который обеспечивает всю добавочную компиляцию на лету, подсветку синтаксиса , завершение кода, вывод типов и возможности рефакторинга Eclipse JDT.

Нет абсолютно никаких причин, почему это не должно быть возможно и для C #. Причина, по которой он не работает, заключается в том, что компилятор не поддерживает его, в частности, компилятор не является инкрементным. Но это не врожденное ограничение .NET или C # или Visual Studio, это ограничение в воображении разработчиков компиляторов C #: традиционно все компиляторы в Microsoft были написаны на C ++ командой компиляторов C ++, а эти парни просто никогда слышал о пошаговой компиляции. Не потому, что они глупы, а потому, что в сообществе C ++ это никого не волнует.

Но, например, сообщество VB заботится об этом , потому что они привыкли к нему из VB Classic. Таким образом, компилятор VB.NET фактически поддерживает инкрементальное построение, редактирование и продолжение, IntelliSense, вывод типов и рефакторинг.

Конечно, плагин C # также поддерживает много таких вещей, но они не используют фактический компилятор C # для этого. Вместо этого им в основном пришлось заново реализовать половину компилятора, чтобы плагин Visual Studio работал, но они не реализовали реальный бэкэнд генерации кода, поэтому пока «компилятор», являющийся частью плагина , может делать инкрементальный разбор, подсветку синтаксиса, рефакторинг и редактировать и продолжать, он не может на самом деле, вы знаете, компилировать .

Однако ситуация с C # изменится: ответственность за компиляторы перешла к соответствующим языковым командам, а команда C # в настоящее время находится в процессе повторной реализации компилятора в C # и в пределах команды C #. Одним из часто обсуждаемых результатов этого переписывания будет функция Compiler-as-a-Service, которая позволяет вам на лету компилировать небольшие фрагменты C # и / или Expression Trees, которые, к примеру, приводят в действие также часто демонстрирует возможности C # REPL и C # Scripting.

Учитывая, что для работы REPL, компилятор должен иметь возможность компилировать небольшие отдельные фрагменты кода , в любом случае , и , предполагается использовать новый компилятор в плагин Visual Studio C # для замены текущей кучи IntelliSense и хаков с подсветкой синтаксиса, не должно быть слишком сложно начать инкрементную компиляцию в Visual Studio.

7 голосов
/ 11 сентября 2010

В Java каждый класс компилируется в отдельный файл класса, поэтому очень легко компилировать небольшие блоки кода при каждом сохранении.В .net вы собираете несколько классов в одну DLL, которая медленнее и требует больше логики в процессе компиляции.

Кстати, это не языковая функция, а функция IDEНе все java IDE автоматически компилируются, и вы также можете отключить их в eclipse, если хотите.И я уверен, что есть инструменты автоматической сборки для Visual Studio ..

1 голос
/ 12 сентября 2010

Resharper с подключением для VS выдает ошибки компиляции на лету, но не компоновщик

0 голосов
/ 12 сентября 2010

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

0 голосов
/ 12 сентября 2010

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

VS действительно имеет intellisense и много проверок синтаксиса и исправности на лету, что дает вам большинство преимуществ автоматической сборки без задержек. (сказав, что в VS2010 он выглядит досадно восторженным ...)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...