[erlang-questions] Question about message passing paradigm

Richard A. O'Keefe <>
Tue Jul 1 06:48:35 CEST 2008


On 1 Jul 2008, at 3:42 pm, Edwin Fine wrote:
> Richard,
>
> I'm new to Erlang and FP, and I want to learn from my mistakes or  
> misunderstandings. Please could you critique the suggestion I sent  
> in regarding this problem? The fact that nobody commented means  
> either that it was (a) totally naive and not worthy of comment (or  
> to spare my feelings), or (b) such a good idea that all were  
> rendered speechless with admiration. Somehow the probability of (b)  
> seems rather low. So... where did I go wrong?

Let's recapitulate.  If I've found the right message,
Edwin Fine had three suggestions:

	• Create a gen_fsm that controls all the collections.
	  The collections could be ETS tables or gen_servers wrapping ETS  
tables.
	  Under normal use, messages are sent to the fsm to update the  
collections
	  individually.  When the time comes to require consistency across the
	  collections, send a message to the fsm to get the collective state  
data.
	  The fsm goes into a different state while it gathers the data.
	  This state would reject requests to update the collections (or wait  
until
	  the state changes), although reads would still be allowed.
	  On getting the result, the state changes back to allow updates again.
	• Create a memory-only Mnesia table for each collection, and use Mnesia
	  transactions to get the multiple values atomically.
	• Change the architecture of the current lock-oriented program to make
	  better use of Erlang's features.

 From bottom to top:
  - The last one doesn't really answer the orignal poster's question.
    At least, imagining myself in the OP's shoes, I would not find that
    answer informative.  Change it HOW?  WHICH features?  In what way  
better?

  - The second one might well be the right thing to do in a production
    system.  However, someone who is still struggling with how to use  
messages
    probably doesn't want to be told to learn another huge great  
thing, and
    might well get the impression that message passing wasn't much good
    after all.

  - As for the first one, it seemed to me that in order to do that,  
you'd
    pretty much have to solve the original problem anyway, plus you  
would
    have to come to grips with behaviours, callbacks, gen_fsm, and a  
lot of
    stuff which is practically very very useful, but not something to be
    understood in five minutes.

I suppose I can summarise it as "You gave OTP answers to what I saw as
an Erlang question".  I may well be completely mistaken about where the
OP was coming from, but I understood the question to be specifically a
question "how can the OP solve this problem directly using message  
passing."
OTP answers are very often precisely the right answers, so don't stop
giving them.




More information about the erlang-questions mailing list