ACHTUNG. Das ist ein Archiv des alten forum.ruby-portal.de. Die aktuelle Mailingliste gibt es auf lists.ruby-lang.org/pipermail/ruby-de.

NOTICE. This is a ready-only copy of the old forum.ruby-portal.de. You can find the current mailing list at lists.ruby-lang.org/pipermail/ruby-de.

Die Programmiersprache Ruby

Blog|

Forum|

Wiki  


Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]

Ein neues Thema erstellen Auf das Thema antworten  [ 55 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: 31 Okt 2006, 01:39 
Offline
Interpreter

Registriert: 15 Mär 2005, 19:26
Beiträge: 6142
Wohnort: Karlsruhe
Hast Du da irgendwelche speziellen Muster in einer Verdachtsliste oder ist eventuell einfach Oniguruma wegen der weit grösseren Komplexität der Mustermaschine deutlich langsamer?

Was natürlich auch sein kann ist, dass die Optimierung bei Oniguruma noch in den Kinderschuhen steckt, speziell deshalb, weil da ja auch viel mit unterschiedlichen Codierungen gemacht wird. Perl soll ja mit Unicode auch eine Weile ordentliche Probleme gehabt haben.

:? Vielleicht ist es aber auch ganz anders...

Hat jemand schon mal die RexEx-Maschine mit japanischen Texten getestet? - Vielleicht ist bei den Codierungs-Spezialitäten, und den üblichen Mustern ja schon viel mehr geschehen.

_________________
WoNáDo.set_state!(:retired)


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 31 Okt 2006, 08:15 
Offline
Geselle
Benutzeravatar

Registriert: 09 Aug 2006, 11:49
Beiträge: 148
WoNáDo hat geschrieben:
Perl soll ja mit Unicode auch eine Weile ordentliche Probleme gehabt haben.


Ich weiß ja nicht, wies bei Python in den Anfangszeichen von _sre ausgeschaut hat, funktionieren tuts momentan aber ganz gut. Weiß einer warum man eigentlich nicht diese Regexp Maschine für Ruby verwendet hat?

_________________
[code=]class<<self;define_method(%_>6E9@50>:DD:?8_.tr(%_0-f_,%_\_-t_)){|*_|@_\
=_};end;(Just another Ruby hacker!);(_,@_=@_;$><<_<<%_ _)while@_;$><<$/[/code]


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 31 Okt 2006, 09:19 
Offline
Böser Admin 2
Benutzeravatar

Registriert: 17 Mär 2004, 17:03
Beiträge: 2544
Wohnort: Berlin
ich vermute, es gab am anfang (1995) irgendwelche argumente gegen die Perl-engine, denn die wäre wohl die erste wahl gewesen. vermutlich ist sie einfach viel zu sehr in die sprache Perl integriert, um übernommen zu werden.

Python hatte zu der zeit vielleicht noch keine engine, die besser war als die GNU-regexp-engine (die Ruby bis zur version 1.8.x benutzt). aktuell enthält die Python-regexp-engine auch dinge, die mit Unicode und Locals zu tun haben - und vermutlich lässt sich das nicht so einfach in Ruby einbauen. könnte also historisch begründet sein. _sre ist der aktuellen Ruby-engine voraus, kann es aber wiederum mit Oniguruma (seit 4 jahren in der entwicklung) nicht aufnehmen. ich sehe bei der aktuellen engine von 1.8.5 vor allem folgende nachteile gegenüber _sre, nach wichtigkeit in meinen augen:
- keine benannten gruppen (blöd! mit sicherheit bald das populärste feature in Onigi)
- unzureichende (?) unterstützung von unicode
- kein lookbehind (schade, aber kein beinbruch)
- wenn-dann-pattern

dennoch ist die gegenwärtige engine mächtig genug für komplexe aufgaben - siehe CodeRay ;)

ich habe auch gehört, dass Ruby mit C++ compilierbar ist - vielleicht gilt das nciht für _sre, und daher war es inakzeptabel. oder die lizenzen waren inkompatibel.

_________________
Ruby-Mine | (almost) murphy.de | rubychan.de


Zuletzt geändert von murphy am 31 Okt 2006, 16:48, insgesamt 1-mal geändert.

Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 31 Okt 2006, 13:42 
Offline
Interpreter

