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

Reply via email to