<br><font size=2 face="sans-serif">Thank you Richard, Mikael and Raimo.
 Here's another question I got as a follow up.</font>
<br>
<br><font size=2 face="sans-serif">Can pids be reused, even though the
documentation refers to them as unique?  Any info on the underlying
implementation of how a pid is uniquely generated across a cluster?</font>
<br>
<br><font size=2 face="sans-serif">If they are not unique, what precautions
should application developers use to guard against this?</font>
<br><font size=2 face="sans-serif">____________________________________________<br>
Dennis Byrne<br>
ThoughtWorks - Chicago<br>
312-505-7965<br>
</font>
<br>
<br>
<br>
<table width=100%>
<tr valign=top>
<td width=40%><font size=1 face="sans-serif"><b>"Richard A. O'Keefe"
<ok@cs.otago.ac.nz></b> </font>
<p><font size=1 face="sans-serif">09/04/2008 12:41 AM</font>
<td width=59%>
<table width=100%>
<tr valign=top>
<td>
<div align=right><font size=1 face="sans-serif">To</font></div>
<td><font size=1 face="sans-serif">Dennis Byrne <dbyrne@thoughtworks.com></font>
<tr valign=top>
<td>
<div align=right><font size=1 face="sans-serif">cc</font></div>
<td><font size=1 face="sans-serif"><erlang-questions@erlang.org></font>
<tr valign=top>
<td>
<div align=right><font size=1 face="sans-serif">Subject</font></div>
<td><font size=1 face="sans-serif">Re: [erlang-questions] A whole bunch
of implementation details</font></table>
<br>
<table>
<tr valign=top>
<td>
<td></table>
<br></table>
<br>
<br>
<br><tt><font size=2><br>
On 4 Sep 2008, at 2:37 pm, Dennis Byrne wrote:<br>
> How does stack memory grow?  Am told Prolog does this dynamically
 <br>
> and I was wondering if Erlang did the same.<br>
<br>
Some Prologs (DEC-10 Prolog, Quintus Prolog, SICStus Prolog, ...) do  <br>
this,<br>
some Prologs (C Prolog, SWI Prolog) don't.<br>
The Burroughs B6700 used to do this for Algol, BASIC, COBOL, DMAlgol,<br>
ESPOL, FORTRAN, Pascal, and PL/I, back in the late 60s.<br>
<br>
"Modern", less capable, systems like say Windows or Unix, do
not do this<br>
because they don't know where the pointers are.  The B6700, Prolog
 <br>
systems,<br>
and Erlang systems, tag each word of memory to say what it is, so you  <br>
can<br>
infallibly find the pointers.  With that, moving a stack is tedious
 <br>
rather<br>
than difficult.<br>
<br>
>  Does heap memory contract?<br>
<br>
It can.<br>
><br>
> Exactly what is the tipping point between what gets passed by value
 <br>
> and what gets passed by reference?<br>
<br>
There is no pass by reference.  All binaries are passed by value.
  <br>
Some binary values are<br>
represented by pointers.  Some of those pointers point to shared  <br>
blocks, some don't.  But<br>
it is still pass by value.  Pass by reference is, by definition,  <br>
passing the address of a<br>
VARIABLE ('var x: t' in Pascal, 't& x' in C++).<br>
<br>
Notionally when you send anything in a message, it is copied,  <br>
otherwise it isn't.<br>
Some Erlang systems have had a shared or hybrid heap, in which the  <br>
logical copy is<br>
a no-op.<br>
<br>
>  The large binary trick is common knowledge, any other corner
cases?<br>
> How does the VM differentiate between a node that is temporarily  <br>
> unresponsive and one that is down?  In other words, at what point
 <br>
> does a node give up on a peer?<br>
<br>
There is no infallible way to tell.  Mistakes will always be made.<br>
The net_kernel module sets up a "ticker" process that periodically<br>
sends a message to every node it's in communication with; if it<br>
doesn't hear from a node after a while it assumes it's down.<br>
If a node is shut down in an orderly way it will tell is peers<br>
that it is going down.<br>
<br>
<br>
</font></tt>
<br>