Wie teuer ist Typinferenz?

7

Ich bin definitiv mehr als begeistert von der Inferenz-Engine vom Typ Scala, aber in einer realen Umgebung:

  1. Wie viel Leistung ist zurück?

  2. Wann wird der Typ zur Kompilierungszeit oder zur Laufzeit abgeleitet?

flavian 09.12.2012, 05:37
quelle

4 Antworten

18

Scalas ausgeklügelte und mächtige Typen existieren nur (*) während der Kompilierungszeit: Sie werden von der Quelle (wo Sie sie geben) analysiert, abgeleitet, geprüft und schließlich verworfen. Das letzte klingt vielleicht unsinnig, aber es ist der Modus Operandi der JVM (siehe Typ löschen ) und ziemlich nützlich von einer Sprache Sicht des Designers.

Also, um Ihre Frage zu beantworten: Zur Laufzeit ist es egal, 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 ausgeliefert, die es dem Programm ermöglicht, auch zur Laufzeit auf seine Typinformation zuzugreifen. das gibt zusätzliche Freiheit - die, wenn sie verwendet wird, natürlich CPU-Zyklen zur Laufzeit verbrennt, aber keinen der oben genannten Punkte ändert.

    
Roland Kuhn 09.12.2012, 09:02
quelle
4
  

Wie viel Leistung ist zurück?

Die Laufzeit wird im Allgemeinen als vergleichbar mit Java bezeichnet. Die Kompilierungszeiten sind normalerweise länger als bei Java aufgrund der Komplexität des Compilers .

  

Wann wird der Typ zur Kompilierungszeit oder zur Laufzeit abgeleitet?

Zur Kompilierzeit.

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

    
Brian 09.12.2012 06:02
quelle
0

Dies wird in dieser Antwort von Martin Odersky erwähnt: Warum tut IntelliJ IDEA kompilieren Scala so langsam? "Tippfehler ist teuer, insbesondere wenn es um implizite Suche geht."

    
blue-sky 23.01.2014 16:39
quelle
-2

Die Frage ist, woher das Problem kommt, dass die Übersetzungszeiten in Scala länger sind als in Java. 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 Implicits.

    
OlliP 09.12.2012 14:25
quelle

Tags und Links