> On Apr 28, 2016, at 6:20 PM, Xiaodi Wu <[email protected]> wrote: > > On Thu, Apr 28, 2016 at 6:44 PM, Erica Sadun <[email protected] > <mailto:[email protected]>> wrote: > Can you give me a specific example of where this approach fails for you? > > -- E > > > Sure, I'll describe one (renaming some things for clarity and stripping out > the meat of the code, because it's not relevant and because it's not > elegant)-- > > In one file, I have: > > ``` > class PortedTransfom { > // this class was ported from C++ > // it transforms input FP values to output values in a complicated way > // it's a standalone entity and the algorithm is even under patent > // (not owned by me, though it's legal for me to use it for my purposes) > // for this reason, this ported code lives in its own file > } > ``` > > In another file, I have: > > ``` > class MyAsinhTransform { > // this class was written by me > // nothing earth-shattering here > } > > class MyLogTransform { > // also written by me > } > > class MyLinearTransform { > // also written by me > } > ``` > > Transforming values one-at-a-time isn't fast enough, so in another file, I > have: > > ``` > import Accelerate > > protocol AcceleratedTransform { > func scale(_: [Double]) -> [Double] > func unscale(_: [Double]) -> [Double] > // other functions here > // some are already implemented in PortedTransform, though > } > extension AcceleratedTransform { > // default implementations for some functions > // but not `scale(_:)` and `unscale(_:)`, obviously > } > > extension MyAsinhTransform : AcceleratedTransform { > // use BLAS to implement scale(_:) and unscale(_:) > // and override some default implementations > } > > extension MyLogTransform : AcceleratedTransform { > // use BLAS to implement scale(_:) and unscale(_:) > // and override some default implementations > } > > extension MyLinearTransform : AcceleratedTransform { > // use BLAS to implement scale(_:) and unscale(_:) > // and override some default implementations > } > > extension PortedTransform : AcceleratedTransform { > // use BLAS to implement scale(_:) and unscale(_:) > } > ```
I think I'm missing something here in terms of a question. Your imported stuff is your imported stuff. Your extension implements "required" elements but not scale or unscale. If you extend MyAsinhTransform, you do required but not override for scale/unscale. You do required override for anything you replace from AcceleratedTransform. What is BLAS? And what are you specifically asking about? -- E, apologizing for not understanding
_______________________________________________ swift-evolution mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-evolution
