Jim*_*iel 8 c# java compiler-construction
我是一名C#/ .Net开发人员刚刚开始Android的Java开发,并且使用Eclipse我注意到它随你编译,所以你不必等待程序构建.这似乎相当惊人,除非有一些事情我不明白.
我想知道为什么C#和Visual Studio IDE不提供此功能?有原因吗?
Jör*_*tag 18
这与Java没有任何关系.它更像是Eclipse的一个特性.特别是,增量后台编译是所有Smalltalk IDE的标准功能,至少从1978年开始,甚至比Lisp IDE中的更长.
Eclipse的是原本是Smalltalk的IDE,写在Smalltalk中,它仍然是这一天由IBM的Smalltalk的部门维护.因此,当IBM的Smalltalk部门开发自己的Java编译器时,他们自然会将其编写为增量和重入,就像他们的Smalltalk编译器一样.这个名为Jikes的编译器与Eclipse一起开源,并成为ecj(Java编译器for 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#团队.其中一个经常被讨论的重写结果将是编译器即服务功能,它允许您即时编译C#和/或表达式树的小片段,例如也可以经常演示C#REPL和C#脚本功能.
考虑到为了使REPL工作,编译器需要能够编译的代码个别小片段反正,和新的编译器应该在Visual Studio C#插件可以用来替代智能感知和语法高亮当前堆hacks,在Visual Studio中进行渐进式编译应该不会太难.
在Java中,每个类都被编译成一个单独的类文件,因此在每次保存时编译小的代码单元非常容易.在.net中,您将一堆类编译成单个DLL,这在编译过程中速度较慢且需要更多逻辑.
顺便说一句,这不是语言功能,它是一个IDE功能.并非所有的Java IDE都可以进行自动编译,如果你愿意,也可以在eclipse中禁用它.我相信Visual Studio有自动构建工具..