Readit News logoReadit News
isodev · 8 months ago
Interesting proposal though it does sound a bit too general. “Improve cross compilation”… current Swift tools are barely keeping it together for the “happy path” of building for Apple devices (it’s not that happy). It would be cool to expand into wasm/wasi as long as it doesn’t come at the expense of other desperately needed improvements.

Rust, Go and others have been building WASM 0.2 support for many years, they currently have a “just works” support for WASI. It would be a long time until Swift is even remotely ready for something like this and I don’t feel there is a burning need to have “yet another wasm platform”.

elpakal · 8 months ago
> current Swift tools are barely keeping it together for the “happy path” of building for Apple devices (it’s not that happy)

I agree, but I'm telling myself this is only a temporary pain caused by the changes for supporting Swift 6 language mode. Are you talking about something else?

isodev · 8 months ago
Temporary but measured in years and forced on every Swift dev out there … hard to dismiss.

My comment was not about that though, I was more thinking about the super slow build times, unreliable SPM with strange limitations, Xcode still shows errors while reporting a successful build, Previews not previewing, etc.

erikrothoff · 8 months ago
Is this still a thing in Swift? I loved Swift 1, spent a couple of days upgrading to Swift 2, a week or more for Swift 3. At that point I just switched to React Native. I understand that iterating is generally a good thing, but the constant cykle breaking changes in the language was just too much.
refulgentis · 8 months ago
For context, I was saying that same thing in 2017*, because it seemed obvious, especialy given the elite consensus was it was obvious SwiftUI was being introduced to allow full cross platform development, including web.

In retrospect, I was starstruck by the people I learned programming from, and Apple Neue funds software engineering, especially developer tooling, to the point it is not actively harmful, as opposed to not painful, and very opposed to not-harmful-and-not-painful-on-not-our-platforms.

* Of course, not for Swift 6 Language Mode™, the thing is, there's always been a Huge Project that's launching, but not landing...

cookiengineer · 8 months ago
> Rust, Go and others have been building WASM 0.2 support for many years, they currently have a “just works” support...

Can confirm. I was pretty stubborn and wanted to use Go to build a UI in a webview/webview using local app, but oh my, js.Value in Go is so much pain to deal with. A lot of things in the JS world don't integrate nicely with Go as a language (e.g. the difference of Go channels and JS Promises, or magical enum values _and_ URL patterns on the same properties like in the Fetch API)

Long story short, I am now around 3 months into building a WebASM bindings and components framework, and it's still a lot of work until I am on the functionality level of TSX files. [1] All those Web/DOM/Browser APIs are kinda hard to integrate into the Go world, especially if you're as stubborn as me and want to have a real typed bindings API that uses Go's native data types.

[1] https://github.com/cookiengineer/gooey

umvi · 8 months ago
Go's wasm is pretty bad. Rust's is good though.
syspec · 8 months ago
> It would be a long time until Swift is even remotely ready for something like this and I don’t feel there is a burning need to have “yet another wasm platform”.

I mean, well, it actually already exists? It's been around for a long time and works pretty great, with multithreading, access to JS objects, etc. The author of the linked thread topic is the original author of it.

https://swiftwasm.org/

isodev · 8 months ago
I think that’s WASI Preview 1 that’s currently supported by swiftwasm (and I don’t think the spec implementation is even complete), not the current WASI 0.2. Preview 1 was the current status quo about 2 years ago.

Writing WASM in Swift so it can only be run by a Swift runtime also misses out on a huge aspect of that “bring your language” approach to wasm. It should support enough of the spec so a current wasm binary compiled from say Go can be executed in a WASI runtime powered by Swift and vis-versa. It’s a long way to get there.

refulgentis · 8 months ago
Amazing!

Why are they framing it as a proposal if it's done? (if this comes across as Socratic, it is unintentional, I genuinely don't understand why the author would be posting a proposal when it is done)

EDIT: My naive reading of https://github.com/swiftwasm/swift/issues is there's a lot, lot, to go. TL;DR: open from 2021, stdio FILE not available in WASILibc. Long version, filed in 2020 and open: "Pointers needed on WASILibc", "Make the toolchain work without Xcode installed", "Enable libdispatch or provide stubs for it", 2022 "canImport(Dispatch) is wrongly truthy on WASI target", "wasm lacks signal support" (broke/regression in Sept. 2024, still open)

neonsunset · 8 months ago
.NET does pretty well as far as WASM support goes, unlike Go which is abysmal :)

https://bootsharp.com/guide/llvm / https://github.com/elringus/bootsharp

pjmlp · 8 months ago
Tell that to Typescript and Azure teams, what can we say when DevDiv decides to bet elsewhere?
turnsout · 8 months ago
Ignore the haters—Swift is an enjoyable and productive language that gives you a lot of advanced features if you want them, but lets you ignore them and almost treat it like a scripting language. Adding first-class wasm support could help it become a more reasonable choice for development outside the Apple platform.
jchw · 8 months ago
My only fear with Swift is Apple. The language itself seems largely fine, very interesting even, which makes me feel deeply conflicted.

