[#8566] Visions for 2001/1.7.x development? — Robert Feldt <feldt@...>

Hi matz and other Ruby developers,

18 messages 2001/01/03
[#8645] Re: Visions for 2001/1.7.x development? — matz@... (Yukihiro Matsumoto) 2001/01/04

Hi,

[#8580] bug?? — jmichel@... (Jean Michel)

I don't understand the following behaviour:

19 messages 2001/01/03

[#8633] Interesting Language performance comparisons - Ruby, OCAML etc — "g forever" <g24ever@...>

13 messages 2001/01/04

[#8774] No :<, :>, etc. methods for Array — "Brian F. Feldman" <green@...>

So, why not include Comparable in Array by default? It shouldn't have any

28 messages 2001/01/07
[#8779] Re: No :<, :>, etc. methods for Array — matz@... (Yukihiro Matsumoto) 2001/01/07

Hi,

[#8780] Re: No :<, :>, etc. methods for Array — "Brian F. Feldman" <green@...> 2001/01/07

matz@zetabits.com (Yukihiro Matsumoto) wrote:

[#8781] Re: No :<, :>, etc. methods for Array — gotoken@... (GOTO Kentaro) 2001/01/07

In message "[ruby-talk:8780] Re: No :<, :>, etc. methods for Array"

[#8782] Re: No :<, :>, etc. methods for Array — "Brian F. Feldman" <green@...> 2001/01/07

gotoken@math.sci.hokudai.ac.jp (GOTO Kentaro) wrote:

[#8829] Sandbox (again) — wys@... (Clemens Wyss)

Hi,

20 messages 2001/01/08
[#8864] Re: Sandbox (again) — Clemens Hintze <c.hintze@...> 2001/01/08

On 8 Jan, Clemens Wyss wrote:

[#8931] String confusion — Anders Bengtsson <ndrsbngtssn@...>

Hello everyone,

21 messages 2001/01/09
[#8937] Re: String confusion — matz@... (Yukihiro Matsumoto) 2001/01/09

Hi,

[#8953] Please remove account from files — "Thomas Daniels" <westernporter@...>

Please take my e-mail address from your files and "CANCEL" my =

14 messages 2001/01/09
[#8983] Re: Please remove account from files — John Rubinubi <rubinubi@...> 2001/01/10

On Wed, 10 Jan 2001, Thomas Daniels wrote:

[#9020] time to divide -talk? (was: Please remove account from files) — Yasushi Shoji <yashi@...> 2001/01/10

At Wed, 10 Jan 2001 14:23:30 +0900,

[#9047] Re: time to divide -talk? (was: Please remov e account from files) — Aleksi Niemel<aleksi.niemela@...>

Yasushi Shoji:

27 messages 2001/01/10
[#9049] Re: time to divide -talk? — Yasushi Shoji <yashi@...> 2001/01/10

At Thu, 11 Jan 2001 00:20:45 +0900,

[#9153] what about this begin? — Anders Strandl Elkj誡 <ase@...> 2001/01/11

[#9195] Re: Redefining singleton methods — ts <decoux@...>

>>>>> "H" == Horst Duch=EAne?= <iso-8859-1> writes:

10 messages 2001/01/12

[#9242] polymorphism — Maurice Szmurlo <maurice@...>

hello

73 messages 2001/01/13

[#9279] Can ruby replace php? — Jim Freeze <jim@...>

When I read that ruby could be used to replace PHP I got really

15 messages 2001/01/14

[#9411] The Ruby Way — "Conrad Schneiker" <schneiker@...>

As a member of the "Big 8" newsgroups, "The Ruby Way" (of posting) is to

15 messages 2001/01/17

[#9462] Re: reading an entire file as a string — ts <decoux@...>

>>>>> "R" == Raja S <raja@cs.indiana.edu> writes:

35 messages 2001/01/17
[#9465] Re: reading an entire file as a string — Dave Thomas <Dave@...> 2001/01/17

raja@cs.indiana.edu (Raja S.) writes:

[#9521] Larry Wall INterview — ianm74@...

Larry was interviewed at the Perl/Ruby conference in Koyoto:

20 messages 2001/01/18
[#10583] Re: Larry Wall INterview — "greg strockbine" <gstrock@...> 2001/02/08

Larry Wall's interview is how I found out

[#9610] Re: 101 Misconceptions About Dynamic Languages — "Ben Tilly" <ben_tilly@...>

"Christian" <christians@syd.microforte.com.au> wrote:

13 messages 2001/01/20

[#9761] Re: 101 Misconceptions About Dynamic Languages — ts <decoux@...>

>>>>> "C" == Christoph Rippel <crippel@primenet.com> writes:

16 messages 2001/01/23

[#9792] Ruby 162 installer available — Dave Thomas <Dave@...>

15 messages 2001/01/24

[#9958] Re: Vim syntax files again. — "Conrad Schneiker" <schneik@...>

Hugh Sasse wrote:

14 messages 2001/01/26
[#10065] Re: Vim syntax files again. — Hugh Sasse Staff Elec Eng <hgs@...> 2001/01/29

On Sat, 27 Jan 2001, Conrad Schneiker wrote:

[#9975] line continuation — "David Ruby" <ruby_david@...>

can a ruby statement break into multiple lines?

18 messages 2001/01/27
[#9976] Re: line continuation — Michael Neumann <neumann@...> 2001/01/27

On Sat, 27 Jan 2001, David Ruby wrote:

[#9988] Re: line continuation — harryo@... (Harry Ohlsen) 2001/01/28

>A statement break into mutliple lines if it is not complete,

[ruby-talk:9082] Re: Regexp for matching Ruby reg exps?

From: "Ben Tilly" <ben_tilly@...>
Date: 2001-01-10 22:44:29 UTC
List: ruby-talk #9082
gotoken@math.sci.hokudai.ac.jp (GOTO Kentaro) wrote:

Forgot to make a comment about one point.

[...]
>Ruby's regexp is extended rather than the theoretical one.
[...]

For those who don't understand what he meant, the theory
of regular expressions started with a theory of finite
state engines.  The finite state engine approach (used in
grep for instance) gives limited functionality but also
can determine whether or not there is a match very
efficiently.

Most modern "regular expression" engines actually are not
regular.  Rather than tracing a finite state engine through
the string, they recursively attempt to match the pattern
to the string.  Any lanugage (like Ruby) which is able to
find backreferences is using recursion internally.

However as soon as you add backreferences to regular
expressions, determining whether or not there is a match
is an NP-complete problem.  Which means that the engine must
have disasterous failures.  (Note that Perl and Ruby promise
not just a match, but a specific one.  Which is the
difference between .* and .*? - as far as I know this is
actually an NP-hard problem.)  An example of a disasterous
failure is the following:

    /^(\s*yada\s*)+$/

If you have a long set of yada's which breaks off in the
middle of a word, this will not match but Ruby will not be
able to figure this out in a reasonable time.  For a full
explanation of why not, how to spot problems, and what to
do about them I strongly recommend Jeffrey Friedl's book.

Which brings up two points.

First of all I think it would be very good if there was a
mode for Ruby's Regexp class where when it tried to do a
match it would not stop at the first match, but rather try
to find all matches and then return the first.  The only
purpose for this is a pragma to turn on for testing so that
if you have a disasterous RE you will find it out easily.

Secondly the above disaster does not actually have any
backreferences in it.  A long time ago I figured out how to
(in theory) optimize a recursive RE engine so that it could
not fall into disaster unless there actually are
backreferences.  That is one of those good ideas that I am
unlikely to do anything about for a few years at least.
But if anyone is interested, you can see the discussion at

http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2000-05/msg00853.html

The idea is that you create new states in the RE engine which
are mapped to ordered sets of states in the original.  (The
order is the order that you would have entered those states
on the way to failing to match.)  Except for that twist this
is the classic subset algorithm for turning an NFA into a DFA
but that twist turns it from an NFA back into an NFA which
happens to be more efficient to process.

This single optimization should in theory cover a large number
of special case optimizations, but to the best of my knowledge
has not actually been tried.

Anyways if anyone feels motivated, go for it!

Cheers,
Ben
_________________________________________________________________
Get your FREE download of MSN Explorer at http://explorer.msn.com

In This Thread

Prev Next