To add to Josh's comments. If you have an object o at a place p, and you 
need to go to a place q, and then come back and modify o (and not a copy 
of o), you have to use a GlobalRef. (You can also use a PlaceLocalHandle.)

Thus:

val a = makeArray();
val globalA = GlobalRef(a);
val home = here;
at (here.next()) {
     val x = ...
     at (home) { // go back to the original place
          globalA()(0) = x; // assign x to a(0).
    }
}


at(here.next())
>                            at(here)
>                            {
>                                    for(p in src_array)
>                                    {
>                                            src_array(p) = 10000;
>                                    }
>
>                            }
>
>                            for(p in src_array)
>  Console.OUT.println(src_array(p));



On 12/17/2010 1:14 AM, Josh Milthorpe wrote:
> Hi Kirak,
>
> I'm assuming that src_array was created at (here).
>
> In the first example, the src_array that is modified is actually a copy
> of a copy - it is copied to here.next() in the first line and then again
> (to the same place).  Note that at(here) is _not_ a noop - it copies all
> variables in the closure environment!  This is to make the behaviour of
> the at statement consistent regardless of the target place.
>
> The second example doesn't actually work for me, etiher (against SVN
> HEAD) - if I print the contents of src_array, they have not been
> updated.  Again, the src_array that is updated is a copy, so the updates
> don't affect the original src_array.
>
> Have a look at the RemoteArray class and the Array.copy(...) and
> Array.asyncCopy(...) methods.  These support a variety of patterns of
> local and remote updates - hopefully one of them matches your requirement.
>
> Cheers,
>
> Josh
>
> On 17/12/10 16:16, Kirak Hong wrote:
>> Hi,
>>
>> I have another question regarding X10 array. I tried to modify a local array
>> from remote place using following code. I noticed that there's some
>> computation running, but the content of array was never changed.
>>
>>                           at(here.next())
>>                           at(here)
>>                           {
>>                                   for(p in src_array)
>>                                   {
>>                                           src_array(p) = 10000;
>>                                   }
>>
>>                           }
>>
>>                           for(p in src_array)
>> Console.OUT.println(src_array(p));
>>
>> However, the following code seems to be working, although it is highly
>> inefficient.
>>
>>                           at(here.next())
>>                           for(p in src_array)
>>                           {
>>                                   var x : int = 0;
>>                                   at(here)
>>                                   {
>>                                           x = 10000;
>>                                   }
>>                                   src_array(p) = x;
>>                           }
>>
>> I looked at the X10 programming manual and it says it will implicitly copy
>> an object to another place if that object is used within 'at' clause.
>> However, I don't understand why above behavior happens. Can anybody tell me
>> the reason?
>>
>> Thanks,
>> Kirak



------------------------------------------------------------------------------
Lotusphere 2011
Register now for Lotusphere 2011 and learn how
to connect the dots, take your collaborative environment
to the next level, and enter the era of Social Business.
http://p.sf.net/sfu/lotusphere-d2d
_______________________________________________
X10-users mailing list
X10-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/x10-users

Reply via email to