Hi there SwiftWeekly readers! The last two weeks were full of exciting news with WWDC, interesting discussions on the Swift Unwrapped podcast and there’s plenty of new starter tasks for you, especially for SPM. Enjoy!

Starter tasks

  • SR-7823 [Package Manager] swift run intermingles SwiftPM status with tool output on stdout
  • SR-7824 [Package Manager] SwiftPM ignores missing source symlinks
  • SR-7825 [Package Manager] SwiftPM should consider a target with header files but no sources as a ClangTarget
  • SR-7826 [Package Manager] SwiftPM should warn if it skips traversing a symlink which would contain sources in it
  • SR-7829 [Package Manager] Bad error message when a tag doesn’t exist
  • SR-7904 [Compiler] AST dump - can’t distinguish files
  • SR-7933 [Tooling] SourceKit double-counts escaping and autoclosure attributes
  • SR-7979 [Package Manager] Circular Dependency in SwiftPM Causes Segfault

Submit a task by sending a pull request or opening an issue.

Swift Unwrapped

In episode 61, Jesse and JP with special guest Greg Heo discussed general announcements from WWDC 2018, not just limited to the Swift language.

In episode 62, Jesse and JP talk with Ted Kremenek, the Swift Project Lead and manager of the Languages and Runtimes team at Apple.

News and community

The biggest news from the past two weeks is, of course, WWDC. There are plenty of videos to watch, but take a closer look into these Swift related videos:

Ole Begemann made an easy-to-use playground that you can use to test the new features in Swift 4.2. If you prefer to read about it, check out Cosmin Pupăză’s article What’s New in Swift 4.2?.

Greg Heo wrote a new post on Swift Unboxed, Swift Diagnostics: #warning and #error, about the new #warning and #error directive implementations.

Brian Gesiak wrote the second part of a great article about the interaction between the Swift frontend and LLVM in terms of emitting diagnostics.

Commits and pull requests

Erik Eckstein merged optimizations for generation of optimal code for static String constants.

Xcode 10 Beta is now required to build master and swift-4.2-branch: #17000 and #17001.

Adrian Prantl merged “Use depth and index to lookup type metadata artificial variables”. The general purpose: “debug info support for generics is about to get a whole lot better”.

Slava Pestov fixed availability of inherited designated initializers.

Inherited designated initializers got the same availability as the corresponding initialier in the superclass. However if the superclass was more available than the subclass, we would generate a diagnostic that a member cannot be more available than its containing type. This diagnostic had an unknown source location, since the location was for a synthesized declaration, causing confusion.

Proposals in review

SE-0215: Conform Never to Equatable and Hashable is under review.

Never is very useful for representing impossible code. Most people are familiar with it as the return type of functions like fatalError, but Never is also useful when working with generic classes.

For example, a Result type might use Never for its Value to represent something that always errors or use Never for its Error to represent something that never errors.

Conditional conformances to Equatable and Hashable are also very useful when working with enums so you can test easily or work with collections.

But those don’t play well together. Without conformance to Equatable and Hashable, Never disqualifies your generic type from being Equatable and Hashable.

SE-0216 Introduce user-defined dynamically “callable” types is under review.

This proposal is a follow-on to SE-0195 - Introduce User-defined “Dynamic Member Lookup” Types which shipped in Swift 4.2. It introduces a new @dynamicCallable attribute, which marks a type as being “callable” with normal syntax.

[…]

Swift is exceptional at interworking with existing C and Objective-C APIs and we would like to extend this interoperability to dynamic languages like Python, JavaScript, Perl, and Ruby. We explored this overall goal in a long design process wherein the Swift evolution community evaluated multiple different implementation approaches. The conclusion was that the best approach was to put most of the complexity into dynamic language specific bindings written as pure-Swift libraries, but add small hooks in Swift to allow these bindings to provide a natural experience to their clients.

Finally

And finally — time to get some rest!