Erlang - Performance



When talking about performance the following points need to be noted about Erlang.

  • Funs are very fast − Funs was given its own data type in R6B and was further optimized in R7B.

  • Using the ++ operator − This operator needs to be used in the proper way. The following example is the wrong way to do a ++ operation.

Example

-module(helloworld). 
-export([start/0]). 

start()->
   fun_reverse([H|T]) ->
   fun_reverse(T)++[H]; 
   fun_reverse([]) ->
   [].

As the ++ operator copies its left operand, the result is copied repeatedly, leading to quadratic complexity.

  • Using Strings − String handling can be slow if done improperly. In Erlang, you need to think a little more about how the strings are used and choose an appropriate representation. If you use regular expressions, use the re-module in STDLIB instead of the obsolete regexp module.

  • BEAM is a Stack-Based Byte-Code Virtual Machine − BEAM is a register-based virtual machine. It has 1024 virtual registers that are used for holding temporary values and for passing arguments when calling functions. Variables that need to survive a function call are saved to the stack. BEAM is a threaded-code interpreter. Each instruction is word pointing directly to executable C-code, making instruction dispatching very fast.

Advertisements