Laden...

C++/cli?

Erstellt von psyco vor 19 Jahren Letzter Beitrag vor 19 Jahren 4.478 Views
P
psyco Themenstarter:in
30 Beiträge seit 2004
vor 19 Jahren
C++/cli?

Hallo. Ich hab in einem C++ Forum von C++/CLI gelesen.
"C++/CLI ist der Nachfolger von Managed C++. Im Unterschied zu Managed C++ verzichtet C++/CLI auf die von vielen Programmierern als unschön empfundenen Sprach-Konstrukte mit mehreren Grundstrichen."

Nur welche IDE unterstützt diese Sprache bereits?
Die Visual C++ 2005 beta etwa?
Oder welche kann man dafür benutzen?

Danke

1.373 Beiträge seit 2004
vor 19 Jahren

VS.NET 2005 Beta bzw. VC++.NET 2005 Express Beta.

MfG VizOne

P
psyco Themenstarter:in
30 Beiträge seit 2004
vor 19 Jahren

Ok, danke

Außerdem hab ich gehört durch c++/cli erzeugter MSLI Code sei 25% schneller als der von anderen Sprachen, weil der Compiler ausgereifter oder optimierender ist oder so.
Stimmt das?

C
61 Beiträge seit 2004
vor 19 Jahren

Das kann ich mir nicht vorstellen, da C# eigentlich näher an MSIL dran ist ...

P
psyco Themenstarter:in
30 Beiträge seit 2004
vor 19 Jahren

"Ein weiterer Grund, warum mit C++/CLI erstellte Programme etwas schneller sind, als in anderen .NET-Sprachen erstellte Programme, ist der C-Compiler, den es im Vergleich mit anderen Sprachen wie z.B. C# schon viel länger gibt, und in den schon beträchtlich mehr Aufwand zur Optimierung des erzeugten Codes gesteckt wurde. Zur Zeit (2004) sind .NET-Programme, die mit C/CLI erstellt werden etwa 20 bis 25 Prozent schneller als andere."

Oder stimmt das nicht?

C
61 Beiträge seit 2004
vor 19 Jahren

Ich kanns mir wie gesagt nicht vorstellen, da C# dem MSIL-Code ziemlich ähnlich ist.

Falls es wirklich reines C++/CLI ist, und nicht direkt auf native Dinge zugreift, wird es nicht schneller als C# sein, zumal ja beide auf MSIL aufbauen und der C#-Compiler dann schon enorm schlecht sein müsste ...

Gibt's eine Quelle dazu?

N
4.644 Beiträge seit 2004
vor 19 Jahren

Original von cYaONE
Ich kanns mir wie gesagt nicht vorstellen, da C# dem MSIL-Code ziemlich ähnlich ist.

Das hätte ich gern mal genau erklärt!?

P
psyco Themenstarter:in
30 Beiträge seit 2004
vor 19 Jahren

Original von cYaONE
Ich kanns mir wie gesagt nicht vorstellen, da C# dem MSIL-Code ziemlich ähnlich ist.

Falls es wirklich reines C++/CLI ist, und nicht direkt auf native Dinge zugreift, wird es nicht schneller als C# sein, zumal ja beide auf MSIL aufbauen und der C#-Compiler dann schon enorm schlecht sein müsste ...

Gibt's eine Quelle dazu?

Ja : http://de.wikipedia.org/wiki/C-Plusplus/CLI

M
456 Beiträge seit 2004
vor 19 Jahren

Auf der IL Ebene glaube ich nicht, dass sich C++/CLI viel von C# unterscheidet, wenn es um Geschwindigkeit geht, denn die Transformation von C# nach IL bzw. C++/CLI nach IL, lässt auf dieser Stufe nicht so wahnsinnig viel Raum für Optimierungen.
Formal gesehen, ist die Übersetzung einer prozeduralen Programmiersprache in eine stackbasierende Sprache recht starr.