While Apple has been big on pushing multi-platform Swift right now and distancing itself a bit from the Swift branding in some ways (e.g. it having its own GitHub organization) they've historically had quite an ebb and flow to this behavior. If their priorities changed, what happens to the non-Apple projects that adopted Swift? It would be better if there were multiple parties that had stake and some control in the future of Swift.

I have similar worries with Microsoft and .NET, although it's a bit different owing to the fact that Microsoft is quite a different company with different problems.

It's actually kind of bizarre that it never really felt like Google was a problem for Go, but I guess that's because unlike Apple Swift and Microsoft .NET, Go mostly targets and is almost entirely developed on platforms that Google has little control over. (Though that doesn't mean that their presence is entirely unnoticed, but even stuff like the module proxy has been more well-received than expected. It's an odd area where Google has managed to maintain some goodwill, though it could evaporate over night.)

odyssey7 · 8 months ago
The rug-pull of Swift from TensorFlow came from Google rather than Apple.
turnsout · 8 months ago
I think you hit the nail on the head. By extending Go to many platforms, it doesn't feel like you're using a corporate-sponsored language (though you are). The Swift team is aware that they need to help the language thrive in other contexts, which is why they're working on projects like Embedded Swift [0]. I hope they fully embrace wasm as well!

  [0]: https://www.swift.org/getting-started/embedded-swift/

Rohansi · 8 months ago
Not sure if you're aware or not but .NET these days can (officially) target pretty much anything - not just Windows. Usage on Linux definitely picked up vs. Windows because Linux servers are cheaper. Android/iOS is there. WebAssembly is also there.
jonhohle · 8 months ago
Rust, Go, and Swift were all coming up around the same time. Rust looked ugly, Go underwhelmed me, and Swift aeemed like the best “language” at the time, with many opinions that aligned with my own.

Having now spent time in all three, swift feels the most ergonomic and has features that make me feel productive. I still feel like there isn’t much “there” in Go, and rust makes me feel like I’m solving for the compiler rather than working on whatever problem I was needing to work on.

Edit to add: SwiftUI, however, is a mess that I loathe. I may be in the minority of enjoying the IoC choices in Interface Builder and AppKit.

jkubicek · 8 months ago
SwiftUI is just amazing for the first 30 minutes you use it... then you make a minor syntax error deep in some nested views and you're selectively commenting out coded blocks to hone in on the error like a caveman.

It makes print-statement debugging look cutting edge.

ben_w · 8 months ago
I agree about SwiftUI. It's something I want to like, but everything about it… no.

