Это не имеет ничего общего с 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.