Ich habe die Geschwindigkeit regulärer Ausdrücke in Ruby, Python und Perl (Version 2013) verglichen.

Es gab einen Fall, in dem ich in meinem Geschäft viel Text verarbeiten musste, also habe ich es mit Ruby geschafft, aber es ist wirklich langsam ... Es gibt Raum für Akkordstimmung, aber da es keine Geschichte ist, wenn Sie zuerst einen langsamen Typ verwenden, habe ich beschlossen, den Geschwindigkeitsunterschied im Haupt-LL zu messen.

Zunächst das Messergebnis

Für einen kleinen Text (6 MB) war es ein Perl-Sieg, und für einen großen Text war es ein Python-Sieg. In jedem Fall entkommt Ruby dem Boden mit einem kleinen Rand, aber es ist spät. Dies steht im Gegensatz zu Perl und Python, wo ihre Stärken und Schwächen weitgehend geteilt sind.

???_2.png

Übrigens Messbedingungen

Vorstellung der teilnehmenden Spieler

Zuerst von Ruby-Spielern

show_ruby_version


$ ruby -v
ruby 1.9.3p392 (2013-02-22 revision 39386) [x86_64-darwin12.3.0]

Der zu verwendende Code lautet wie folgt

regex_test.rb


#!/usr/bin/env ruby

re_addr = /((?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))/

fh2 = open("./result_rb.txt", "w")
open("./access.log.1") { |fh|
  while line = fh.gets
    if m = re_addr.match(line)
      fh2.puts m[1]
    end
  end
}
fh2.close

Nächster Python-Player

show_python_version


$ python --version
Python 2.7.2

Der zu verwendende Code lautet wie folgt

regex_test.py


#!/usr/bin/env python

import re
re_addr = re.compile("((?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))")

fh2 = open('./result_py.txt', 'w')
fh = open('./access.log.1')
for line in fh.readlines():
    m = re_addr.search(line)
    if m is not None:
        fh2.write(m.group(1))
        fh2.write("\n")
fh.close()
fh2.close()

Endlich ein großer Perl-Veteran

show_perl_version


$ perl -v

This is perl 5, version 12, subversion 4 (v5.12.4) built for darwin-thread-multi-2level
#(Da es lang ist, wird es unten weggelassen)

Der zu verwendende Code lautet wie folgt

regex_test.pl


#!/usr/bin/env perl

open(FH2, ">", "./result_pl.txt");
open(FH, "<", "./access.log.1");
while($line = readline FH) {
  if ($line =~ /((?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))/) {
    print FH2 $1."\n";
  }
}
close(FH);
close(FH2);

Auf diese Weise ist die Logik in jeder Sprache fast gleich und macht nicht viel.

Nachwort

Da es sich um einen regulären Ausdruck + das Schreiben von Dateien handelt, handelt es sich nicht um einen Vergleich der Fähigkeit zu reinen regulären Ausdrücken. Bitte verzeihen Sie mir, denn der Grund für diesen Benchmark ist die Verarbeitung einer großen Textmenge (Extrahieren bestimmter Daten mit einem regulären Ausdruck und Schreiben in eine Datei).

Da wir die Speicherfreigabe jeder Sprache nicht richtig berücksichtigt haben, kann sich das Ergebnis erneut ändern, wenn wir es richtig machen. Bitte verwenden Sie es nur als Referenz.

Recommended Posts

