[erlang-questions] call by value

Ulf Wiger ulf.wiger@REDACTED
Thu May 19 18:17:29 CEST 2011


On 19 May 2011, at 17:59, Paulo Sérgio Almeida wrote:

> On 5/19/11 4:41 PM, Ulf Wiger wrote:
>> You should ignore the issue of copying. Essentially, Erlang can be viewed as using copy-on-write semantics.
>> 
>> The key is whether the expression is evaluated or not (it is) before the function is called, and also whether the called function can modify the input parameters (it can't)*.
>> 
>> * Unless you use unholy functions like hipe_bifs:bytearray_update/3, which of course you don't. ;-)
> Unless you need to implement huge bloom filters with good performance. ;-)

Yeah, well, I was bitten by exactly that last week, as I prepared a code kata based on a bloom filter.

I had a bloom filter implementation that used hipe_bifs:bitarray_update/3 for performance and simplicity, but since I was messing with those, I used them also in the code calling on the bloom filter (which was to find all words of a given length).

The fun started when I then made a QLC generator out of the CPS-style word finder. It worked, but instead of returning all words of length N, it returned a list of several instances of the SAME word.

It took me a little while to realise that, as I was using destructive update when permuting the "character vector", the QLC iterator kept mutating the same binary the whole time, and simply returned a pointer to that one binary for each word found.

Mutation is evil…

BR,
Ulf W

Ulf Wiger, CTO, Erlang Solutions, Ltd.
http://erlang-solutions.com






More information about the erlang-questions mailing list