Kürzliche Entwicklungen
... [ Seminar Programmiersprachen und virtuelle Maschinen ] ... [ Google's V8 ] ...
[ << Schlüssel Elemente ] ... [ Fazit >> ] ...
Übersicht: Kürzliche Entwicklungen
Irregexp
Im Jahre 2009 hat Google eine neue Engine für reguläre Ausdrücke entwickelt, da sie für die bisher genutzte JSCRE-Bibliothek (Javascript Compatible Regular Expressions) Strings konvertieren mussten.
Die Irregexp Engine implementiert alle JavaScript Regulären Ausdrücke ohne auf fremde Bibliotheken zurückgreifen zu müssen und ist 10 mal schneller als die JSCRE.
Vorgehen
Die Irregexp Engine baut zunächst aus dem Regulären Ausdruck einen Automaten auf. Dieser wird erst analysiert und dann optimiert. Aus dem optimierten Automaten wird nun nativer
Maschinencode generiert. Dadurch werden alle Regulären Ausdrücke als nativer Maschinencode ausgeführt. Zudem benutzt die Irregexp ein paar Tricks, um Backtracking zu vermeiden, und sortiert
Operationen nach ihrem Aufwand.
Beispiele
- Masken
Aus einer alternativen Suche nach Dienstag
oder Mittwoch
, erzeugt die Irregexp die Maske ?i??????
. Damit sucht sie zunächst nur Worte an dessen zweiter Stelle
ein i
auftaucht. Ist dies nicht der Fall, kann abgebrochen werden, ansonsten wird mit Dienstag
oder Mittwoch
verglichen.
- Vergleich von Bit-Patterns
Die Irregexp vergleicht 4 Ascii-Zeichen in einer Anweisung über Bit-Patterns. Dadurch wird aus foobar
ein Vergleich auf 0x666f6f62
und 0x6172
. Dies bringt
enorme Geschwindigkeitsvorteile, da 4 Zeichen in einer Instruktion verglichen werden können. Wieder kann abgebrochen werden, wenn ein 'Byte' nicht passt.
- Sortieren nach Aufwand
Ein weiterer Punkt ist das Sortieren nach Aufwand. Die Irregexp führt dabei einfache Operationen zuerst aus, um eventuell abbrechen zu können, wenn ein Wort nicht passt. Zum Beispiel wird
die Suche nach ([fF]oo[bB]ar)
wie folgt aufgeteilt. Zunächst vergleicht die Irregexp die Positionen 1 und 4 auf oo
und ar
. Ist dies der Fall, wird die 0.
Position auf f
oder F
verglichen. Ist auch dies der Fall, wird zuletzt die Position 3 auf b
oder B
verglichen. Wenn alles zutrifft, wird der Treffer
zurückgegeben, ansonsten wird abgebrochen.
Neue Compiler Infrastruktur
Der ursrpüngliche Kompiler war sehr simpel, führte keine statischen Analysen durch, allozierte keine Register und aus dem Code wurde ein abstrakter Syntax-Baum generiert. Der neue Compiler
kompiliert, wie der Alte, alles in einem Durchgang, auch Single-Pass-Compiler genannt. Er alloziert nun auch Register und gibt die Möglichkeit für zukünftige Optimierungen am Compiler.
... [ Seminar Programmiersprachen und virtuelle Maschinen ] ... [ Google's V8 ] ...
[ << Schlüssel Elemente ] ... [ Fazit >> ] ... [ nach oben ] ...