Re: relationship to SRFI-25 Jamison Hope 28 Sep 2015 22:22 UTC

On Sep 28, 2015, at 5:53 PM, Bradley Lucier <xxxxxx@math.purdue.edu> wrote:

> (4) when using this array API there is no point in this whole process where a bang occurs textually.

This could be resolved quite easily if the API provided array-set! instead
of just array-setter.  I hesitate to suggest adding more procedures to the
API, since I think there are already too many, but it would feel much more
natural if there were array-get and array-set! procedures that called
array-getter and array-setter under the hood.

-JH

> On 09/28/2015 05:29 PM, Per Bothner wrote:
>>
>>
>> On 09/28/2015 02:04 PM, Bradley Lucier wrote:
>>> On 09/27/2015 01:33 AM, Per Bothner wrote:
>>>>
>>>> I think this has been mentioned before: the name
>>>> specialized-array-share!
>>>> should not end in a '!'.
>>>
>>> Perhaps, I don't remember the remark.
>>>
>>> Let me say what issue I was trying to address by adding "!" and you
>>> can offer some advice.
>>>
>>> I've generally thought that the bang "!" in set-cdr!, vector-set!,
>>> etc., was to alert the reader that something strange or nonlocal could
>>> happen.
>>
>> I thank of it as something that causes a side-effecting modification.
>> Can you think of counter-examples?
>>
>>> In our case, if we have
>>>
>>> (define domain (interval '#(0 0) '#(100 100)))
>>> (define a (array->specialized-array (array domain list)))
>>>
>>> for which
>>>
>>> ((getter a) 0 0) => (0 0)
>>>
>>> and then
>>>
>>> (define b (specialized-array-share! a (interval '#(0) '#(100)) (lambda
>>> (i) (values i j))))
>>>
>>>
>>> then calling
>>>
>>> ((setter b) #t 0)
>>>
>>> will change subsequent values of
>>>
>>> ((getter a) 0 0) => #t
>>
>> How is this different from:
>>
>> #|kawa:1|# (define lx (list 'x 'a 'b))
>> #|kawa:2|# (define ly (cons 'y (cdr lx)))
>> #|kawa:3|# (set-car! (cdr ly) 'w)
>> #|kawa:4|# lx
>> (x w b)
>>
>> The specialized-array-share! is the equivalent of line 2 - i.e. we
>> create a new data structure
>> that share with another.
>
> I agree completely.
>
> (1) I don't particularly like my notation; (2) sharing mutable structures can cause strange situations because of later mutations; (3) these later mutations using existing primitive procedures usually have a bang in their names to indicate that they are mutations (I think it's to alert the code reader that the code is doing something dangerous); (4) when using this array API there is no point in this whole process where a bang occurs textually.
>
> So I put a bang in the notation for the sharing step.
>
> This is just me trying to explain my previous notational choice, and I'll probably remove the bang in the next revision.
>
> Brad
> To unsubscribe from this list please goto http://www.simplelists.com/confirm.php?u=eHmYtP8qzjHs0XIbGTgBtEfrRCCJYnAa

--
Jamison Hope
xxxxxx@alum.mit.edu