Was sind die Vorteile (die Liste der möglichen Nachteile ist lang) der 100% verwalteten Entwicklung mit C ++ / CLI (kompilieren Sie also mit /clr:safe welche "... Assemblys generiert, wie die in ... C #")? Vor allem, wenn Sie sich mit C # beschäftigen (beachten Sie C ++ / CLI: Vorteile gegenüber C # und Gibt es einen Vorteil C ++ zu verwenden / CLI über entweder C ++ oder C #? sind meist verwaltete / nicht verwaltete Interop).
Zum Beispiel, hier sind ein paar von meinem Kopf:
C ++ - Stilreferenzen für verwaltete Typen , nicht so elegant wie vollständige nicht nullbare Referenzen, aber besser als nichts oder mithilfe eines Workarounds .
>Vorlagen, die leistungsfähiger als Generika sind
Präprozessor (dies kann ein Nachteil sein !, aber Makros können für die Codegenerierung nützlich sein)
Stack-Semantik für Referenztypen - automatisch Aufruf IDisposable :: Dispose ()
einfachere Implementierung von Dispose () über C ++ - Destruktor
C # 3.0 hat automatisch implementierte Eigenschaften hinzugefügt, so dass dies kein C ++ / CLI-Vorteil mehr ist.
Ich würde denken, dass der größte Vorteil der Managed / Unmanaged Interop ist. Das Schreiben von rein verwaltetem C ++ / CLI würde (zumindest für mich), ohne mit C # oder anderen .Net-Sprachen zu kommunizieren, scheint den Punkt gänzlich zu verfehlen. Ja, du könntest das tun, aber warum würdest du das tun?
Wenn Sie reinen verwalteten Code schreiben, sollten Sie C # nicht verwenden. Vor allem (wie Nobugs sagten), wenn VS2010 die IntelliSense-Unterstützung für C ++ / CLI löscht. Auch in VS2008 ist das IntelliSense für C ++ / CLI nicht so gut das C # IntelliSense; Aus Sicht des Entwicklers ist es also einfacher, in C # zu arbeiten / zu erforschen / zu refactorisieren als in C ++ / CLI.
Wenn Sie einige der C ++ - Vorteile, die Sie auflisten, wie den Präprozessor, Stack-Semantik und Templates, dann warum nicht C ++ verwenden?
Seltsam, ich mag C ++ / CLI, aber Sie haben genau die Funktionen aufgelistet, die ich nicht mag. Meine Kritik:
Nun, das ist vielleicht alles sehr subjektiv. Der Todesstoß kommt mit VS2010, es wird ohne IntelliSense-Unterstützung für C ++ / CLI ausgeliefert.
Wie andere hier, kann ich mir keine allgemeinen Fälle vorstellen, in denen ein klarer Vorteil existiert, so dass mein Denken sich situativen Vorteilen zuwandte - gibt es Fälle, in denen ein Vorteil in einem bestimmten Szenario besteht?
Vorteil: Nutzen Sie die C ++ - Fähigkeiten technischer Mitarbeiter in einem Rapid-Prototyping-Szenario.
Lassen Sie mich näher ausführen ...
Ich habe ziemlich viel mit Wissenschaftlern und (Nicht-Software-) Ingenieuren gearbeitet, die keine offiziell ausgebildeten Programmierer sind. Viele dieser Leute benutzen C ++ für die Entwicklung spezifischer Module, die High-End-Physik / Mathematik beinhalten. Wenn ein reines .NET-Modul in einem Rapid-Prototyping-Szenario benötigt wird und die Fähigkeiten des für das Modul verantwortlichen Wissenschaftlers / Ingenieurs C ++ sind, würde ich ihnen eine kleine Menge zusätzlicher Syntax beibringen ( public ref
, ^
und% co_de) % und %
) und sie dazu bringen, ihr Modul als 100% gemanagte C ++ / CLI DLL zu programmieren.
Ich erkenne, dass es eine ganze Menge möglicher "Ja, aber ..." Antworten gibt, aber ich denke, dass die Nutzung der C ++ - Fähigkeiten des technischen Personals ein möglicher Vorteil von C ++ / CLI ist.
Ich stimme dem zu, was Sie erwähnt haben, und als Beispiel für den Präprozessor-Verwendungszweck: Boost Preprocessor-Bibliothek zum Generieren einer Reihe von Typen basierend auf einer Liste von grundlegenden Typen z PointI32, PointF32 usw. in C ++ / CLI
Seltsam, ich mag C ++ / CLI, aber Sie haben genau die Funktionen aufgelistet, die ich nicht mag. Meine Kritik:
Nun, das ist vielleicht alles sehr subjektiv. Der Todesstoß kommt mit VS2010, es wird ohne IntelliSense-Unterstützung für C ++ / CLI ausgeliefert.
In C ++ / CLI können Sie Funktionen außerhalb von Klassen definieren, dies ist in C # nicht möglich. Aber ich weiß nicht, ob das ein Vorteil ist.
Ich würde denken, dass der größte Vorteil der Managed / Unmanaged Interop ist. Das Schreiben von rein verwaltetem C ++ / CLI würde (zumindest für mich), ohne mit C # oder anderen .Net-Sprachen zu kommunizieren, scheint den Punkt gänzlich zu verfehlen. Ja, du könntest das tun, aber warum würdest du das tun?
Wenn Sie reinen verwalteten Code schreiben, sollten Sie C # nicht verwenden. Vor allem (wie Nobugs sagten), wenn VS2010 die IntelliSense-Unterstützung für C ++ / CLI löscht. Auch in VS2008 ist das IntelliSense für C ++ / CLI nicht so gut das C # IntelliSense; Aus Sicht des Entwicklers ist es also einfacher, in C # zu arbeiten / zu erforschen / zu refactorisieren als in C ++ / CLI.
Wenn Sie einige der C ++ - Vorteile, die Sie auflisten, wie den Präprozessor, Stack-Semantik und Templates, dann warum nicht C ++ verwenden?
Was sind die Vorteile (die Liste der möglichen Nachteile ist lang) der 100% verwalteten Entwicklung mit C ++ / CLI (kompilieren Sie also mit /clr:safe welche "... Assemblys generiert, wie die in ... C #")? Vor allem, wenn Sie sich mit C # beschäftigen (beachten Sie C ++ / CLI: Vorteile gegenüber C # und Gibt es einen Vorteil C ++ zu verwenden / CLI über entweder C ++ oder C #? sind meist verwaltete / nicht verwaltete Interop).
Zum Beispiel, hier sind ein paar von meinem Kopf:
C ++ - Stilreferenzen für verwaltete Typen , nicht so elegant wie vollständige nicht nullbare Referenzen, aber besser als nichts oder mithilfe eines Workarounds .
>Vorlagen, die leistungsfähiger als Generika sind
Präprozessor (dies kann ein Nachteil sein !, aber Makros können für die Codegenerierung nützlich sein)
Stack-Semantik für Referenztypen - automatisch Aufruf IDisposable :: Dispose ()
einfachere Implementierung von Dispose () über C ++ - Destruktor
C # 3.0 hat automatisch implementierte Eigenschaften hinzugefügt, so dass dies kein C ++ / CLI-Vorteil mehr ist.
Wie andere hier, kann ich mir keine allgemeinen Fälle vorstellen, in denen ein klarer Vorteil existiert, so dass mein Denken sich situativen Vorteilen zuwandte - gibt es Fälle, in denen ein Vorteil in einem bestimmten Szenario besteht?
Vorteil: Nutzen Sie die C ++ - Fähigkeiten technischer Mitarbeiter in einem Rapid-Prototyping-Szenario.
Lassen Sie mich näher ausführen ...
Ich habe ziemlich viel mit Wissenschaftlern und (Nicht-Software-) Ingenieuren gearbeitet, die keine offiziell ausgebildeten Programmierer sind. Viele dieser Leute benutzen C ++ für die Entwicklung spezifischer Module, die High-End-Physik / Mathematik beinhalten. Wenn ein reines .NET-Modul in einem Rapid-Prototyping-Szenario benötigt wird und die Fähigkeiten des für das Modul verantwortlichen Wissenschaftlers / Ingenieurs C ++ sind, würde ich ihnen eine kleine Menge zusätzlicher Syntax beibringen ( %code% , %code% und% co_de) % und %code% ) und sie dazu bringen, ihr Modul als 100% gemanagte C ++ / CLI DLL zu programmieren.
Ich erkenne, dass es eine ganze Menge möglicher "Ja, aber ..." Antworten gibt, aber ich denke, dass die Nutzung der C ++ - Fähigkeiten des technischen Personals ein möglicher Vorteil von C ++ / CLI ist.
Sie können Enums und Delegates als generische Constraints in C ++ / CLI, aber nicht in C # haben.
Es gibt eine Bibliothek, um diese Einschränkungen in C # zu simulieren.
Ich stimme dem zu, was Sie erwähnt haben, und als Beispiel für den Präprozessor-Verwendungszweck: Boost Preprocessor-Bibliothek zum Generieren einer Reihe von Typen basierend auf einer Liste von grundlegenden Typen z PointI32, PointF32 usw. in C ++ / CLI
Man könnte sich die folgenden Anforderungen für ein hypothetisches Produkt vorstellen:
In einem solchen Szenario würde die Verwendung von zB C # für 1 Sie auf 2 und 3 stemmen, ohne dass Sie neu geschrieben werden. So könnte man in C ++ / CLI entwickeln, passend mit Makros und Templat-Shenanigans, um so viel wie normales C ++ wie möglich zu sehen, um Reqt 1 zu treffen, dann um Reqt 2 zu erreichen, müsste man (a) die Makros und Template-Shenanigans neu implementieren auf Pukka C ++ zu mappen und (b) .NET-Framework-Klassen zu implementieren, die in Pukka C ++ verwendet werden. Beachten Sie, dass (a) und (b) in Zukunft einmal verwendet werden könnten.
Der offensichtlichste Einwand wäre: "Warum nicht das Ganze in nativem C ++ machen?"; Nun, vielleicht gibt es viele gute Sachen in der riesigen .NET-Klassenbibliothek, die Sie verwenden möchten, um so schnell wie möglich auf den Markt zu kommen.
Alles ein bisschen dürftig, gebe ich zu, also bezweifle ich sehr, dass das jemals gemacht wurde, aber es wäre eine lustige Sache, es auszuprobieren!