There are three "in-place" operations for the "direct" datatypes:

```xyz=: aa i} xyz
xyz=: aa (i}) xyz
xyz=: xyz i}~ aa    NB. J6.03 or later

xyz=: xyz,aa

xyz=: b}xyz,:y
xyz=: b}y,:xyz```

=. instead of =: also works; aa or i may be parenthesized. Boxed, extended integer, and rationals are indirect datatypes; other datatypes are direct.

In-place means that an existing array is modified as opposed to creating a new array, resulting in large savings in time and space. The following examples illustrate the point:

```   xyz=: 1e6 ?@\$ 2e9
i=: 100 ?@\$ # xyz
aa=: (\$i) ?@\$ 1e3

ts=: 6!:2 , 7!:2@]  NB. time and space

ts 'xyz=: aa i} xyz'        NB. in-place
2.12317e_5 1600
ts 'xyz=: aa i} (xyz)'      NB. not in-place
0.0117526 4.19597e6
ts 'aa i}xyz'               NB. not in-place
0.0112489 4.19571e6

pqr=: 1e6 ?@\$ 2e9
b=: (\$xyz) ?@\$ 2

(b}xyz,:pqr) -: (xyz*-.b)+pqr*b
1

ts 'xyz=: b}xyz,:pqr'       NB. in-place
0.0170625 1280
ts 'b}xyz,:pqr'             NB. not in-place
0.0693116 2.09725e7
ts 'xyz=: (xyz*-.b)+pqr*b'  NB. not in-place
0.0245808 1.36326e7```

The patterns are very specific and are recognized at word formation time. Therefore, the patterns accommodate variations immaterial with respect to word formation (such as non-essential spaces), but are thwarted by syntactic variations (such as in the second benchmark above, with the extra parens).

In-place operations impose a small cost on all sentences, even those that have nothing to do with in-place operations, because it takes time to detect (or reject) the patterns. For explicit definitions, that cost is paid just once at the time of definition.

Contributed by RogerHui.

Essays/In-Place Operations (last edited 2009-09-21 17:59:25 by RogerHui)