Gibt es in Perl 6 Untersuchungen zu Leistungseinbußen für Typen / Einschränkungen?

8

Im Gegensatz zu Perl 5 führte Perl 6 optionale Typisierung sowie Einschränkungen ein, z. B .:

%Vor%

Gab es Studien, die untersuchen, ob es Leistungseinbußen gibt und wie groß diese auf verschiedenen Perl 6-VMs sind, wenn diese Funktionen verwendet werden?

Ich bin auf der Suche nach etwas gut designed und Cross-VM.

    
DVK 08.02.2017, 15:21
quelle

2 Antworten

4

Die umfassendste und gut durchdachte Leistungsmessung für Perl 6 ist Ссылка konzentriert sich nicht auf die relative Leistung der optionalen Typisierung. Es hat jedoch Unterstützung für mehrere VM-Backends, so dass es ein guter Ausgangspunkt sein könnte.

    
donaldh 09.02.2017 10:46
quelle
3

Diese Antwort zielt darauf ab, @ donaldhs Antwort zu ergänzen, obwohl ich auch keine Forschung kenne, die für Perl 6-Typen / Typenbeschränkungen spezifisch ist.

Statische Typüberprüfung ist schnell

Im folgenden wird vom Compiler zum Zeitpunkt der Kompilierung ein Complex ~~ Real type-Test durchgeführt:

%Vor%

Beim Kompilieren des obigen Codes stellt der Rakudo-Compiler fest, dass number ist Complex - so erhalten Sie einen Kompilierzeit Typ Check-Fehler:

%Vor%

Im Laufe der Zeit können Perl 6-Compiler wie Rakudo ihre Compile-Time-Code-Analyse verbessern, was dazu führt, dass mehr Typprüfungen während der Kompilierung stattfinden, wie oben beschrieben.

Beachten Sie, dass die where -Klausel nicht einmal ausprobiert wurde. Es gibt null Strafe für nur Angabe where -Klauseln. Jeder Overhead aufgrund von where -Klauseln wird nur angewendet, wenn eine Variable / ein Wert die grundlegenden Typprüfungen überschreitet.

Die meisten dynamischen Typprüfungen sind auch schnell

Im folgenden überprüft der Compiler eine Complex ~~ Real Typüberprüfung bei Laufzeit :

%Vor%

Beim Kompilieren des obigen Codes macht der Rakudo-Compiler not zur Zeit der Kompilierung, dass number ist Complex . Zur Laufzeit wird die erste multi sub -Deklaration berücksichtigt und abgelehnt. Wie zuvor versucht es nicht einmal die where -Klausel. Stattdessen wird stattdessen der zweite multi sub erfolgreich aufgerufen.

Die bisherigen Beispiele sollten deutlich machen, dass es für die meisten Typprüfungen einen Leistungsabfall von null oder fast null gibt.

Native Typen

Theoretisch können native Typen für eine bessere Leistung verwendet werden:

%Vor%

In der Praxis wird die Angabe eines nativen Typs manchmal langsamer.

Wenn sich die Rakudo-Optimierung verbessert, sollte die int -Optimierung relativ zu Int konsistenter und signifikanter werden. Eine ähnliche Geschichte gilt für andere native skalare Typen und für native Arrays.

Zwangstypen

Perl 6 unterstützt "Zwangstypen".

Zum Beispiel akzeptiert Str(Int) Int oder einen Subtyp davon und konvertiert zu Str .

Wenn der innere Typ eines Zwangstyps übereinstimmt, wird der Compiler zusätzlich den Laufzeitaufwand für die Ausführung des Zwangskodes aufwenden.

where -Klauseln

Nach Abschluss der konventionellen statischen und dynamischen Typprüfung, wie oben beschrieben, werden alle anwendbaren where -Klauseln aufgerufen, bis einer von ihnen erfolgreich ist oder alle von ihnen fehlschlagen.

Ein Compiler kann where -Klauseln analysieren und erkennen, dass sie einem ausreichend einfachen statischen Ausdruck entsprechen (zB where Int | Str ) und diese Informationen verwenden, um den Laufzeitaufwand zu vermeiden, der durch das Ausführen von beliebigem Code entsteht. (Siehe @ Larrys Spekulationen über verwandte Themen .)

Der aktuelle Rakudo analysiert where -Klauseln nicht. Tatsächlich ruft es where -Klauseln öfter auf, als es unbedingt nötig ist.

Compiler

Die Leistung ist eine Funktion bestimmter Compiler / Backends.

Der primäre Perl 6-Compiler für 2017 war Rakudo / MoarVM. Es gab in der Vergangenheit andere Compiler, die wesentliche Teilmengen von Perl 6 kompiliert haben und werden es sicherlich wieder geben ; diese können zusätzliche Daten liefern.

"Optional Typing" vs "schrittweise Typisierung"

  

Perl 6 führte optionale Typisierung ein

Falls Sie sich entscheiden, im Internet nach verwandten Daten zu suchen ...

Perl 6 unterstützt Funktionen wie klassenbasierte Vererbung und Multi-Dispatch. Beide disqualifizieren Perl 6 von einem "Optional Typing" -System gemäß der Definition von

Wikipedia platziert stattdessen Perl 6 in der breiten Kategorie "Gradual Typing" und auch Larry Wall und doc.perl6. org.

    
raiph 10.02.2017 07:32
quelle

Tags und Links