我是一名C#/ .Net开发人员刚开始使用Android进行Java开发,并且使用Eclipse时我注意到它会随着你的编译进行编译,所以你不必等待程序构建。这看起来非常惊人,除非有些事情我不明白。
我想知道为什么C#和Visual Studio IDE不提供此功能?有原因吗?
答案 0 :(得分:18)
这与Java没有任何关系。它更像是Eclipse的一个特性。特别是,增量后台编译是所有Smalltalk IDE的标准功能,至少从1978年左右开始,甚至比Lisp IDE更长。
Eclipse 最初是,是一个用Smalltalk编写的Smalltalk IDE,至今仍由IBM的Smalltalk部门维护。因此,当IBM的Smalltalk部门开发自己的Java编译器时,他们自然会将其编写为增量和重入,就像他们的Smalltalk编译器一样。这个名为 Jikes 的编译器与Eclipse一起开源,并成为 ecj(Eclipse编译器for Java),支持所有增量动态编译, Eclipse JDT的语法突出显示,代码完成,类型推断和重构功能。
绝对没有理由认为C#也不可能。它不工作的原因是因为编译器不支持它,特别是编译器不是增量的。但这不是.NET或C#或Visual Studio的固有限制,这是C#编译器维护者的想象力的限制:传统上,Microsoft的所有编译器都是由C ++编译器团队用C ++编写的,而那些人根本就没有听说过渐进式编译。不是因为它们很愚蠢,而是因为在C ++社区中没有人关心它。
但是,例如,VB社区确实关心这些东西,因为他们习惯于使用VB Classic。因此,VB.NET编译器实际上支持增量构建,编辑和继续,IntelliSense,类型推断和重构。
当然,C#插件也支持很多东西,但它们不使用实际的C#编译器来做到这一点。相反,他们基本上不得不重新实现Visual Studio插件的一半编译器才能工作,但他们没有实现实际的代码生成后端,所以虽然插件的一部分“编译器”可以< / em>进行增量解析,语法突出显示,重构和编辑并继续,实际上不能,编译。
然而,C#的情况将会发生变化:编译器的责任被重新分配给相应的语言团队,C#团队目前正在重新实现编译器 in C#团队中的C#和。其中一个经常被讨论的重写结果将是编译器即服务功能,它允许您即时编译C#和/或表达式树的小片段,例如也可以经常演示C#REPL和C#脚本编写功能。
鉴于为了使REPL正常工作,编译器需要能够编译代码的,和代码的小的单个代码段,新的编译器应该是在Visual Studio C#插件中用来替换当前的一堆IntelliSense和语法高亮黑客,在Visual Studio中进行渐进式编译应该不会太难。
答案 1 :(得分:7)
在Java中,每个类都被编译成一个单独的类文件,因此在每次保存时编译小的代码单元非常容易。在.net中,您将一堆类编译成单个DLL,这在编译过程中速度较慢且需要更多逻辑。
BTW,这不是一种语言功能,它是一种IDE功能。并非所有的Java IDE都可以进行自动编译,如果你愿意,也可以在eclipse中禁用它。我相信Visual Studio有自动构建工具..答案 2 :(得分:1)
Resharper for VS的插件可以动态地为您提供编译错误,但不会为您提供自动构建器
答案 3 :(得分:0)
除了最简单的应用程序之外的其他任何内容都会导致大量的延迟,因为每次按键都会编译和链接。
VS确实具有智能感知和大量的动态语法和健全性检查,它可以为您提供autobuild的大部分优势而不会出现延迟。 (据说在VS2010中看起来似乎非常热情......)
答案 4 :(得分:0)