1. Hot code update<div>2. WYSIWYG code (© Lev Walkin) — you get exactly desired behaviour of your code without invasions from dark side</div><div>3. Dialyzer — first you don't care about types, then you do; it really helpful</div>
<div>4. Code coverage integrated with test frameworks (eunit, common test)</div><div>5. Rich processes tracing: messages, function calls with templates, process related events</div><div>6. Fprof, Eprof</div><div>7. Supervisors tree — the best way to organize your code parts in project and runtime system<br>
<br><div class="gmail_quote">On 29 August 2012 12:13, Mike Oxford <span dir="ltr"><<a href="mailto:moxford@gmail.com" target="_blank">moxford@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="gmail_quote"><div class="im">On Tue, Aug 28, 2012 at 8:56 PM, Garrett Smith <span dir="ltr"><<a href="mailto:g@rre.tt" target="_blank">g@rre.tt</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
So you get systems that run effectively with less code, less testing,<br>
and less maintenance.<br>
<br>
I'd be curious how many people, based on their experience building<br>
production Erlang systems, would agree or disagree with this.<br></blockquote><div><br></div></div><div>I believe you're treading dangerous territory here. :-)</div><div><br></div><div>There is less custom code...but such is the case with any framework.</div>
<div>There is less testing ONLY due to less volume of code, which is the case with any framework.</div><div>There is less maintenance due to ... you guessed it, less volume of code.</div><div><br></div><div>So, really, you're looking at "Framework vs Non-Framework."</div>
<div><br></div><div>What "sold me" on erlang originally was:</div><div>1) Distributed was "easy."</div><div>2) Shared-state was built-in</div><div>3) No downtime code deployments</div><div>4) Supervisors</div>
<div><br></div><div>The reality:</div><div>1) Distributed is easy, kinda. Easier. Getting a message to another node is trivial, which is what Erlang does and from then on it's application-level code (eg, you still have to write it and do work. :)</div>
<div><br></div><div>2) Shared state is done via mnesia. House of cards, IMO, having run it. It's just too fragile as-is. One node burps and your whole database goes into a corner, sucking its thumb until you fix it. Ulf's unsplit is a good start, but given current-state I'd have to say it's too risky to run in production for anything without a back-plane network. Split-brain is hard -- may be that wedging Riak in would work here (Ulf's unsplit uses vector-clocks, inspired by Riak.) It would be nice if mnesia at least said "node dead is dead, let the rest run even if the first comes back." We had a 3-node cluster and one node would burp and all three nodes would fail to run. Setting master-node works but then you start going down the "not fully distributed" route. Majority helps ... until a node comes back. If you have 30 nodes and one goes down and comes back...both have node-down states and your whole set of 29 runs to the corner.... Majority + Unsplit + Master is about the best you can get, until your partition falls along Master-lines and when you come back 20+ nodes are all doing copies off the master to sync up. 8-) I really like mnesia...really really, and I really really tried to shoehorn it in. Maybe I'm doing something wrong, but I see similar issues with RabbitMQ's use of mnesia so I don't think I'm too far off. I would love to be shown incorrect here....please? Anyone?</div>
<div> </div><div>3) These are hard. Doable, but you end up with a LOT of testing of the upgrade/downgrade paths. You start questioning the value vs "rolling restarts." It's a golden-hammer when you need it, though you have to really look at the value and "cost" of using such a weapon regularly (testing time vs just rolling restarts.)</div>
<div><br></div><div>4) #winning =:= #winning Love 'em.</div><div><br></div><div>That said, Erlang has become my personal "gold standard" for other languages, and by which I judge all others. :)</div><div>
<br></div><div>-mox</div></div>
<br>_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br>Max Treskin<br>
</div>