For me, SwiftUI does exactly two things better than UIKit: tables and collection views. For everything else, it's so much easier to get stuff done with UIKit*, regardless of if I'm working with Interface Builder or making UI in code (as per various projects I've dropped into).

In theory, reactive UI is good. In practice, at least in the case of SwiftUI, the "magic" data passing does sometimes fail — perhaps someone put in the wrong @ on the property — and then you've got to debug some weird magic, and if there's a sensible place to put a breakpoint for that kind of problem I have yet to learn it.

In theory, the UI is reusable across all Apple platforms. In practice, the nature of the user experience is so different that actually trying this makes it suck for everyone — you don't want finger-sized buttons on a mouse-driven UI or tiny mouse-suitable click areas for a mobile UI, and I have no idea what the user expectations are for tvOS or WatchOS despite having written apps for both because hardly anyone shares their experiences and lessons learned.

In theory, having the code be the source of truth for the WYSIWYG editor is great. In practice, the WYSIWYG editor keeps giving up because of e.g. a compiler error, and decides to stop forever until you manually resume the preview.

* I'm mostly on iOS rather than macOS, but I'd assume UIKit and AppKit have the same strengths and weaknesses.

cosmic_cheese · 8 months ago
This is more or less how I feel too. Writing Swift feels good, and once you make a habit of avoiding code smells that trip up SourceKit, syntax coloration and all that works well enough too. SwiftUI on the other hand gets to be a mess for anything larger than small components and collection view cells.

And so I write pure code UIKit most of the time. It’s not trendy but it’s very effective.

solardev · 8 months ago
Wow, thanks for saying this. I had no idea it was even usable outside the Apple ecosystem. Seems like other IDEs support it too (https://www.swift.org/tools/).

How would UIs work on other platforms, though?

thewebguyd · 8 months ago
> How would UIs work on other platforms, though?

I think for right now, you'd have to use the C interop and link against something like GTK or other GUI library. I don't think SwiftUI specifically would ever work well cross-platform, it has so many Apple-isms.

There's also Swift/Win32, but it's MVC. You could also use the interop and use QT as well.

I don't think any of those are necessarily good solutions, but they are there.

dagmx · 8 months ago
As with other languages, you’d need bindings to another UI framework. In that sense, I wish SwiftUI had a different name because it seems intrinsic to Swift when it’s really no different than UIKit.

There’s stuff like SwiftCrossUI that does multiple backend bindings

https://github.com/stackotter/swift-cross-ui

And Qt was exploring some bindings using the new C++ interoperability.

satvikpendem · 8 months ago
> Ignore the haters—Swift is an enjoyable and productive language

Sure, if you are on Apple devices. If you are not, better to use other languages like Rust, Go, or even Dart.

izacus · 8 months ago
The direct competitor to Swift is most likely Kotlin and I bet it'll win out as a cross platform solution of choice in a couple of years as KMP stabilizes.
palata · 8 months ago
Is Dart still a thing? Genuinely interested.
jbverschoor · 8 months ago
Either as shebang/interpreted script, or just compile to a binary for great startup speed. I actually only recently found out you could use swift for scripting. Turns out, you can also access all the other Apple APIs :-)

  #!/usr/bin/env swift
I made this small "shebang thing runner script" that either runs your script interpreted, or compiles and executes it. Depending on if you're on a TTY or not. I'm also changing it to simply check for the number of executions since last modified, and then compile. In some cases the extra time is well appreciated. You still get the convenience of interpreting, but also the performance of native.

It's basically a drop-in replacement:

  #/path/to/autocompile_or_interpret_swift
Very noticeable difference.

  real 0m0.212s    user 0m0.159s    sys  0m0.045s
  vs
  real 0m0.014s    user 0m0.004s    sys  0m0.008s

turnsout · 8 months ago
Ha, nice! I've used the Swift shebang before, but honestly once you have something that works as a "script," it's so easy to convert it to a real command line utility via Swift Argument Parser [0] that I usually spend the 5 minutes to wrap it up.

  [0]: https://github.com/apple/swift-argument-parser

troupo · 8 months ago
I wish they had a vision for the language and not "we throw everything and the kitchen sink at it so that our compiler often cannot handle even the simplest SwiftUI components and takes ages to do anything"
zerr · 8 months ago
Can we have a proper Windows support? i.e. with all the batteries/libraries included.
mdhb · 8 months ago
Apple barely invest in their own platform, they sure as hell aren’t going to invest the resources required to do this. Flutter on the other hand… genuinely does a great job of cross platform and I’d argue Dart is a nicer language too.
zerr · 8 months ago
Yes, but Dart is only a single-threaded application language, while Swift can be a proper systems language, something between C++ and Rust, in terms of usability and safety. Golang killer, when it comes to high-level systems programming.
nofunsir · 8 months ago
Just what I've been waiting for! Now about that JVM support for Swift...?
isodev · 8 months ago
You’re mixing up the visions :) JVM support was the buzzword for last year’s “Swift on the Server for realz”.
detourdog · 8 months ago
I thought that was when WebObjects switched to Java.
watusername · 8 months ago
Don't forget about BEAM/Erlang interop too, now we are getting truly distributed... :P
zerr · 8 months ago
Why not Swift .NET? :)
pjmlp · 8 months ago
Because we already have F# with much better tooling. :)
cyberax · 8 months ago
Can we have at least SOME form of JIT compilation for iOS? The technological limitations of not being able to use it are just ridiculous at this point.

And for no real reason, except that apparently Apple's whole ecosystem can crash and burn if somebody looks at it wrongly.

singularity2001 · 8 months ago
Hopefully they make interface types available to the runtime. So you can read/write wasm struct properties from the host without all the usual glue code cancer
WD-42 · 8 months ago
Is there a compelling reason to use Swift over Rust for anything other than Apple development in 2025?
saagarjha · 8 months ago
It’s a somewhat more pleasant Rust, with nicer syntax, where you get an additional option wherever you would have weird ownership semantics to just pay some extra cost to have the language solve it for you. Whether that is worth dealing with a worse toolchain is something for you to decide.
pcwalton · 8 months ago
This is sort of true in theory, but in practice there's a major difference in that nearly all the libraries in Swift use a reference-counted (i.e. GC'd) shared-everything model, while in Rust nearly all the libraries use ownership and borrowing. The "normal path" of least friction in Swift is a reference-counted world, while the "normal path" in Rust is the ownership-and-borrowing world.

This is not a knock on Swift--it's really the inevitable outcome of seamless compatibility with the COM-like model of Objective-C and Core Foundation being a guiding principle of the language.

zozbot234 · 8 months ago
You can do the same in Rust of course, it just takes some boilerplate. Whether the Swift approach is genuinely "nicer" is probably a matter of personal opinion.
bobbylarrybobby · 8 months ago
Some differences and advantages of swift are documented here: https://faultlore.com/blah/swift-abi/