Ich habe die Geschwindigkeit regulärer Ausdrücke in Ruby, Python und Perl (Version 2013) verglichen.
Ich habe die Geschwindigkeit von Hash mit Topaz, Ruby und Python verglichen
Ich habe die Geschwindigkeit der Referenz des Pythons in der Liste und die Referenz der Wörterbucheinbeziehung aus der In-Liste verglichen.
Ich habe die numerische Berechnung von Python durch Rust ersetzt und die Geschwindigkeit verglichen
Ich verglich die Geschwindigkeit von Go Language Web Framework Echo und Python Web Framework Flask
Überlappende reguläre Ausdrücke in Python und Java
Ich habe die Berechnungszeit des in Python geschriebenen gleitenden Durchschnitts verglichen
[Einführung in Python] Ich habe die Namenskonventionen von C # und Python verglichen.
So schreiben Sie den richtigen Shebang in Perl-, Python- und Ruby-Skripten
Ich habe versucht, die Version 2020 mit 100 Sprachverarbeitung zu lösen [Kapitel 3: Reguläre Ausdrücke 25-29]
Ich habe die Geschwindigkeit der Listeneinschlussnotation für und während mit Python2.7 gemessen.
Angeben des Bereichs von Ruby- und Python-Arrays
Vergleichen Sie die Geschwindigkeit von Python Append und Map
Probieren Sie Progate Free Edition [Python I]
Ich habe versucht, die 2020-Version von 100 Sprachverarbeitungsproblemen zu lösen [Kapitel 3: Reguläre Ausdrücke 20 bis 24]
Teilt die Zeichenfolge durch die angegebene Anzahl von Zeichen. In Ruby und Python.
"Lineare Regression" und "Probabilistische Version der linearen Regression" in Python "Bayes lineare Regression"
Unterschied zwischen Ruby und Python in Bezug auf Variablen
Ich habe mir die Versionen von Blender und Python angesehen
Versionsverwaltung von Node, Ruby und Python mit anyenv
Ich habe die Referenzgeschwindigkeit überprüft, wenn ich Python-Liste, Wörterbuch und Set-Typ verwendet habe.
Ich habe Java und Python verglichen!
Über Python und reguläre Ausdrücke
Ich habe versucht, die Verarbeitungsgeschwindigkeit mit dplyr von R und pandas von Python zu vergleichen
Befreien Sie sich mit Python und regulären Ausdrücken von schmutzigen Daten
Ich habe versucht, den Chi-Quadrat-Test in Python und Java zu programmieren.
Ich möchte die Natur von Python und Pip kennenlernen
[Tipps] Probleme und Lösungen bei der Entwicklung von Python + Kivy
Ich habe N-Queen in verschiedenen Sprachen implementiert und die Geschwindigkeit gemessen
Die Geschichte von Python und die Geschichte von NaN
Ich kann mich nicht an reguläre Python-Ausdrücke erinnern
pyenv-change die Python-Version von virtualenv
Ich habe Java und Ruby persönlich verglichen
Ich habe die Warteschlange in Python geschrieben
Bei Verwendung regulärer Ausdrücke in Python
Ich habe den Stack in Python geschrieben
Zählen Sie die Anzahl der thailändischen und arabischen Zeichen in Python gut
Reguläre Ausdrücke, die in Python leicht und solide zu erlernen sind
[Python] Ich habe die Theorie und Implementierung der logistischen Regression gründlich erklärt
Ich habe den Code geschrieben, um den Brainf * ck-Code in Python zu schreiben
[Python] Ich habe die Theorie und Implementierung des Entscheidungsbaums gründlich erklärt
Ich habe Node.js und Python beim Erstellen eines Miniaturbilds mit AWS Lambda verglichen
Holen Sie sich den Titel und das Lieferdatum von Yahoo! News in Python
Beachten Sie, dass ich den Algorithmus des maschinell lernenden Naive Bayes-Klassifikators verstehe. Und ich habe es in Python geschrieben.
Ich habe Python3 Standard Argparse und Python-Fire verglichen
Überprüfen Sie das Verhalten des Zerstörers in Python
Unterschiede zwischen Ruby und Python im Umfang
Unterschied zwischen Anweisungen (Anweisungen) und Ausdrücken (Ausdrücken) in Python
[Python] Süß Ist es süß? Über Suiten und Ausdrücke in offiziellen Dokumenten
Informationen zur virtuellen Umgebung von Python Version 3.7
Ein leicht verständlicher Vergleich der grundlegenden Grammatik von Python und Go
Ändern Sie die Sättigung und Helligkeit von Farbspezifikationen wie # ff000 in Python 2.5
Ich kannte die Grundlagen von Python nicht
Ich habe Umgebungsvariablen in Docker festgelegt und in Python angezeigt.
Das Ergebnis der Installation von Python auf Anaconda
Ich möchte das Ergebnis von "Zeichenfolge" .split () in Python stapelweise konvertieren
Ich möchte die abstrakte Klasse (ABCmeta) von Python im Detail erklären
[Python] Probieren Sie pydash der Python-Version von lodash aus