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.
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: Ссылка
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.
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.
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 - Ссылка
Tags und Links javascript performance variables ecmascript-harmony ecmascript-4