Registriert: 15 Mär 2005, 19:26
Beiträge: 6142
Wohnort: Karlsruhe
blackbird hat geschrieben:
Weiß einer warum man eigentlich nicht diese Regexp Maschine für Ruby verwendet hat?

Vielleicht hat es aber auch hier japanische Gründe. Die englische Sprache ist dort offensichtlich weniger verbreitet als ich früher mal gedacht habe, vor allem aber wohl auch in der EDV/IT nicht so sehr die Standardsprache wie bei uns in West-Europa seit langer Zeit.

Ruby war ja jahrelang eine inner-japanische Entwicklung.

Die Benutzung der Oniguruma-Maschine ab Ruby 1.9 hat wohl ganz eindeutig japanische Gründe, dazu muss man sich nur auf der Homepage die unterstützten Encodings ansehen.
Oniguruma-Homepage hat geschrieben:
Oniguruma is a regular expressions library.
The characteristics of this library is that different character encoding
for every regular expression object can be specified.

Supported character encodings:
ASCII, UTF-8, UTF-16BE, UTF-16LE, UTF-32BE, UTF-32LE,
EUC-JP, EUC-TW, EUC-KR, EUC-CN,
Shift_JIS, Big5, GB 18030, KOI8-R, KOI8,
ISO-8859-1, ISO-8859-2, ISO-8859-3, ISO-8859-4, ISO-8859-5,
ISO-8859-6, ISO-8859-7, ISO-8859-8, ISO-8859-9, ISO-8859-10,
ISO-8859-11, ISO-8859-13, ISO-8859-14, ISO-8859-15, ISO-8859-16
(GB 18030 encoding was contributed by KUBO Takehiro)

_________________
WoNáDo.set_state!(:retired)


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 31 Okt 2006, 21:13 
Offline
Böser Admin 2
Benutzeravatar

Registriert: 17 Mär 2004, 17:03
Beiträge: 2544
Wohnort: Berlin
WoNáDo: was ist das denn hier?
Zitat:
2006/10/30: [bug] (thanks Wolfgang Nadasi-Donner)
invalid offset value was used in STATE_CHECK_BUFF_INIT().
bist du jetzt mitentwickler? ;)

_________________
Ruby-Mine | (almost) murphy.de | rubychan.de


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 31 Okt 2006, 21:38 
Offline
Interpreter

Registriert: 15 Mär 2005, 19:26
Beiträge: 6142
Wohnort: Karlsruhe
murphy hat geschrieben:
WoNáDo: was ist das denn hier?
Zitat:
2006/10/30: [bug] (thanks Wolfgang Nadasi-Donner)
invalid offset value was used in STATE_CHECK_BUFF_INIT().
bist du jetzt mitentwickler? ;)

Ich hab einfach den Fehler gemeldet, den ich beim Versuch hatte, das alles zu compilieren (oder kompilieren...).

Da hat er mir doch den Patch geschickt. Du bist doch auch schon auf diese Art erwähnt worden.

Vorhin hat er mich noch gefragt, ob wir ein Flag benutzen. Ich hab mir das mal angeschaut und geantwortet.
WoNáDo hat geschrieben:
K.Kosako schrieb:
> BTW, I am thinking that to remove ONIGENC_AMBIGUOUS_MATCH_COMPOUND
> in the next version of Oniguruma (4.5.0).
> Are you using it?
First a question - does this flag mean, that (for example) the representation for the second character of my second name (á), which can be presented by the two code points {LATIN SMALL LETTER A - 0x0061}{COMBINING ACUTE ACCENT - 0x0301} can be matched as a singel character, if the flag ONIGENC_AMBIGUOUS_MATCH_COMPOUND is set?

I don't know, if Ruby has a possibility to use it, but it may be very interesting, if Ruby will support this kind of match in future.

If this flag is present in Oniguruma 5.x.x, which can be used from C(++), and if Ruby is not interested to use the Flag in future, than there is no need for holding it in Oniguruma 4.x.x

Best Regards, Wolfgang Nádasi-Donner


Ausserdem habe ich ihn schon darauf vorbereitet, dass er demnächst eine Mail erhalten wir, die im Forum vordiskutierte Vorschläge zu Musterelementen machen wird.

Falls er diesbezüglich etwas machen sollte, habe ich einfach Deine Idee genannt, das dann einfach mal in Ruby reinzupatchen und mit ein paar Beispielen versehen als Change-Proposal für Ruby 1.9 / 2.0 vorzubringen.

Schaumama...

