iOS Weekly Minute - April 6, 2018

Posted on Fri 06 April 2018 in Open Source Swift

Big Announcements

The big news in the Swift community is the announcement of the Swift for Tensorflow project. It's being spearheaded by none other than Chris Lattner himself, and in the spirit of Swift and an "in the open" design and development process, he's already opened a public Google Group where people are encouraged to subscribe and start contributing. I really appreciate the open and collaborative spirit of this project, which has been brought from the highly successful Swift Evolution process.

If you're just now hearing about Tensorflow, it's a machine learning framework and toolkit that supports a variety of machine learning models (notably, large "deep learning" convolutional neural networks) and platforms. It was originally developed by Google and is now open source. Tensorflow is commonly used in the context of interpreted languages (python, Lua, etc), so it's nice to see a modern strongly typed language like Swift become available for developers in the machine learning space. The video (also linked below) in which the project was announced goes into some detail about the features we can expect: notebook like Playgrounds support for running models and visualizing results, compiler checked correctness, and compiler checked auto differentiation, to name a few.

I think this is great news for Swift developers, as it opens yet another avenue (in addition to CoreML) for machine learning on Apple platforms and beyond.

Articles I'm Reading

With this past Sunday being April Fool's day, developer's didn't miss their chance to post articles with some unbelievable claims. Since tech news is a bit unbelievable to begin with these days, I feel like we've had to step up our game this year. Some highlights below:

ZeroVer: The 0-based Versioning System

The ZeroVer version system page is a parody of other versioning systems (a la semver.org) that that proposes:

Your software's major version should never exceed the first and most important number in computing: zero.

What puts the icing on the cake for me, though, is the list of projects that are still at version 0. Some projects have literally been around for decades still haven't made the leap to 1.0 (looking at you, MAME). 😂

However, for a more serious and nuanced take on software versioning, Designing a Version is a good resource, wherein CalVer is originally proposed.

How to cut Swift compile times by half

The parody article about a hidden cryptominer inside the Swift compiler perfectly threads the line between the preposterous and the realm of possibility. On the one hand, it's only a matter of time until some compiler toolchain is hijacked with a cryptominer (through a nefarious distribution or otherwise), but on the other hand... this is Swift we're talking about here! Is nothing sacred!

The article includes some fake interviews with (fake) Swift compiler team members, notably one "Ed Kermenek":

Hahahaha – and you really thought type inference could be that slow? I thought the plan would fail early when some folks realized compiling was slower than Objective-C

Swift Tip: Automatic Equatable and Hashable Synthesis in Swift 4.1

The release of Swift 4.1 in Xcode 9.3 brings with it many new features, but the feature that first caught my eye was the automatic Equatable and Hashable synthesis that was added in SE-0185. The gist of the new feature being that, so long as a type's properties are all themselves Equatable or Hashable, then simply making the type conform to Equatable or Hashable will cause the compiler to synthesize the necessary equality operator or hash function.

The big benefit here comes in the form of "robustness", in the sense that previously 1) modifying a type's properties didn't throw any sort of warning or error if the equality operator or hash function wasn't updated to suit (meaning runtime unit tests are the only means of enforcing correctness) and 2) that writing a performant and correct hash function is not trivial and can fail subtly when collection sizes exceed developer expecations.

So, Swift types that need to be Equable are simplied from this (with Swift 4.0):

struct Address: Equatable {
  let street: String
  let city: String
  ...

  static func ==(lhs: Address, rhs: Address) -> Bool {
    return lhs.street == rhs.street &&
      ...
  }
}

To this (with Swift 4.1):

struct Address: Equatable {
  let street: String
  let city: String
  ...
}

This was previously a compelling use case for Sourcery (a Swift metaprogramming framework), so it's interesting that this is now part of the compiler toolchain itself. This also follows along in the footsteps of Codable that was added in Swift 4.0, which is also implemented using compiler generated code based on protocol conformance and type content.

So... a trend starts to emerge where features are added to the language that are traditionally implemented using reflection or other runtime features, but are instead implemented with compiler autogeneration. The huge benefit of this approach is that the compiler can guarantee correctness and robustness at compile time, rather than waiting to find issues during runtime using a reflection system. And indeed, this is the direction that the Tensorflow work is taking (where finding issues at runtime can be quite costly): the compiler can offer features that are typically runtime based (like auto differentiation) to help find and suggest solutions to problems earlier in the dev cycle.

Videos I'm Watching

Writing Blockchain Clients in Swift

Tamar Nachmany explains the basics of blockchains (specifically Ethereum), as well as how to develop client apps that interact with a blockchain network. The big takeaway that I get is the opportunity that exists in the mobile space to make a big impact in the way that developers work with blockchain systems. There's not any big framework or initiative in the mobile space, so it's a good chance to make a big impact while the technology matures and becomes more stable over time. What's also striking is that the tooling is far better and more widely supported in JavaScript than really anywhere else. So, who will write the next Alamofire or CocoaPods for blockchains?

Lattner's Swift for Tensorflow Announcement

The official announcement presentation at the 2018 TensorFlow Dev Summit. The video feels like a WWDC talk: a bit staged and rehearsed, but still exciting with solid content and appeal. See the opening section of this post for more links and info.


And that's all folks! Thanks for making it this far, and stay tuned for next week! I appreciate feedback, so if ya'll got some thoughts, get @me or let me know in the comments.