As a general rule, optimizing for performance is going to be ugly
because it's all about avoiding abstractions and taking shortcuts.

Also, as a general rule, performance does not matter for almost all
code. Usually it'll just be a relatively small part of the whole which
is a bottleneck.

These two issues fold together and generally suggest that you avoid
performance optimizations except where they are a genuine and
significant benefit.

And, also, this means you don't do performance optimizations in
contexts where you do not care enough to measure the performance
benefits.

-- 
Raul

On Tue, Jul 19, 2016 at 1:22 PM, 'Pascal Jasmin' via Beta
<[email protected]> wrote:
> My theory suggested in name of post is that functions that do in place 
> assignment lose those benefits if the abstraction is used, and at least 
> negate the benefit by overwriting the value with "the same" (previously in 
> place modified) value.
>
>
> In the assignwith definition,
>
> replacing ((y) =: ...) with (y assign ...) has a performance hit.
>
> But both use much more memory (and so time) than (NAME =: u NAME)
>
>
>
> a =. i. 10000 4  NB. fairly small
>
> timespacex 'a =: a , 1 2 3'
> 3.2e_6 1792
>
>
> timespacex '1 2 3 (] assign  (,~ ".)) ''a'''
> 3.5248e_5 528256
>
>
> equivalent assignwith slightly faster, but same memory
>
>
> ----- Original Message -----
> From: Raul Miller <[email protected]>
> To: Beta forum <[email protected]>
> Sent: Tuesday, July 19, 2016 11:43 AM
> Subject: Re: [Jbeta] with effort for inplace assignment performance
>
> What's wrong with just using this:
>
>    assign =: 4 : '(x) =: y'
>
> Or, perhaps better
>
>   Assign =: 1 : '(m) =: y'
>
> ?
>
> These are concise definitions, they get the job done, and they do not
> require any engine changes. (Which, at least in principle, allows work
> to instead be done on something else.)
>
> Put differently, what problems does this proposal solve?
>
> Thanks,
>
> --
> Raul
>
>
> On Wed, Jul 13, 2016 at 6:51 PM, 'Pascal Jasmin' via Beta
> <[email protected]> wrote:
>> I'd suggest a new built-in conjunction.  Say 128!:6 or A:
>>
>> assignwith =: 1 : 0
>> (y) =: u (y~ [ ]) :: ((i.0)"1) 1
>> :
>> (y) =: x u (y~ [ ]) :: ((i.0)"1) 1
>> )
>>
>> assignwithC =: 2 : 0
>> (y) =: u (y~ [ ]) :: (n"_) 1
>> :
>> (y) =: x u (y~ [ ]) :: (n"_) 1
>> )
>>
>> the error checking (::) is there to set an initial value if the name doesn't 
>> exist.
>>
>>  1 , assignwith (][ +: assignwith) 2 (][ , assignwith) (][erase) 'aa'
>> 1 4
>>
>> The adverb version can be shortened to
>>
>> 1 : 0
>>
>> (y) =: u ". y
>> :
>> (y) =: x u ". y
>> )
>>
>>
>> which is a neat feature of ".
>>
>> An alternative to allow tacit definitions of assignments would be the 
>> ordinary dyad:
>>
>> =::
>>
>> assign =: 4 : '(x) =: y'
>>
>> the pattern ([ =:: u) or (] =:: u) would seem straightforward to "boost" 
>> with special code for in place assignment.
>>
>> assignwith =: (] assign (u@:".)) : (]assign (u ".))
>>
>>
>> I imagine this as easy and very useful, especially in combination with 
>> inplace improvements.
>> ----------------------------------------------------------------------
>> 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