Muster fenster ag

Was macht rg in diesem Fall konkret schneller als GNU grep? Beide Suchwerkzeuge verwenden letztendlich ein DFA, um dieses Muster auszuführen, daher sollte ihre Leistung ungefähr gleich sein. Ich habe dafür eigentlich keine besonders gute Antwort. Sowohl GNU grep als auch Rusts Regex-Bibliothek enrollen die innere Schleife des DFA, und beide Implementierungen berechnen zu zueinem Überfall. Ich kann aber raten. Wenn Sie Fragen zu dieser Datenschutzrichtlinie haben, kontaktieren Sie uns bitte unter support@pattern.ag oder: Befehlszeilenoptionen ist -Gmd` und Suchmuster ist search_pattern. helm-ag behandelt Wörter, die mit – als Befehlszeilenoption beginnen. Beschreibung: Dies benchmarkt ein Muster, das nach Wörtern sucht, die die literale Zeichenfolge Holmes umgeben. Dieses Muster wurde speziell konstruiert, um sowohl Präfix- als auch Suffixliteraloptimierungen zu besiegen. In der zweiten Hälfte unserer Benchmarks werden wir die Gänge schalten und die Leistung von Suchwerkzeugen in einer einzigen großen Datei genauer betrachten.

Jeder Benchmark wird auf zwei Beispielen des OpenSubtitles2016-Datasets ausgeführt. Eine Probe wird Englisch und daher überwiegend ASCII sein, und eine andere Probe wird auf Russisch und daher überwiegend kyrillisch sein. Die Muster für das russische Beispiel wurden aus dem Englischen mit Google Translate übersetzt. (Leider kann ich kein Russisch lesen, aber ich habe jede Suche von Hand ausprobiert und bestätigt, dass eine Stichprobe der Ergebnisse, die ich mir ansah, relevant war, indem ich sie durch Google Translate zurückrohrte.) Das englische Beispiel ist etwa 1 GB und das russische Beispiel ist etwa 1,6 GB, so dass die Benchmark-Timings nicht direkt vergleichbar sind. Während im Wesentlichen die gleiche Analyse für die russische Benchmark gilt, gibt es ein paar interessante Dinge zu beachten. Nämlich, während die Ergebnisse zeigen grep (ASCII) als sehr schnell, scheint es klar, dass es völlig ignoriert die -i-Flagge in diesem Fall, da das Muster ist keine ASCII-Zeichenfolge. Bemerkenswert ist, dass sein Zeitpunkt im Wesentlichen mit seinem Timing auf der vorherigen subtitles_literal Benchmark identisch ist. Die andere interessante Sache zu beachten ist, dass ag meldet 0 Übereinstimmungen.

Dies ist nicht ganz unvernünftig, wenn es irgendwie weiß, dass es die Anforderung nicht erfüllen kann (Groß-/Kleinschreibung unempfindliche Suche nach einer Nicht-ASCII-Zeichenfolge, wenn Unicode-Unterstützung nicht aktiviert ist). Wenn ich raten müsste, würde ich sagen, DASS PCRE einen Fehler zurückgibt (möglicherweise von pcre_exec) und er wird nicht an den Endbenutzer weitergeleitet, aber das ist nur ein Schuss ins Dunkel. Um die vollständige Optimierung zu erreichen, müssen Sie das Muster wahrscheinlich in seine abstrakte Syntax (abgekürzt “AST” für abstrakte Syntaxstruktur) analysieren, um das Literal zu extrahieren. Es ist jedoch erwähnenswert, dass man wahrscheinlich eine Menge Kilometer mit einfacherheistischer, aber ein echter Muster-Parser ist die einzige Möglichkeit, diese Optimierung robust zu tun. Das Problem hier ist, dass für die meisten Regex-Engines das Analysieren des Musters ein nicht verfügbares Implementierungsdetail ist, so dass es für Suchwerkzeuge schwierig sein kann, Literale auf robuste Weise zu extrahieren, ohne einen eigenen Parser zu schreiben, und ein moderner Regex-Parser keine leichte Aufgabe ist! Glücklicherweise stellt Rusts regex-Bibliothek eine zusätzliche Bibliothek, regex-syntax, zur Verfügung, die einen vollständigen Parser bereitstellt. rg implementiert diese Optimierung relativ einfach mit Hilfe von regex-syntax, während GNU grep diese Optimierung implementiert, da das Suchtool und die zugrunde liegende regex-Engine miteinander gekoppelt sind. Wenn wir uns die UTF-8 Bytes der russischen Untertitel anschauen würden, die wir suchen, würden wir am Ende genau das gleiche Muster sehen.