Dynamische .NET-Sprachperformance?

8

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

Was ich nicht zu begreifen vermag, ist, ob diese Sprachen hinsichtlich ihrer Geschwindigkeit näher an ihren "Vorfahren" oder näher an etwas wie C # sind. Zum Beispiel ist IronPython irgendwie auf den gleichen Bytecode "kompiliert", der von C # verwendet wird und daher genauso schnell läuft?

    
Mike B 28.09.2008, 04:06
quelle

4 Antworten

9

IronPython und IronRuby sind auf der DLR - dynamic language runtime - aufgebaut und werden im Handumdrehen nach CIL (dem von .NET verwendeten Bytecode) kompiliert. Sie sind langsamer als C #, aber faaaaaaar schneller als ihre Nicht-.NET-Gegenstücke. Es gibt meines Wissens keine vernünftigen Benchmarks, aber Sie werden den Unterschied sehen.

    
Cody Brocious 28.09.2008, 04:10
quelle
7

IronPython ist tatsächlich die schnellste Python-Implementierung. Für eine Definition von "am schnellsten" zumindest: der Startup-Overhead der CLR zum Beispiel ist im Vergleich zu CPython riesig . Auch der optimierende Compiler IronPython hat wirklich nur Sinn, wenn Code mehrfach ausgeführt wird.

IronRuby hat das Potenzial, so schnell IronPython zu sein, da viele der interessanten Features, die IronPython schnell machen, in die Dynamic Language Runtime extrahiert wurden, auf der sowohl IronPython als auch IronRuby (und Managed JavaScript, Dynamic VB, IronScheme, VistaSmalltalk und andere) sind gebaut.

Im Allgemeinen ist die Geschwindigkeit einer Sprachimplementierung ziemlich unabhängig von den tatsächlichen Sprachmerkmalen und hängt mehr von der Anzahl der technischen Mannjahre ab, die darin enthalten sind. IOW: Dynamisch vs. Statisch ist egal, Geld macht's.

ZB Common Lisp ist eine Sprache, die noch dynamischer als Ruby oder Python ist, und doch gibt es Common Lisp Compiler, die C sogar für sein Geld rennen lassen. Gute Smalltalk-Implementierungen laufen so schnell wie Java (was nicht verwunderlich ist, da beide großen JVMs, Sun HotSpot und IBM J9, nur geringfügig modifizierte Smalltalk-VMs sind) oder C ++. In den letzten 6 Monaten haben die wichtigsten JavaScript-Implementierungen (Mozilla TraceMonkey, Apple SquirrelFish Extreme und das neue Kind auf dem Block, Google V8) ginormous Leistungsverbesserungen, 10x und mehr, gebracht, um JavaScript-Kopf zu bringen mit unoptimierten C-Kopf.

    
Jörg W Mittag 28.09.2008 05:57
quelle
1

Gegenwärtig ist IronRuby in vieler Hinsicht ziemlich langsam. Es ist definitiv langsamer als die MRT (Matz 'Ruby Implementation) insgesamt, obwohl sie an manchen Stellen schneller sind.

IronRuby hat das Potential, viel schneller zu sein, obwohl ich bezweifle, dass sie jemals in der Nähe von C # in Bezug auf Geschwindigkeit kommen werden. In den meisten Fällen ist es einfach egal. Ein Datenbankaufruf macht beispielsweise 90% der Gesamtdauer einer Webanfrage aus.

Ich vermute, dass das Team zuerst auf Vollständigkeit der Sprache und nicht auf Leistung setzt. Dadurch können Sie IronRuby & amp; lade die meisten Ruby-Programme, wenn 1.0 Schiffe, dann können sie Perf verbessern, wie sie gehen.

Ich vermute, IronPython hat eine ähnliche Geschichte.

    
Ben Scheirman 28.09.2008 04:11
quelle
1

Sie haben die richtige Idee, wenn Sie davon ausgehen, dass die Leistung einer modernen .NET-Implementierung zwischen der des Vorfahren und von C # liegt. Der Grund ist, dass C # sehr eng an .NET selbst angepasst ist.

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

IronPython ist viel schwieriger, weil Python und C # sehr unterschiedliche Leistungsmerkmale haben. Tatsächlich hängt die Antwort von der IronPython-Implementierung selbst ab, die sich bemühen wird, ineffiziente Python-Stil-Bewertung in eine effiziente C # -Stil-Bewertung umzuwandeln, wann immer dies möglich ist. Erwarte, dass IronPython im Allgemeinen viel langsamer als C # mit gelegentlichen Spikes in dasselbe Gebiet ist. Sie können diesen Effekt hier sehen.

Prost, Jon Harrop.

    
Jon Harrop 19.10.2008 09:51
quelle

Tags und Links