pcre, bifs, drivers and ports

Mats Cronqvist <>
Mon Jul 31 16:51:35 CEST 2006


Ernie Makris wrote:
> Hello Erlangers,
> 
> One thing I wanted to start a discussion on is getting pcre style
> regexps in erlang. The question
> I pose to the list is: What would be the best way to integrate the pcre
> library into erlang.
> The possible approaches I've seen so far are:
> - create a linked in driver
> - create a port program
> - create new bifs (I'd really like this)

   a bif is the way to go, imo.

> My obvious concerns are:
> - How stable is the C pcre library for long running servers
> - Stability implies:
>     - Memory leaks
>     - SIGSEGVs
> 
> I would love the library calls in erlang to be bifs. Are there any
> external examples, aside from just looking at the source that
> demonstrate how to cleanly add a new bif?

   two weeks ago me and a colleague implemented two new bifs; re:grep/2 and 
re:compile/1.

   documentation is a bit scarce;

re:compile([RegExp]) -> [RegExpC]
re:grep(Str,[RegExp]) -> [MatchItem]
RegExp = string()
RegExpC = term()
MatchItem = no_match | {int(Beg),int(End),[string(SubMatch)]} | 
{error,{string(ErrorStr),int(ErrorChar)}}

   we have not yet observed any problems with stability.

   OTP has indicated that they will not introduce any bif that does not execute 
in bound time, or yields. i believe this can be met by limiting the length of 
the string and the regexp.

   if there is interest, we can probably make the code available.

   mats



More information about the erlang-questions mailing list