Frage

Ich verstehe, dass Ironpython eine Implementierung von Python auf der .NET-Plattform ist wie IronRuby ist eine Implementierung von Ruby und F # ist mehr oder weniger OCaml.

Was kann ich nicht zu begreifen scheinen, ob diese Sprachen durchführen näher an ihre „Vorfahren“ oder näher zu so etwas wie C # in Bezug auf Geschwindigkeit. Zum Beispiel ist Ironpython irgendwie „kompiliert“ bis auf den gleichen Bytecode von C # verwendet und wird daher laufen genauso schnell?

War es hilfreich?

Lösung

Ironpython und IronRuby sind auf der Oberseite des DLR gebaut - dynamische Language Runtime - und an CIL (Bytecode von .NET verwendet) on the fly zusammengestellt. Sie sind langsamer als C # aber faaaaaaar schneller als ihre Pendants non-.NET. Es gibt keine anständige Benchmarks gibt, mein Wissen, aber Sie werden den Unterschied sehen.

Andere Tipps

Ironpython ist eigentlich die schnellste Python-Implementierung gibt. Für einige Definition von „schnellsten“, zumindest: der Startoverhead des CLR zum Beispiel ist großer im Vergleich zu CPython. Auch der optimierenden Compiler Ironpython hat, wirklich nur dann sinnvoll, wenn der Code mehrere Male ausgeführt wird.

IronRuby hat das Potenzial, so schnell Ironpython zu sein, da viele der interessanten Features, die Ironpython schnell zu machen, haben in die Dynamic Language Runtime extrahiert wurde, auf dem sowohl Ironpython und IronRuby (und Managed JavaScript Dynamic VB, Ironscheme, VistaSmalltalk und andere) sind eingebaut.

Im Allgemeinen ist die Geschwindigkeit einer Sprache Implementierung ist ziemlich unabhängig von den tatsächlichen Sprachfunktionen und mehr abhängig von der Anzahl der Ingenieurmannjahre, die in sie gehen. IOW:. Dynamische und statische spielt keine Rolle, Geld tut

z. B., ist Common Lisp eine Sprache, die noch dynamischer als Rubin- oder Python ist, und doch gibt es Common Lisp gibt Compiler aus, dass auch C für ihr Geld einen Lauf geben kann. Gute Smalltalk-Implementierungen laufen so schnell wie Java (was keine Überraschung ist, da die beiden großen JVMs, Sun HotSpot und IBM J9, sind eigentlich nur leicht modifizierte Smalltalk VMs) oder C ++. Allein in den letzten 6 Monaten, die großen JavaScript-Implementierungen (Mozilla Tracemonkey, Apfel SquirrelFish Extreme und das neue Kind auf dem Block, Google V8) gemacht haben ginormous Performance-Verbesserungen, 10x und mehr zu bringen, JavaScript Kopf -zu-Kopf mit nicht optimierten C.

Zur Zeit IronRuby ist ziemlich langsam in den meisten Grüßen. Es ist definitiv langsamer als MRI (Matz‘Ruby Implementation) insgesamt, obwohl in einigen Orten, die sie schneller sind.

hat IronRuby das Potenzial haben, viel schneller zu sein, obwohl ich sie zweifeln immer in der Nähe von C # in Bezug auf die Geschwindigkeit erhalten werden. In den meisten Fällen spielt es keine Rolle einfach nicht. Ein Datenbank-Aufruf wird wahrscheinlich 90% der Gesamtdauer einer Web-Anforderung bilden, zum Beispiel.

Ich vermute, dass das Team für sprach Vollständigkeit gehen, statt Leistung zuerst. Dies ermöglicht es Ihnen IronRuby und laufen die meisten Ruby-Programme, wenn 1.0 Schiffe, dann können sie verbessern perf laufen, wie sie gehen.

Ich vermute, Ironpython eine ähnliche Geschichte hat.

Sie haben die richtige Idee unter der Annahme, dass die Leistung einer modernen .NET-Implementierung zwischen dem dem Vorfahre sein wird und von C #. Der Grund dafür ist, dass C # ist sehr eng aufeinander abgestimmt selbst auf .NET.

F # ist ein Kinderspiel, weil C # und OCaml ähnliche Leistungseigenschaften haben selbst.

Ironpython ist viel schwieriger, weil Python und C # völlig unterschiedliche Leistungsmerkmale aufweisen. wann immer möglich In der Tat hängt die Antwort auf die Implementierung Ironpython selbst, die -Stil Bewertung ineffizient Python-Stil Auswertung in effiziente C # konvertieren wird sich bemühen. Erwarten Sie Ironpython im Allgemeinen viel langsamer als C # mit den occassional Spikes in das gleiche Gebiet sein. Sie können diesen Effekt finden Sie unter hier .

Cheers, Jon Harrop.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top