[Jprogramming] Early assignment WAS: Non-mutable arrays
Henry Rich
henryhrich at gmail.com
Fri Oct 7 09:16:40 UTC 2016
Unmodified by the u of u :: v, yes, in case u fails. When v runs it
runs like any other verb, possibly executing in place.
Henry Rich
On 10/7/2016 4:57 AM, Erling Hellenäs wrote:
> There is exception handling even inside a tacit expression? In the
> exception handling procedure the user expects the arguments to be
> unmodified?
>
> ((1 { 0:) :: 1:) 4
>
> 1
>
> /Erling
>
>
> On 2016-10-06 01:23, 'Pascal Jasmin' via Programming wrote:
>> Just in case I'm not the one misunderstanding,
>>
>> is there a counter example to
>>
>> "There is no possible f such that f N differs from f N =: (anonymous
>> noun)"
>>
>>
>>
>> ----- Original Message -----
>> From: Henry Rich <henryhrich at gmail.com>
>> To: programming at jsoftware.com
>> Sent: Wednesday, October 5, 2016 3:58 PM
>> Subject: Re: [Jprogramming] Early assignment WAS: Non-mutable arrays
>>
>> All I can say is, It doesn't work that way. (You have 2 statements,
>> each with 2 versions. All 4 statements are false.)
>>
>> Henry Rich
>>
>> On 10/5/2016 10:10 AM, 'Pascal Jasmin' via Programming wrote:
>>>> Assignment to (a) increments the usecount, giving (a) a usecount of 2.
>>> I think in the expression,
>>>
>>>
>>> f N =: 1 2 3 NB.(where 1 2 3 is anonymous noun/result)
>>>
>>>
>>> N or 1 2 3 has a use count of 1 here, right after the assignment.
>>> (more precisely the anonymous "usecount" is freed)
>>>
>>> There is no possible f such that f N differs from f N =: (noun). ie.
>>> the line is always identical to the 2 lines
>>>
>>> N =: (noun)
>>> f N
>>>
>>>
>>>
>>>
>>> ----- Original Message -----
>>> From: Henry Rich <henryhrich at gmail.com>
>>> To: programming at jsoftware.com
>>> Sent: Tuesday, October 4, 2016 10:42 PM
>>> Subject: Re: [Jprogramming] Early assignment WAS: Non-mutable arrays
>>>
>>> Yes, you're right, I misanalyzed. It goes like this:
>>>
>>> 1 2 3 starts with a usecount of 1, and a mark to indicate that the
>>> usecount should be decremented when the sentence completes. [When the
>>> usecount is decremented to 0 the block is freed].
>>>
>>> Assignment to (a) increments the usecount, giving (a) a usecount of 2.
>>> That makes (a) ineligible for in-place operations.
>>>
>>>
>>> Henry Rich
>>>
>>>
>>> On 10/4/2016 10:21 PM, 'Pascal Jasmin' via Programming wrote:
>>>> this didn't seem to work in beta 12 (latest all in one installer)
>>>>
>>>>
>>>>
>>>>
>>>> ----- Original Message -----
>>>> From: Henry Rich <henryhrich at gmail.com>
>>>> To: programming at jsoftware.com
>>>> Sent: Tuesday, October 4, 2016 10:14 PM
>>>> Subject: Re: [Jprogramming] Early assignment WAS: Non-mutable arrays
>>>>
>>>> Yes, this is executed in-place.
>>>>
>>>> In general, an assignment to a name whose value is not in use in
>>>> another
>>>> name causes that value to become eligible for in-place execution (with
>>>> the possibility of early assignment) as long as the execution stack
>>>> contains nothing beyond the value to be assigned.
>>>>
>>>> a=: ('b' ,~ 4,~])a =: 1 2 3 NB. in place
>>>>
>>>> (a=: ('b' ,~ 4,~])a =: 1 2 3) [ 1 NB. not in place
>>>>
>>>> Henry Rich
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> On 10/4/2016 9:28 PM, 'Pascal Jasmin' via Programming wrote:
>>>>> I made different suggestions in my beta post. namely, this
>>>>> expression should also be optimized:
>>>>>
>>>>>
>>>>> a=: ('b' ,~ 4,~])a =: 1 2 3
>>>>>
>>>>> if possible, early assignment should also apply in scripts (even
>>>>> if through tacit expressions).
>>>>>
>>>>> In general though, I think the advice "assign to new name to be
>>>>> safe", works ok, but above line in console can be edited and
>>>>> reapplied with consistent results.
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> ----- Original Message -----
>>>>> From: Henry Rich <henryhrich at gmail.com>
>>>>> To: programming at jsoftware.com
>>>>> Sent: Tuesday, October 4, 2016 7:25 PM
>>>>> Subject: [Jprogramming] Early assignment WAS: Non-mutable arrays
>>>>>
>>>>> The whole point of operation in place is to avoid having to copy an
>>>>> in-placeable argument; copying the argument would not be a good
>>>>> solution.
>>>>>
>>>>> After hearing the screams and dodging the dead cats, I have some
>>>>> proposals:
>>>>>
>>>>> 1. Early assignment (which is what we'll call the act of assigning an
>>>>> intermediate value to a name that is about to be reassigned) will
>>>>> apply
>>>>> only for sentences executed from an explicit definition. That will
>>>>> eliminate the most likely source of confusion, which is erroneous
>>>>> sentences typed into the console during debugging and exploration.
>>>>>
>>>>> For discussion here:
>>>>>
>>>>> 2. Early assignment could be disabled for sentences executed between
>>>>> try. and catch. This would apply only to sentences from the same
>>>>> execution that contains the try. Verbs called from within the try.
>>>>> block will continue to have early assignment enabled as specified
>>>>> by the
>>>>> setting of 9!:52''.
>>>>>
>>>>> 3. Error message text could be modified to indicate that an early
>>>>> assignment occurred. I worry about this because existing code might
>>>>> rely on the text of messages.
>>>>>
>>>>> Henry Rich
>>>>>
>>>>>
>>>>> On 10/4/2016 3:01 PM, Louis de Forcrand wrote:
>>>>>> I second Raul; the behaviour described is very counter-intuitive.
>>>>>> Maybe add a third setting to 9!:53 which copies a at the start of
>>>>>> a tacit verb involving in place operations?
>>>>>>
>>>>>> Also, what is the current (j804) behaviour when an in-place
>>>>>> ammend fails?
>>>>>> Since there's only one operation, if it fails a shouldn't be
>>>>>> modified should it?
>>>>>> If so, copying a at the beginning of a tacit verb containing more
>>>>>> than one in-place operation (IPO) should always be faster than
>>>>>> the current implementation, since copying would only be needed
>>>>>> when two or more IPOs take place.
>>>>>>
>>>>>> Louis
>>>>>>
>>>>>>> On 04 Oct 2016, at 07:15, Raul Miller <rauldmiller at gmail.com>
>>>>>>> wrote:
>>>>>>>
>>>>>>> When there are many verbs involved, it seems like the relative
>>>>>>> cost to
>>>>>>> make a copy of the original at the start should be minor.
>>>>>>>
>>>>>>> Thanks,
>>>>>>>
>>>>>>> --
>>>>>>> Raul
>>>>>>>
>>>>>>>
>>>>>>>> On Mon, Oct 3, 2016 at 10:52 PM, Henry Rich
>>>>>>>> <henryhrich at gmail.com> wrote:
>>>>>>>> The shape is just the tip of the iceberg. If the verb in
>>>>>>>> question were m},
>>>>>>>> there would be no way to restore (a).
>>>>>>>>
>>>>>>>> And in general, many in-place verbs may have executed before
>>>>>>>> the error. The
>>>>>>>> original (a) may be long gone.
>>>>>>>>
>>>>>>>> If you foresee this as a problem, you should execute 9!:53(0)
>>>>>>>> to turn off
>>>>>>>> early assignment.
>>>>>>>>
>>>>>>>> Henry Rich
>>>>>>>>
>>>>>>>>> On 10/3/2016 10:34 PM, Raul Miller wrote:
>>>>>>>>>
>>>>>>>>> There are two reasons to be concerned about the value of a in
>>>>>>>>> the error
>>>>>>>>> case.
>>>>>>>>>
>>>>>>>>> The minor one is error recovery. This is a simple example, and
>>>>>>>>> easy to
>>>>>>>>> understand. What happens, though, when someone uses
>>>>>>>>> try./catch. with a
>>>>>>>>> large code base? This issue would not be easy to isolate, nor
>>>>>>>>> will it
>>>>>>>>> be easy to understand.
>>>>>>>>>
>>>>>>>>> A bigger issue is the one you mentioned here: debugging. When
>>>>>>>>> debugging code which takes a long time to run, you will at
>>>>>>>>> times want
>>>>>>>>> to fix the issue and continue, rather than burning the time
>>>>>>>>> necessary
>>>>>>>>> to restart from the beginning.
>>>>>>>>>
>>>>>>>>> And, also, this seems like it will be hard to explain and at
>>>>>>>>> the same
>>>>>>>>> time distract from issues which are more important.
>>>>>>>>>
>>>>>>>>> But keep in mind that I am not recommending the (a=:0)](a)
>>>>>>>>> mechanism
>>>>>>>>> for this example. I made that suggestion for hypothetical cases.
>>>>>>>>>
>>>>>>>>> I am instead recommending that the shape of a be saved
>>>>>>>>> somewhere and
>>>>>>>>> that a have its shape set to what it originally was, in the error
>>>>>>>>> case.
>>>>>>>>>
>>>>>>>>> Is there some reason why you think that restoring a's shape in
>>>>>>>>> the
>>>>>>>>> error case is not a viable approach here?
>>>>>>>>>
>>>>>>>>> Thanks,
>>>>>>>> ----------------------------------------------------------------------
>>>>>>>>
>>>>>>>> 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
>>>> ----------------------------------------------------------------------
>>>> 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
More information about the Programming
mailing list