2012-12-09 4 views
7

Ich bin auf jeden Fall mehr als begeistert von der Inferenzmaschine Scala Typ, aber in einer realen Umgebung:Wie teuer ist Typschluss?

  1. Wie viel von einem Performance Nachteil ist es?

  2. Wann wird der Typ abgeleitet, zur Kompilierzeit oder zur Laufzeit?

+7

Kurz gesagt: 1. Keine. 2. Kompilierzeit. – ziggystar

Antwort

18

Scalas ausgeklügelte und leistungsstarke Typen existieren nur (*) während der Kompilierzeit: Sie werden von der Quelle (wo Sie sie geben) analysiert, abgeleitet, geprüft und schließlich verworfen. Der letzte mag unsinnig klingen, aber es ist der Modus Operandi der JVM (siehe type erasure) und ziemlich nützlich aus der Sicht eines Sprachdesigners.

So, um Ihre Frage zu beantworten: zur Laufzeit macht es keinen Unterschied, ob der Typ explizit angegeben oder abgeleitet wurde, der einzige Unterschied besteht darin, wie lange es dauert, das Programm zu kompilieren.

(*) Die Version 2.10 wird mit einer Reflektionsbibliothek geliefert, die es dem Programm ermöglicht, auch zur Laufzeit auf seine Typinformation zuzugreifen; das gibt zusätzliche Freiheit - die, wenn verwendet, natürlich CPU-Zyklen zur Laufzeit verbrennt - ändert jedoch keinen der oben genannten Punkte.

4

Wie viel von einem Performance Nachteil ist es?

Die Laufzeitleistung wird allgemein mit Java vergleichbar sein. Die Kompilierungszeiten sind typischerweise länger verglichen mit Java due to the complexity of the compiler.

Wann wird der Typ abgeleitet, zur Kompilierzeit oder zur Laufzeit?

Zur Kompilierzeit.

In diesem video von ca. 8:50 bis 12:50 Uhr Martin berührt die Verwendung in "realen" Umgebungen und Leistung. Er stellt fest, dass es viele Unternehmen gibt, die Scala von kleinen Startups bis hin zu großen Unternehmen nutzen.

+5

Sie sollten klarstellen, dass sich die Art der Rückschlüsse nicht negativ auf die Leistung auswirkt. –

+0

@KimStebel guter Punkt, in der Tat tritt die einzige spürbare Performance negativ zur Kompilierzeit auf; Der Compiler selbst ist natürlich völlig unberührt, es könnte sich weniger darum kümmern, dass du dort wartest. – virtualeyes

-2

Die Frage ist, woher das Problem mit den Kompilierzeiten in Scala kommt, die länger als in Java sind. Schwer für mich zu sagen, da ich kein Compilerbauer bin. Was ich sagen kann ist, dass Typinferenz in Kotlin offensichtlich nicht teuer ist und auch nicht in Groovy2.0. Was Scala verlangsamt, muss etwas anderes sein als die Suche nach Implikationen.

+1

Groovy wird dynamisch typisiert und verwendet keine Typinferenz. Alle Typen werden zur Laufzeit aufgelöst. Scala löst alle Typen zur Kompilierzeit auf. –

+0

Nein, nicht seit Groovy2.0, wo Sie eine Methode oder eine Klasse> statisch OlliP

+0

Was Scala länger als andere Sprachen kompilieren lässt, ist die Suche nach implicits und dem sehr strikten Typensystem, bei dem viel mehr Übereinstimmungsarbeit geleistet werden muss als in Sprachen mit einem schwächeren Typ System. – OlliP