That's great Henry - deserves a page on the wiki IMO!

On Fri, Nov 25, 2011 at 7:18 AM, Henry Rich <[email protected]> wrote:
> As examples of what Roger is saying:
>
>    abb =. (1e6 $ 5) ; (1e6 $ 5)
>    ts '''a b'' =. abb'
> 8.36834e_6 1600    NB. no data-copying here
>    ab =. (1e6 $ 5) ,: (1e6 $ 5)
>    ts '''a b'' =. ab'   NB. data was copied
> 0.0227605 1.25844e7
>    ts 'c =. a;b'
> 7.53628e_6 960   NB. no copying
>
> My understanding has been that an unboxed noun contains a header which
> includes a pointer to a data block which comprises all the values of the
> noun.  This data block carries a reference-count, with no
> reference-count for any subarrays.  An boxed noun is represented as an
> array (or atom) of such headers, one for each atomic box.
>
> So, in your example
> 'a b c' =. abc =. i.3 4 5
>
> there is no header for each row of abc, and the data for a, b, and c
> will be copied.
>
> In
> 'n m' =. nm =. 12; 'monkeys'
>
> there is a header for each atom of nm, so no copy is required.
>
> In
>
> 'p q r' =. y
>
> it depends on y.  If y was created from (a;b;<c) the case will be like
> the monkeys example, but if by (a,b,c) a copy will be required.
>
> I would be obliged if Roger would indicate what he wasn't sure about,
> because it would show where my understanding is deficient.  I know there
> is more to boxed arrays than my model accounts for, in particular when
> and whether the array of headers gets copied when a verb is evaluated.
> A puzzling example is:
>
>    bb =. <"0 i. 10 11 12 13 100
>    ts 'c =. bb'
> 0.343118 704
>    ts 'c =. ] bb'
> 0.543127 7.02944e6
>
> In c =. bb, the interpreter reports that it filled 704 bytes, but it
> took 1/3 of a second to do it.  Could that be an error in space
> accounting?  But the suggests that the array of headers is rebuilt when
> the noun is copied.
>
> In c =. ] bb, apparently it used an array that was 4 bytes per atom of
> bb, which suggests that the array of headers was rebuilt for the
> execution of ]  .
>
> Henry Rich
>
>
> On 11/24/2011 1:44 AM, Roger Hui wrote:
>> This does not apply for the first example, nor for the general case of the
>> third example.  Not sure about the second example.  In any case you can get
>> answers to these questions yourself by doing some experiments and checking
>> the space consumed.
>>
>>
>>
>> On Wed, Nov 23, 2011 at 10:35 PM, Ben Gorte - 
>> LR<[email protected]>wrote:
>>
>>> Thanks for the explanation. Would this also apply to
>>>
>>> 'a b c' =. abc =. i.3 4 5
>>>
>>> or to
>>>
>>> 'n m' =. nm =. 12; 'monkeys'     ?
>>>
>>> In that case it is perhaps not so expensive to pass more than two things
>>> to a verb and separate these inside it wilh
>>>
>>> 'p q r' =. y    (?)
>>>
>>> Ben
>>> ________________________________________
>>> From: [email protected] [[email protected]]
>>> on behalf of Roger Hui [[email protected]]
>>> Sent: Wednesday, November 23, 2011 3:36 PM
>>> To: Programming forum
>>> Subject: Re: [Jprogramming] One noun with two names
>>>
>>> Names are reference-counted so that if you say a=:b=: 123 the reference
>>> counts for a and b are each one more than if you'd said a=:123 and b=:123.
>>> Before the interpreter modifies an array it checks the reference count and
>>> if that count is not the minimum it will make a copy of the array before
>>> modifying it.
>>>
>>>> (but what would be the prupose?)
>>>
>>> Shorter code.   a=:b=:c=: blah  is a common construct, in many programming
>>> languages.
>>>
>>>
>>>
>>> On Wed, Nov 23, 2011 at 6:16 AM, Ben Gorte - LR<[email protected]
>>>> wrote:
>>>
>>>>
>>>> Dear J forum,
>>>>
>>>> To my surprise I found out that
>>>>
>>>>     a =. b =. 480 640$0
>>>>
>>>> is not the same as
>>>>
>>>>     a =.  480 640$0
>>>>     b =.  480 640$0
>>>>
>>>> as the first gives you two names pointing to the same data. I guess that
>>>> should be ok, and it saves space (but what would be the prupose?)
>>>>
>>>> I passed both as pointers to a DLL (a .so in linux), which was supposed
>>> to
>>>> put two different images in a and b, and then the first is not ok. It
>>> only
>>>> works with the second variant :-)
>>>>
>>>> Greetings from Cape Town,
>>>> Ben
>>>>
>>>> ----------------------------------------------------------------------
>>>> For information about J forums see http://www.jsoftware.com/forums.htm
>>>>
>>> ----------------------------------------------------------------------
>>> For information about J forums see http://www.jsoftware.com/forums.htm
>>> ----------------------------------------------------------------------
>>> For information about J forums see http://www.jsoftware.com/forums.htm
>>>
>> ----------------------------------------------------------------------
>> For information about J forums see http://www.jsoftware.com/forums.htm
>>
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
>
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to