pcre, bifs, drivers and ports

Ernie Makris <>
Mon Jul 31 16:56:42 CEST 2006


Hi Mats,

I'd definitely be interested in seeing the code, or even an overview of
the process to properly add a bif.

I think the best thing I can do is add in the pcre library, create the
bif and then run it indefinitely in
a loop of regex tests to observe the memory behavior of the VM.

Thanks
Ernie

Mats Cronqvist wrote:
> 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