English version
Accueil     À propos     Téléchargement     Ressources     Contactez-nous    

Ce site est rarement mis à jour. Pour les informations les plus récentes, rendez-vous sur le nouveau site OCaml à l'adresse ocaml.org.

Browse thread
[Caml-list] unix.chop_extension
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: 2004-05-27 (09:34)
From: skaller <skaller@u...>
Subject: Re: [Caml-list] unix.chop_extension
On Thu, 2004-05-27 at 17:46, Markus Mottl wrote:
> On Thu, 27 May 2004, skaller wrote:
> > AFAIK: The C Pcre that it wraps does use global variables 
> > and so while the interface appears re-entrant
> > it isn't.
> To prevent people from getting a false impression of PCRE as interfaced
> to OCaml: it _is_ safe. 

You are using the word 'safe' imprecisely.

Reentrant is specific. So is thread-safe.
Re-entrant + no shared data structures implies thread-safe.
Thread safe doesn't imply re-entrant. In particular,
re-entrant is a stronger condition in the sense that
it implies all callbacks including asynchronous invocations
from signal handlers will work: thread safe code may
deadlock here.

> The use of global variables by the C-library does not necessarily imply
> that the program is unsafe.  It all depends on their use, and in this
> case the global variables (e.g. pcre_callout) are initialized exactly
> once at startup time, i.e. before the user can access any functions.

If this is so, the globals are merely constants, and the code 
will be re-entrant after the initialisation is complete.

However my examination of the C Pcre at one time
showed this was NOT the case. Instead, certain 
options were stored in global variables on every
call, and that implies the code isn't re-entrant
and cannot ever be made so.

I may have been wrong, and perhaps I was right but
Pcre has changed: I last looked some years ago
whilst working on Vyper .. 

As Markkus comments use of imperative style is
not the issue here. A function can easily
modify variables and be re-entrant provided
the variables are (rooted) on the stack.

John Skaller, mailto:skaller@users.sf.net
voice: 061-2-9660-0850, 
snail: PO BOX 401 Glebe NSW 2037 Australia
Checkout the Felix programming language http://felix.sf.net

To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr
Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners