Gibt es einen Grund, warum C # / VS keine Auto-Build-Funktion wie Java / Eclipse hat?

8

Ich bin ein C # /. Net-Entwickler, der gerade die Java-Entwicklung für Android begonnen hat, und mit Eclipse habe ich festgestellt, dass es kompiliert, wie Sie gehen, so dass Sie nie auf das Programm warten müssen. Das scheint ziemlich erstaunlich, es sei denn, dass etwas passiert, verstehe ich nicht.

Ich habe mich gefragt, warum C # und die Visual Studio-IDE diese Funktionalität nicht bieten? Gibt es einen Grund?

    
JimDaniel 11.09.2010, 19:29
quelle

5 Antworten

18

Das hat eigentlich nichts mit Java zu tun. Es ist mehr eine Eigenschaft von Eclipse. Insbesondere ist die inkrementelle Hintergrundkompilierung seit mindestens 1978 oder sogar länger als die in Lisp-IDEs eine Standardfunktion aller Smalltalk-IDEs.

Eclipse war ursprünglich eine Smalltalk-IDE, die in Smalltalk geschrieben wurde und bis heute von der Smalltalk-Abteilung von IBM gepflegt wird. Als die Smalltalk-Abteilung von IBM ihren eigenen Java-Compiler entwickelte, schrieb sie diesen natürlich wie ihre Smalltalk-Compiler inkrementell und reentrant. Und dieser Compiler namens Jikes war zusammen mit Eclipse Open-Source und wurde zum ecj (Eclipse Compiler für Java) , der alle inkrementellen On-The-Fly-Kompilationen unterstützt. Syntaxhervorhebung, Codevervollständigung, Typinferenz- und Refactoring-Funktionen von Eclipse JDT.

Es gibt absolut keinen Grund, warum dies auch für C # nicht möglich sein sollte. Der Grund, warum nicht funktioniert, ist, dass der Compiler das nicht unterstützt, insbesondere ist der Compiler nicht inkrementell. Aber das ist keine inhärente Einschränkung von .NET oder C # oder Visual Studio, das ist eine Einschränkung der Vorstellungskraft der C # -Compiler-Betreuer: Traditionell wurden alle Compiler bei Microsoft vom C ++ - Compiler-Team in C ++ geschrieben, und diese Leute haben es einfach nie getan hörte von inkrementeller Kompilierung. Nicht weil sie dumm sind, sondern weil sich in der C ++ Community niemand darum kümmert.

Aber zum Beispiel kümmert sich die VB-Gemeinschaft um diese Dinge, weil sie von VB Classic gewohnt sind. Der VB.NET-Compiler unterstützt also inkrementelles Erstellen, Bearbeiten und Fortfahren, IntelliSense, Typinferenz und Refactoring.

Natürlich unterstützt das C # -Plugin auch eine Menge von diesen Sachen, aber sie benutzen nicht den eigentlichen C # -Compiler, um das zu tun. Stattdessen mussten sie im Grunde die Hälfte des Compilers für das Visual Studio-Plugin neu implementieren, aber sie implementierten das eigentliche Code-Generierungs-Backend nicht, so dass zwar der "Compiler", der Teil des Plugins ist, kann / em> inkrementelles Parsing, Syntax-Highlighting, Refactoring und Edit-and-Continue, es kann nicht tatsächlich, compile .

Die Situation für C # wird sich jedoch ändern: Die Verantwortung für die Compiler wurde den jeweiligen Sprachteams neu zugewiesen, und das C # -Team ist gerade dabei, den Compiler in erneut zu implementieren C # und innerhalb des C # -Teams. Eines der oft diskutierten Ergebnisse dieser Neufassung wird die Compiler-as-a-Service-Funktion sein, die es Ihnen erlaubt, kleine Schnipsel von C # und / oder Expression Trees on-the-fly zu kompilieren, und die zum Beispiel auch die oft demonstrierte C # REPL und C # Scripting Fähigkeiten.

Da REPL funktioniert, muss der Compiler in der Lage sein, kleine individuelle Code-Snippets zu kompilieren auf jeden Fall , und , die der neue Compiler eigentlich sein soll Im Visual Studio C # -Plugin verwendet, um den aktuellen Stapel von IntelliSense- und Syntaxhervorhebungs-Hacks zu ersetzen, sollte es nicht zu schwierig sein, in Visual Studio eine inkrementelle Kompilierung zu erhalten.

    
Jörg W Mittag 12.09.2010, 00:29
quelle
7

In Java wird jede Klasse in eine separate Klassendatei kompiliert, so dass es sehr einfach ist, bei jedem Speichern kleine Codeeinheiten zu kompilieren. In .net kompilieren Sie eine Menge von Klassen in eine einzelne DLL, die langsamer ist und mehr Logik beim Kompilieren erfordert.

Übrigens, das ist keine Sprachfunktion, es ist eine IDE-Funktion. Nicht alle Java-IDEs kompilieren automatisch und Sie können es auch in Eclipse deaktivieren, wenn Sie möchten. Und ich bin mir sicher, dass es Auto-Build-Tools für Visual Studio gibt.

    
Nir Levy 11.09.2010 19:35
quelle
1

Resharper ein Plus für VS gibt Ihnen Kompilierungsfehler im laufenden Betrieb, aber kein Auto Builder

    
Rony 12.09.2010 00:33
quelle
0

Autobuilding alles andere als die trivialste Anwendung würde massive Verzögerungen verursachen, da es jedes Mal kompiliert und verbunden wird, wenn Sie einen Schlüssel drücken.

VS hat Intellisense und eine Menge on-the-fly Syntax- und Plausibilitätsprüfungen, die Ihnen die meisten Vorteile von Autobuild ohne die Verzögerungen bieten. (Ich habe gesagt, dass es in VS2010 verärgert enthusiastisch scheint ...)

    
FixerMark 11.09.2010 20:40
quelle
0

Nicht ein Auto-Builder, ich weiß, aber mit Telerik ist JustCode ist ein Produkt, das weit über die VS-Syntaxprüfung hinausgeht, indem es eine lösungsweite Codeanalyse bietet. Ich kann mir nicht vorstellen, dass ich der einzige Entwickler auf der Welt bin, der einen Build verwendet hat, um zu überprüfen, ob ich alle benötigten Dinge für die Erstellung meines Codes eingebaut habe. Mit JustCode erhalten Sie eine Menge visuelle Hilfe mit dieser Art von Sache, ohne auf den Compiler warten zu müssen, um Ihnen zu sagen, dass Sie etwas verpasst haben.

    
Stuart Hemming 11.09.2010 21:28
quelle

Tags und Links