为什么 C#/VS 没有像 Java/Eclipse 那样的自动构建功能?

问题描述 投票:0回答:5

我是一名 C#/.Net 开发人员,刚刚开始 Android 的 Java 开发,使用 Eclipse 我注意到它可以随时编译,因此您无需等待程序构建。这看起来很神奇,除非发生了一些我不明白的事情。

我想知道为什么 C# 和 Visual Studio IDE 不提供此功能?有理由吗?

c# visual-studio
5个回答
20
投票

这与 Java 没有任何关系。它更像是 Eclipse 的一个功能。特别是,增量后台编译是所有 Smalltalk IDE 的标准功能,至少从 1978 年左右开始,甚至比 Lisp IDE 中的标准功能还要长。

Eclipse was 最初是一个 Smalltalk IDE,用 Smalltalk 编写,至今仍由 IBM 的 Smalltalk 部门维护。所以,当IBM的Smalltalk部门开发自己的Java编译器时,他们很自然地将其编写为增量和可重入的,就像他们的Smalltalk编译器一样。这个名为 Jikes 的编译器与 Eclipse 一起开源,并成为 ecj(Eclipse Compiler 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# 团队目前正在重新实现编译器

in

C# 和 within C#团队。这种重写的结果之一是编译器即服务功能,它允许您动态编译 C# 和/或表达式树的小片段,并且还支持例如经常演示 C# REPL 和 C# 脚本功能。 考虑到为了让 REPL 工作,编译器需要能够编译小的单独代码片段

无论如何

并且新的编译器应该在 Visual Studio C# 插件中使用来替换当前的代码堆有了 IntelliSense 和语法突出显示技巧,在 Visual Studio 中进行增量编译应该不会太难。


7
投票

顺便说一句,这不是语言功能,而是 IDE 功能。并非所有 Java IDE 都会自动编译,如果您愿意,您也可以在 Eclipse 中禁用它。我确信 Visual Studio 有自动构建工具..


1
投票


0
投票

VS 确实具有智能感知和大量即时语法和健全性检查,这为您提供了自动构建的大部分优势,而不会造成延迟。 (话说VS2010里好像热情得烦人……)

我知道,

0
投票
telerik

JustCode 是一种产品,通过提供解决方案范围的代码分析,远远超出了 VS 动态语法检查。我不认为我是世界上唯一一个曾经使用尝试构建来检查我是否包含了构建代码所需的所有内容的开发人员。使用 JustCode,您可以在此类事情上获得大量视觉帮助,而不必等待编译器告诉您错过了某些内容。

© www.soinside.com 2019 - 2024. All rights reserved.