How we built an interpreter for Swift

jacobx | 38 points

>Bitrig dynamically generates and runs Swift apps on your phone. Normally this would require compiling and signing with Xcode, and you can’t do that on an iPhone.

>To make it possible to instantly run your app, we built a Swift interpreter. But it’s an unusual interpreter, since it interprets from Swift… to Swift.

I can't understand what they're talking about, and I don't know if it's because I know too little about programming languages or if it's because they're using unusual semantics.

"a compiled language" makes no sense to me because the language itself doesn't determine whether it's compiled or interpreted. It's just a function of what compilers/interpreters exist. I could write an interpreter for C or a compiler for Python, but the languages themselves aren't compiled or interpreted.

I also don't understand what it means to "interpret" Swift to Swift. Do they mean they compile Swift to Swift (or the more modern "transpile" which means the same thing)? But it sounds like they're doing something dynamically at runtime, so it sounds more like decompiling machine code back to Swift, but the rest of the post doesn't match that interpretation.

mtlynch | an hour ago

Swift can already be used in REPL mode, not sure if it's accurate to say Swift is a strictly compiled language that a interpreter was developed for (see 'swift' command line executable). Seems misleading that this is not mentioned anywhere in the article.

jgbuddy | 2 hours ago

Could you use this to support hot module replacement? Replacing a SwiftUI view in a live app without restarting the process?

dfabulich | 2 hours ago

This is fascinating work, amazing job to the team!

Does SwiftUI have properties that uniquely make this type of interpreted system possible, or could it also use UIKit under the hood? On the surface, it seems like UIKit might be more difficult since you’d probably need to parse all of the obj-c header files in addition to the .swiftinterface.

Very cool stuff, excited to follow along how you all develop the product!

localbuilder | 2 hours ago

Do you think you can make it run in Jupyter as a Kernel?

ushakov | an hour ago
[deleted]
| 3 hours ago

Your website won't let me scroll to see the content on Firefox Android

kelvinjps10 | 2 hours ago
[deleted]
| 4 hours ago