Pattern matching vs. ETS lookups
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
% 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:
where the ETS table (Table) would initially be populated with a function
list, and later do:
f(<<FunctionID/8, Body/binary>>, Table) ->
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