Javascript optional Typ Hinting

7

Wenn eine Programmiersprache statisch getippt wird, kann der Compiler die Speicherzuweisung genauer bestimmen und somit im Allgemeinen leistungsfähiger sein (mit allen anderen Dingen gleich).

Ich glaube, ES4 hat optionale Typhinweise eingeführt (von dem, was ich verstehe, hat Adobe durch Actionscript einen großen Anteil an seiner Spezifikation beigetragen). Unterstützt javascript offiziell Typhinweis als Ergebnis? Wird ES6 optionale Typenhinweise für native Variablen unterstützen?

Wenn Javascript Typhinweis unterstützt, gibt es irgendwelche Benchmarks, die zeigen, wie es sich in Bezug auf die Leistung auszahlt? Ich habe noch kein Open-Source-Projekt gesehen, das dies nutzt.

    
badunk 11.09.2012, 23:13
quelle

5 Antworten

13

Mein Verständnis, von vielen Javascript-Gesprächen auf den verschiedenen Seiten zu hören, ist, dass Typhinweisen nicht so viel helfen, wie die Leute denken.

Kurz gesagt, neigen die meisten Javascript-Objekte dazu, die gleiche "Form" zu haben, wenn Sie so wollen. Das heißt, sie haben die gleichen Eigenschaften in der gleichen Reihenfolge erstellt. Diese "Form" kann man sich als den "Typ" des Objekts vorstellen. Ein Beispiel:

%Vor%

Alle aus "Point" erstellten Objekte haben dieselbe "Form" und die neueren internen Javascript-Engines können einige ausgefallene Spiele machen, um schneller nachzuschauen.

In Chrome (vielleicht anderen) verwenden sie ein High-Bit-Flag, um anzuzeigen, ob der Rest der Zahl eine Ganzzahl oder ein Zeiger ist.

Mit all diesen schlauen Dingen, die passieren, bleibt nur noch die Eingabe für die menschlichen Programmierer. Ich für meinen Teil, wirklich mag sich keine Gedanken über den Typ machen und diese Funktion nicht benutzen.

Sie sind jedoch halbwegs korrekt. Typhinweis ist ein Teil von ActionScript 3 , der ein Derivat von ECMAScript ist - aber Hinting hat es nie in den Standard geschafft. AFAIK, außerhalb des Wunschdenkens, wurde nicht diskutiert.

Dieses Video beschreibt die Dinge viel detaillierter: Ссылка

    
Jeremy J Starcher 11.09.2012, 23:25
quelle
6

Ich bin spät dran, aber da dir wirklich niemand Fragen zu den Standards beantwortet hat, spring ich rein.

Ja, Typhinweis wurde als Teil von ECMAScript 4 diskutiert, und es sah so aus, als ob es die Zukunft von JavaScript sein würde ... bis ES4 den Staub gebissen hat. ECMAScript 4 wurde aufgegeben und nie abgeschlossen. ECMAScript 5 (der aktuelle Standard) enthielt nicht viele der Dinge, die für ECMAScript 4 geplant waren (einschließlich Typhinweis), und war wirklich nur eine schnell aufgepeppte Version des ECMAScript 3.1-Entwurfs - um einige hilfreiche Funktionen aus der Tür zu bekommen im Gefolge des vorzeitigen Ablebens von ES4.

Wie Sie bereits erwähnt haben, arbeiten sie jetzt daran, ECMAScript 6 zu erstellen (das einige total tolle Funktionen hat!), aber erwarten Sie nicht, Typhinweis zu sehen. Die Adobe-Leute haben sich bis zu einem gewissen Grad von dem ECMAScript-Komitee getrennt, und das ES-Komitee scheint nicht daran interessiert zu sein, es zurückzubringen (ich denke aus gutem Grund).

Wenn Sie etwas möchten, können Sie TypeScript ausprobieren. Es ist ein brandneues Microsoft-Projekt, das im Grunde ein Versuch ist, ES6 + -Typen zu sein. Es ist eine Obermenge von JavaScript (fast identisch mit Ausnahme der Einbeziehung von Typen), und es kompiliert zu ausführbaren JavaScript.

    
Nathan Wall 01.11.2012 05:56
quelle
4

JavaScript JIT-Compiler müssen einige ziemlich ausgefallene Dinge tun, um die Arten von Ausdrücken und Variablen zu bestimmen, da Typen für viele Optimierungen entscheidend sind. Aber die Autoren des JavaScript-Compilers haben die letzten fünf Jahre damit verbracht, all diese Arbeit zu erledigen. Die Compiler sind jetzt wirklich schlau. Optionale statische Typen würden daher die Geschwindigkeit eines typischen Programms nicht verbessern.

Überraschenderweise machen Typ-Anmerkungen in ActionScript manchmal den kompilierten Code langsamer , indem eine Typprüfung (oder implizite Konvertierung) erforderlich ist, wenn ein Wert von nicht typisiertem Code an typisierten Code übergeben wird.

Es gibt andere Gründe, warum Sie statische Typen in einer Programmiersprache verwenden möchten, aber das ECMAScript-Standardkomitee hat kein Interesse daran, sie zu JS hinzuzufügen.

    
Jason Orendorff 12.09.2012 00:03
quelle
4

ES7 (kommt nicht bald) hat ein neues Feature namens Wächter könnte derjenige sein, den Sie haben Fragen. Die Syntax ist jetzt ein wenig ähnlich zu ES4 und TypeScript. Alle benutzen : und hängen den Typ an die Variable an. Aber es bestätigt nicht die Syntax.

    
OOO 03.06.2014 04:25
quelle
0

Javascript ist prototypbasiert, so dass der "Typ" eines Objekts vollständig dynamisch ist und sich während seiner Lebensdauer ändern kann.

Sehen Sie sich die Ergebnisse von Ben Firshman bezüglich der Javascript-Performance in Bezug auf Objekttypen an - Ссылка

    
Keldon Alleyne 11.09.2012 23:46
quelle