What other languages use the same data model as Python?

Tim Roberts timr at probo.com
Wed May 4 23:23:36 EDT 2011


harrismh777 <harrismh777 at charter.net> wrote:
>
>If I call a function in C, and pass-by-value, the data's 'value' is 
>placed on the stack in a stack-frame, as a 'value' parm... its a copy of 
>the actual data in memory.
>
>If I call a function in C, and pass-by-reference, the data's 'address' 
>is placed on the stack in a stack-frame, as a 'reference' parm... no 
>data is copied and the function must de-reference the pointer to get to 
>the data....   this is by definition.

This is not correct.  Consider an example.

  int BumpMe( int * a )
  {
      return *a+3;
  }

  int Other()
  {
      int x = 9;
      return BumpMe( &x );
  }

That is not an instance of passing an "int" by reference.  That is an
instance of passing an "int *" by value.  The fact that the parameter "a"
in BumpMe happens to be an address is completely irrelevent to the
definition of the parameter passing mechanism.

C has pass-by-value, exclusively.  End of story.

>There may be some language somewhere that does pass-by-reference which 
>is not implemented under the hood as pointers, but I can't think of 
>any... 

Fortran had genuine pass-by-reference.  In Fortran, you could write a
program like this:

       SUBROUTINE CONFUSION(IVALUE)
       INTEGER IVALUE
       IVALUE = IVALUE + 1
       END

       PROGRAM MAIN
       CONFUSION(4)
       END

That program would actually modify the value of the constant 4.  Such an
abomination is simply not possible in C.  Is that implemented
under-the-hood with pointers/addresses?  Of course it is.  However, that
does not change the parameter passing model as defined by the language
specification.
-- 
Tim Roberts, timr at probo.com
Providenza & Boekelheide, Inc.



More information about the Python-list mailing list