_________________
WoNáDo.set_state!(:retired)


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 04 Apr 2007, 20:53 
Offline
Böser Admin 2
Benutzeravatar

Registriert: 17 Mär 2004, 17:03
Beiträge: 2544
Wohnort: Berlin
nachmal zurück zum thema: das problem besteht immernoch, allerdings nur bei StringScanner#scan:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
require "benchmark"
require "strscan"

text = "test " * 100_000
regexps = [
/\w+\s/,
/\w+\s?/,
/\w+\s*/,
/\w+\s+/,
]

Benchmark.bm(20) do |bm|
text = StringScanner.new text
for r in regexps
bm.report r.source do
text.scan(r) || text.getch until text.eos?
end
text.reset
end
end
vier in bezug auf den beispieltext identische regexps werden getestet. die ergebnisse:

Ruby 1.8.5p12:

1
2
3
4
5
                          user     system      total        real
\w+\s 0.120000 0.000000 0.120000 ( 0.117450)
\w+\s? 0.120000 0.000000 0.120000 ( 0.119977)
\w+\s* 0.130000 0.000000 0.130000 ( 0.126466)
\w+\s+ 0.120000 0.000000 0.120000 ( 0.126093)

Ruby 1.9.0 2007-04-05 (rev 12147):

1
2
3
4
5
                          user     system      total        real
\w+\s 0.080000 0.000000 0.080000 ( 0.082747)
\w+\s? 0.600000 0.940000 1.540000 ( 1.542204)
\w+\s* 0.590000 0.950000 1.540000 ( 1.562882)
\w+\s+ 0.590000 0.940000 1.530000 ( 1.536385)
man beachte die stark erhöhten laufzeiten für die ausdrücke mit zwei quantoren.

deaktiviert man nun in der datei regint.h die zeile 103:

1
2
3
4
5
6
7
8
9
10
11
12
13
Index: regint.h
===================================================================
--- regint.h (revision 12147)
+++ regint.h (working copy)
@@ -100,7 +100,7 @@
#include "ruby.h"
#include "rubysig.h" /* for DEFER_INTS, ENABLE_INTS */

-#define USE_COMBINATION_EXPLOSION_CHECK /* (X*)* */
+/* #define USE_COMBINATION_EXPLOSION_CHECK /* (X*)* */
#define USE_MULTI_THREAD_SYSTEM

#define THREAD_ATOMIC_START DEFER_INTS
dann geht es plötzlich einwandfrei.

was huhn?

_________________
Ruby-Mine | (almost) murphy.de | rubychan.de


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 04 Apr 2007, 21:22 
Offline
Interpreter

Registriert: 15 Mär 2005, 19:26
Beiträge: 6142
Wohnort: Karlsruhe
murphy hat geschrieben:
was huhn?

Mailto: K. Kosako - sndgk393 at ybb.ne.jp

Das gehört zu Oniguruma, müsste also vom Autor geändert werden. Gibt einfach die zugehörige Oniguruma-Version an und schick den Beitrag mit ein paar englischen Worten hin. Ich habe ihn als ausgesprochen zuvorkommend erlebt.

_________________
WoNáDo.set_state!(:retired)


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 04 Apr 2007, 21:26 
Offline
Böser Admin 2
Benutzeravatar

Registriert: 17 Mär 2004, 17:03
Beiträge: 2544
Wohnort: Berlin
mmh. man kann das flag ja einfach deaktivieren, es ist nicht gesagt, dass das verhalten unerwartet ist.

_________________
Ruby-Mine | (almost) murphy.de | rubychan.de


Nach oben
 Profil  
 
 Betreff des Beitrags:
BeitragVerfasst: 04 Apr 2007, 21:37 
Offline
Interpreter

Registriert: 15 Mär 2005, 19:26
Beiträge: 6142
Wohnort: Karlsruhe
murphy hat geschrieben:
mmh. man kann das flag ja einfach deaktivieren, es ist nicht gesagt, dass das verhalten unerwartet ist.

Ich würde es ihm aber mal schicken. Er weiss doch am ehesten, was bei seiner Maschine zu erwarten ist und was nicht.

So eine RegEx-Maschine ist bezüglich der Optimierungen übelartig Komplex, da ist man froh, wenn jedes seltsam anmutende Verhalten mitgeteilt wird.

_________________
WoNáDo.set_state!(:retired)


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 55 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
cron