[erlang-questions] binary optimization

Joel Reymont joelr1@REDACTED
Sat Jul 18 13:53:58 CEST 2009

On Jul 18, 2009, at 12:04 PM, Richard Carlsson wrote:

> You missed the important point in Mikael's mail:
> "presumably the callee in the tailcall must be known at compile-time,
> and must presumably only be called with a delayed sub binary."

What about this one? I'm calling session:subscribe/2 and that's known  
at compile time.

src/transport.erl:98: Warning: NOT OPTIMIZED: sub binary used by  

98: handle_info({tcp, Sock, <<_:96, ?SUBSCRIBE, Topic/ 
binary>>}, State) ->
     inet:setopts(Sock, [{active, once}]),
     session:subscribe(State#state.session, Topic),
     {noreply, State};

Is the compiler telling me that the sub binary is "improperly" used by  
session:subscribe/2, e.g.

subscribe(Ref, Topic) ->
     gen_server:cast(Ref, {subscribe, Topic}).

What are the problems with my matching instructions that the following  
warning is referring to?

src/transport.erl:110: Warning: NOT OPTIMIZED: the binary matching  
instruction that follows in the same function have problems that  
prevent delayed sub binary optimization (probably indicated by INFO  
src/transport.erl:113: Warning: NOT OPTIMIZED: sub binary used by  

110: handle_info({tcp, Sock, <<_:96, ?PUBLISH, Len:32, Bin/binary>>},  
State) ->
     inet:setopts(Sock, [{active, once}]),
     Len1 = Len * 8,
     113: <<Topic:Len1/binary, Msg/binary>> = Bin,
     topic:publish(Topic, Msg),
     {noreply, State};

	Thanks, Joel

Mac hacker with a performance bent

More information about the erlang-questions mailing list