Mathematica 9 is now available
Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2010

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Pass by reference for compiled functions

  • To: mathgroup at smc.vnet.net
  • Subject: [mg114304] Re: Pass by reference for compiled functions
  • From: Oliver Ruebenkoenig <ruebenko at wolfram.com>
  • Date: Tue, 30 Nov 2010 04:05:57 -0500 (EST)

On Mon, 29 Nov 2010, Eric Michielssen wrote:

> For noncompiled functions, one can pass arguments "by reference" and then
> modify them inside the routine by assigning the function the attribute
> HoldAll.
>
> This does not work for compiled functions: it does not appear possible to
> modify arguments to compiled functions, even if they are passed as "global
> variables". That is, Mathematica responds to
>
> Myfunction = Compile[
> {{var1,_Real}},
> Module[{},
> Modify var 1 or var2;
> Return[]], {var2,_Real}];
>
> With
>
> Compile::argset: The assignment to var1 is illegal; it is not valid to
> assign a value to an argument. >>  And something similar for var2.
>
> HoldAll does not seem to apply here...
>
> This makes it memory-inefficient to modify large arrays in compiled
> functions, as one would have to operate on a copy of the array.
>
> Is there a workaround in Mathematica 8?

a workaround could be to use LibraryFunctionLoad and use the "Shared" 
attribute.

Oliver

>
> Eric Michielssen
>
>
>
>


  • Prev by Date: Re: how to recover a corrupted notebook?
  • Next by Date: Links from slide shows/PDF documents to Mathematica Manipulate demos?
  • Previous by thread: Pass by reference for compiled functions
  • Next by thread: Re: Pass by reference for compiled functions