Schnellste ECMAScript-Engine auf dem Markt ‘für Opera

Entwickler Jens Lindström schreibt auf dem Opera Core Concerns Blog, dass ein kleines Team von Entwicklern und Testern an der Implementierung eines neuen ECMAScript / JavaScript-Engine für Opera in den letzten Monaten mit dem Namen “Carakan” gearbeitet habe.

Das neue Projekt zielt darauf ab, “die schnellste ECMAScript-Engine auf dem Markt zu entwickeln”.

schreibt Lindström

Als Opera die aktuelle ECMAScript-Engine, genannt Futhark, wurde zuerst in einer öffentlichen Version veröffentlicht, war es der schnellste Motor auf dem Markt. Dieser Motor wurde entwickelt, um Code-Fußabdruck und Speicherverbrauch zu minimieren, anstatt die maximale Ausführungsgeschwindigkeit zu erreichen. Das ist traditionell ein richtiger Kompromiss auf vielen Plattformen, auf denen Opera läuft. Das Web ist jedoch ein verändertes Umfeld, und die erweiterten Webanwendungen von morgen werden eine schnellere ECMAScript-Ausführung erfordern, so dass wir nun die Herausforderung angenommen haben, die schnellste ECMAScript-Engine auf dem Markt zu entwickeln.

Verbesserungen auf dem vorherigen Motor kommen in drei Hauptbereiche

Der Registerzuweiser ist entworfen, um architekturunabhängig zu sein, und ebenso ist das Codeerzeugungs-Frontend, bei dem die meisten komplizierten Entscheidungen getroffen werden. Wir haben zunächst ein Backend für 32- und 64-Bit x86 implementiert, aber einige Vorarbeiten haben bereits begonnen, nativen Code für andere CPU-Architekturen wie ARM zu generieren. […]

Zusätzlich zum Generieren von nativem Code aus dem regulären ECMAScript-Code generieren wir auch nativen Code, der die Anpassung einfacher regulärer Ausdrücke durchführt. Dies verbessert die Leistung viel, wenn Sie nach Übereinstimmungen mit einfachen regulären Ausdrücken in langen Strings suchen.

Diese Darstellung ermöglicht eine kompakte Speicherung einzelner Objekte, da die meisten komplizierten Strukturen, die die Eigenschaften des Objekts repräsentieren, in der Klasse gespeichert und dort mit allen anderen Objekten derselben Klasse geteilt werden. In realen Programmen mit vielen Objekten derselben Klasse kann dies erhebliche Speichermengen sparen.

Registerbasierter Bytecode Die letzten Generationen der Opera ECMAScript-Engine haben einen stapelbasierten Bytecode-Befehlssatz verwendet … Im neuen Motor haben wir stattdessen einen registerbasierten Bytecode-Befehlssatz gewählt. In einer registerbasierten Maschine gibt es anstelle eines dynamisch großen Stapels von Werten einen festen Größenblock, der sogenannte “Register”. Anstatt nur die Werte an der Spitze des Stapels zu betrachten, kann jeder Befehl auf jedes Register zugreifen. Da es keine Notwendigkeit, Werte zu und von der Spitze des Stapels zu kopieren, um sie zu bearbeiten, müssen weniger Anweisungen ausgeführt werden, und weniger Daten müssen kopiert werden.Native Code-Generierung, obwohl unsere neue Engine-Bytecode Befehlssatz erlaubt Die Implementierung einer wesentlich schnelleren Bytecode-Ausführungsmaschine, gibt es noch erheblichen Overhead, der beim Ausführen eines einfachen ECMAScript-Codes, wie Schleifen, die Integer-Arithmetik ausführen, in einem Bytecode-Interpreter involviert ist. Um diesen Overhead zu beheben, implementieren wir die Kompilierung von ganzen oder Teilen von ECMAScript-Programmen und -Funktionen in nativen Code. […] Der Registerzuweiser ist so entworfen, dass er architekturunabhängig ist, und ebenso das Codegenerierungs-Frontend, in dem die meisten komplizierten Entscheidungen getroffen werden. Wir haben zunächst ein Backend für 32- und 64-Bit x86 implementiert, aber einige Vorarbeiten haben bereits begonnen, nativen Code für andere CPU-Architekturen wie ARM zu generieren. […] Zusätzlich zum Generieren von nativem Code aus dem regulären ECMAScript-Code generieren wir auch nativen Code, der die Anpassung einfacher regulärer Ausdrücke durchführt. In der neuen Engine wird jedem Objekt eine Klasse zugewiesen, die verschiedene Informationen über das Objekt sammelt, wie zB seinen Prototyp und die Reihenfolge und Namen einiger oder aller seiner Eigenschaften. Die Klassenzuordnung ist natürlich sehr dynamisch, da ECMAScript eine sehr dynamische Sprache ist, aber so organisiert ist, dass Objekte mit demselben Prototyp und demselben Satz von Eigenschaften derselben Klasse zugeordnet werden Der komplizierten Strukturen, die die Objekteigenschaften darstellen, werden in der Klasse gespeichert, wo sie mit allen anderen Objekten mit derselben Klasse geteilt werden. In realen Programmen mit vielen Objekten derselben Klasse kann dies erhebliche Speichermengen sparen.

Was zu einer besseren Leistung führt. Wie schnell, fragen Sie?

Mit einem regelmäßigen, plattformübergreifenden Switch-Dispatch-Mechanismus (ohne generierten systemeigenen Code) ist Carakan derzeit etwa zweieinhalb Mal schneller am SunSpider-Benchmark als das ECMAScript-Modul in Presto 2.2 (Opera 10 Alpha).

Die native Codegenerierung in Carakan ist noch nicht fertig für die Full-Scale-Tests, schreibt Lindström, aber “die wenigen einzelnen Benchmark-Tests, die es bereits mit 5 bis 50 Mal schneller kompatibel ist”.

Nett.

Download Opera 9.6.3 auf der Website Downloads, Download Opera Mini 4.2 auf der Website Downloads

Prozessor, Verkauf von der Familie Silizium: Warum das Vereinigte Königreich ist über die ARM-Übernahme verärgert, Internet der Dinge, SoftBank CEO Son sagt, ARM eine Multi-Dekade Wette im Internet der Dinge, Hardware, SoftBank zu kaufen Chip-Designer ARM für £ 24.3bn Wie es auf Internet der Dinge zielt, ARM, ARM schnappt IoT, Imaging-Spezialist Apical in $ 350m Deal

Experte Stephen Shankland hat auch einige schöne Einblick in die Geschwindigkeit Problem.

Verkauf von der Familie Silizium: Warum das Vereinigte Königreich ist über die ARM Übernahme verärgert

SoftBank CEO Son sagt, ARM eine Multi-Dekade Wette auf das Internet der Dinge

SoftBank zu kaufen Chip-Designer ARM für £ 24.3bn, wie es zielt auf Internet der Dinge

ARM schnappt IoT, Imaging-Spezialist Apical in $ 350m Deal