Pattern matching vs. ETS lookups

Serge Aleynikov serge@REDACTED
Wed Dec 31 14:40:15 CET 2003

In implementing an application dealing with some binary protocol I ran 
into a question that I'd like to ask Erlang community.

A binary protocol involves parsing a header which determines the 
function to be called, and a body of variable length.  The main question 
is if the number of functions is large > 250, is it better (i.e. faster, 
more compact, more efficient?) to implement header/body parsing using 
hard-coded patterns:

% Input types: <<FunctionID/8, Body/binary>>
f1(<<1,   Body/binary>>) -> ...;
f1(<<2,   Body/binary>>) -> ...;
f1(<<3,   Body/binary>>) -> ...;
f1(<<255, Body/binary>>) -> ... .

or to have an ETS table tha would store tuples in the form:
{FunctionID, BodyParsingFunction}
where the ETS table (Table) would initially be populated with a function 
list, and later do:

f(<<FunctionID/8, Body/binary>>, Table) ->
   BodyParsingFunction =
     ets:lookup_element(Table, FunctionID, 2),

In the first case if the f1(<<255, ...>>) function is called, would the 
bytecode interpreter have to evaluate 255 overloaded function patterns 
before it can successfully invoke the last function in the list?



More information about the erlang-questions mailing list