[erlang-questions] [eeps] EEP 9

Jay Nelson jay@REDACTED
Wed Mar 5 04:51:51 CET 2008


Taking a quick look at the erlang implementation, I noticed the  
following:

1) The strip_left and strip_right functions are internal, so it would  
be better to put the when is_integer(Sc) clause up a level to check  
it only once (and crash on the caller's function rather than an  
internal one) and maybe add an is_binary clause for the target to be  
stripped.

2) strip_left and strip_right should be optimized to use skip indexes  
into the binary rather than creating new binaries on each iteration:

     <<_SkipLeft:SkipSize, Sc, _Rest/binary>> = Bin then recurse with  
SkipSize + 1

3) The <<>> clause in strip_left is unnecessary, the pattern match  
for the first character will fail and you can just return the whole  
binary without knowing if it is empty.  A similar fix is probably  
needed for strip_right.  You should see a speed improvement with long  
prefix to strip on either end.

4) duplicate/2 should be a BIF, I would expect it to be used for very  
large binary blocks and you wouldn't want the memory to thrash on  
such a simple instruction.

5) If to_upper and to_lower is really wanted, a BIF will give a much  
faster result.


Take a look at my article on binary BIFs presented at the 2005 ICFP  
conference for other ideas to improve performance of the library.

http://www.duomark.com/erlang/index.html has a link to both the  
article in PDF and the code that obtained the performance numbers  
quoted in the article.

jay




More information about the erlang-questions mailing list