on Fri Aug 05 2016, Joe Groff <swift-users-AT-swift.org> wrote: > Since your backing buffer is copy-on-write, you can do the in-place > mutation optimization in your immutable implementations, something > like this: > > class C { > var value: Int > init(value: Int) { self.value = value } > } > > struct S { var c: C } > > func addInts(x: S, y: S) -> S { > var tmp = x > // Don't use x after this point so that it gets forwarded into tmp > if isKnownUniquelyReferenced(&tmp.c) { > tmp.c.value += y.c.value > return tmp > } else { > return S(c: C(value: tmp.c.value + y.c.value)) > } > } > > which should let you get similar efficiency to the mutating > formulation while using semantically immutable values.
Yep, that works. The only other trick I know of is to create a composition of operations that you apply at the end with an operator: pixelXes <- multiply(perspectiveCorrections).sin speeds <- multiply(pixelXes) .multiply(feetToMeters) .subtract(cameraSpeed.mean) let sumSquaredOfResiduals = speeds.sumOfSquares HTH, -- -Dave _______________________________________________ swift-users mailing list swift-users@swift.org https://lists.swift.org/mailman/listinfo/swift-users