Dr. Drang:
Although I’m far from a Unix wizard, I do find myself thinking of transformations in terms of command-line utilities rather than Text Factory actions. If only BBEdit would let me just type out a pipeline to run the selected text through. Surprisingly, it’s not all that hard to give it that ability.
[…]
As you can see, most of Any Filter is an AppleScript command that displays a dialog box asking for and collecting the command. The final line is just the execution of that command. Because this is saved as a Text Filter, BBEdit knows to feed it the selected text (or the entire current document) and replace that text with Any Filter’s output.
AppleScript BBEdit Mac macOS 10.12 Sierra Terminal
Krzysztof Zabłocki:
Swift allows us to compose protocol requirements by using &
operator, that means that our entities can now contain just a single dependency storage:
class FooViewModel {
typealias Dependencies = HasImageProvider & HasArticleProvider
let dependencies: Dependencies init(..., dependencies: Dependencies)
}
In your app controller or flow coordinator (Whatever is used to create new entities) you can store all dependencies under a single container struct:
struct AppDependency: HasImageProvider, HasArticleProvider, HasPersistanceProvider {
let imageProvider: ImageProvider
let articleProvider: ArticlesProvider
let persistanceProvider: PersistenceProvider
}
Now all app dependencies are stored in a simple data container, one that doesn’t have any logic, its not magical or anything, its just a plain struct.
Craft Programming Swift Programming Language Testing
Jordan Morgan:
The best part is, how it works isn’t magical: It just prevents the compiler from pushing more frames, thus preventing more stack growth. Why not let the callee reuse the frame stack of the caller instead of popping another one on?
[…]
That said, tail call elimination is not mutually exclusive to recursion — though it’s a case study for its benefits. In fact, in Apple’s sample code in their WWDC session mentioned above, drawRect:
reaps its rewards even though it’s not an inherently recursive function.
[…]
In particular, in our world as iOS developers it can also happen if[…]
[…]
There are some use cases to disabling the magic here if you’d so choose. Namely, for the sake of profiling — you’ll get a true, clean stack trace by turning this off.
Kay Butter:
Tail Call Elimination is not always easy to rely on though with ARC inserting release
or autorelease
calls after what should be a tail call :/
Automatic Reference Counting (ARC) iOS Mac Objective-C Optimization Programming Swift Programming Language