Mich würde schon interessieren, was der C++/CLI Compiler für Code erzeut, dass dieser 20-25 Prozent mehr Geschwindigkeit erreichen soll. Ein direkter Vergleich von IL Code, wäre hier wohl ganz sinnvoll.

Wenn es um die Ausführung geht, entscheidet vor allem der JIT, wie der IL Code letztlich wirklich für den Prozessor optimiert wird, weniger die Compilerebene.

20-25% sind für mich nur im Zusammenhang mit nativem x86-Code nachvollziehbar.

I am Jack's smirking revenge.
I am Jack's raging bile duct.
I am Jack's cold sweat.
I am Jack's complete lack of surprise.
I am Jack's broken heart.
I am Jack's wasted life.

_
416 Beiträge seit 2005
vor 19 Jahren

Hi,

also erstmal: Die Übersetzung in IL-Code hat eigentlich einen ziemlich großen Spielraum für Optimierungen. C# übersetzt imho den Code ja ziemlich stur. D.h. Punkt für Punkt. C++ Compiler sind aber schon seit langer Zeit intelligent genug den Quellcode selbst anzupassen um eine Geschwindigkeitsverbesserung zu erzielen. Bspw. automatisches Entscheiden ob eine Funktion als inline ausgeführt werden soll, wenn sie klein genug ist. Kontradiktorische if oder while statements werden imho auch weggelassen.

Oder ein kurzes C#-Beispiel:

ArrayList arr;
...
//Variante 1
tu irgendwas mit (int)arr[0];
arr[0]= (int)arr[0]+(int)arr[0]
drucke (int)arr[0];
arbeite noch ein wenig mit (int)arr[0]
...

//Variante 2
int wert = (int)arr[0];
tu irgendwas mit wert;
wert=wert+wert;
drucke wert;
arbeite noch ein wenig mit wert
arr[0]=wert;

Über den den Sinn dieses Beispiels lässt sich streiten 😉, was ich aber sagen will ist das Variante 2 einiges schneller sein sollte. Grund dafür ist das Boxing und Unboxing welches im ersten Fall 6 mal, im zweiten aber nur 2 mal nötig wird. Soll heißen: wenn der C++ Compiler sowas erkennt und behebt, kann dies schon zur leistungssteigerung führen. Wobei natürlich 5% schon viel wären. >15% dagegen eher unmöglich

N
4.644 Beiträge seit 2004
vor 19 Jahren

Original von tb
C# übersetzt imho den Code ja ziemlich stur. D.h. Punkt für Punkt. C++ Compiler sind aber schon seit langer Zeit intelligent genug den Quellcode selbst anzupassen um eine Geschwindigkeitsverbesserung zu erzielen.

Hmm, die Compilerimplementierungen kennst dann woher?

C
980 Beiträge seit 2003
vor 19 Jahren

Original von Noodles
Hmm, die Compilerimplementierungen kennst dann woher?

Den generierten IL Code kann man ja ansehen 😉

(habs mit dem Beispiel oben nicht versucht)

Allerdings ist der C# compiler meines Wissens gar nicht mal so schlecht (könnte das ohne Recherche aber höchstens mit irgendwelchen 2 Jahre alte MSDN .NET Shows mit Details belegen 😉 )

Beim Beispiel oben muss man auch aufpassen. Wenn die ArrayList nicht Block-lokal ist sind die beiden Versionen nicht gleichwertig - z.b. können theoretisch auch andere Threads interferieren. So einfach ist das ganze also nicht ... (aber klar, genau da ist im x86 C++ Compiler natürlich jede Menge Strategie drin)

_
416 Beiträge seit 2005
vor 19 Jahren

Original von Noodles
Hmm, die Compilerimplementierungen kennst dann woher?

Inside C# geht an einigen Stellen auf IL-Code ein.

Das Buch ist auch Bestandteil von MELL 2 (Microsoft Enterprise Learning Library). Für alle die die kostenlos bekommen können 🙂