Version française
Home     About     Download     Resources     Contact us    
Browse thread
[Caml-list] String.unescaped and some other little pitiful laments
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Markus Mottl <markus@m...>
Subject: Re: [Caml-list] String.unescaped and some other little pitiful laments
On Tue, 10 Jul 2001, Berke Durak wrote:
> Also I'd like to see those horrible functions returning parameters in
> global variables be eradicated, such as those that can be found in the Str
> (regular expression) module. Is there a complete, typeful regular
> expression package entirely written in Ocaml ?

Unfortunately not. My Pcre-library has to interface to C to access the
matching engine, but the huge rest of the functions that build on it
are written in OCaml. In contrast to the Str-library, the Pcre-library
is fully reentrant, which is nice if you want to use it with threads or
want to interleave several matches with others.

If somebody wants to give it a try, the SML-entry in the language shootout
implements a regexp-library with NFAs and DFAs. I haven't given it a
closer look yet, but performance looks excellent:

  http://www.bagley.org/~doug/shootout/bench/regexmatch/regexmatch.mlton

> Many people on this list are talking lighthearted about functions
> such as Obj.magic. These functions are pure evil. It makes me sorry
> to see that my favorite language has an unsafe and ugly type casting
> function. Modules using such features should be flagged as ``evil'',
> and the use of these functions should not be publicly advocated.

I don't think anybody would talk lightheared about "Obj.magic". It happens
extremely seldom that one needs it, e.g. when you want to initialize
the contents of a reference with a fully polymorphic value, which
you cannot necessarily create (and matches on optional values with an
"assert false"-branch look really ugly and require many more lines, too).

The latter problem could be eliminated in some cases if one could raise
exceptions with polymorphic contents (by binding the type variable in
some enclosing expression in which the exception is defined).

There is also the trick to use "Obj.magic" for resizable arrays to
deallocate objects that are outside the index. I wouldn't know how else
to get the same behaviour.

Regards,
Markus Mottl

-- 
Markus Mottl                                             markus@oefai.at
Austrian Research Institute
for Artificial Intelligence                  http://www.oefai.at/~markus
-------------------
Bug reports: http://caml.inria.fr/bin/caml-bugs  FAQ: http://caml.inria.fr/FAQ/
To unsubscribe, mail caml-list-request@inria.fr  Archives: http://caml.inria.fr