5 ms·
What’s the general sentiment on Swift? It’s 11-years old and I don’t see it talked about much on HN (except for discussion on Apple libraries & bugs). Do peop
by tiffanyh 2y ago
What’s the general sentiment on Swift?
It’s 11-years old and I don’t see it talked about much on HN (except for discussion on Apple libraries & bugs).
Do people like it as a language, and why?
- happytoexplain 2y agoIMHO it's the best language I've used a significant amount, without a close second (where my sample size of extant languages is Swift, ObjC, Python, JS, TS, PHP, Java, Kotlin, C#, Haskell). It's the only language I've used where I have never asked "but why?". Every language feature and stdlib API just does what it says and acts in the way that makes the most sense. You're basically forced to handle every case (null, any type of error, switch cases, etc). It's highly dynamic, yet code tends to stay understandable. Apple is thoughtful about naming things and designing APIs. It's the only language I almost never need to write utility functions for - generally the type you're operating on has a method to do what you want, which you can easily discover with auto completion. Strings are sequences of graphemes, not code units or code points, and their API reflects this. It's not perfect, but nothing else comes as close. One of the most prominent complaints - compile time explosion - really only happens in contrived examples where you're using a bunch of literals in one expression, which isn't realistic. However, it's stuck in a single ecosystem. And let's not talk about some of the newer frameworks. Oh, and Xcode is a joke.
- alain_gilbert 2y agoMy two mains "why tf is this not built-in" are: "Why are tuple not Hashable ?!" Which means that you cannot have a tuple of Int `(1, 1)` as a key in a dict, and you have to make a struct that implement Hashable instead. And "Why do they not have a `.sum()` and I have to do `.reduce(0, +)` every time instead." Or implement it yourself extension Sequence where Element: AdditiveArithmetic { func sum() -> Element { reduce(.zero, +) } }
- frizlab 2y agoI think tuples will be (soon-ish) Hashable but cannot as of now because they want to do it right and need something before they can do it.
- zffr 2y agoWhy do you feel the stdlib needs a .sum() if using .reduce() is so simple?
- alain_gilbert 2y agoBecause it's annoying to have to implement it every time you make a one off script (or small projects) among other things. And it is usually a pretty basic iterator standard to have it so that someone maybe not as familiar with concepts like reduce can just sum the sequence. Or if someone not familiar with reduce read your code, and is like "what is that `.reduce(0, +)` thing everywhere!?" while instead it should be a no brainer `.sum()` <-- "yup make sense" https://doc.rust-lang.org/std/iter/trait.Sum.html https://doc.rust-lang.org/std/iter/trait.Sum.html
- sampullman 2y agoXCode (and other tooling) being a joke and compile issues make it tough for me to think of it as my favorite, but the language itself is definitely nice to work with. The compile time issues I have mainly come from TCA, but I still see them from time to time in normal code. I have a few other syntax gripes, but largely see it as competitive with Typescript and Rust in terms of how nice it is to use. TS and Rust blow it out of the water with tooling, though.
- happytoexplain 2y agoI'm optimistic about Rust and look forward to trying it. TS to me is just an awkward patch on top of JS. It's really great! But only compared to JS. The mental model of its type system is difficult to form completely. But yes, Swift's tooling doesn't compare.
- sampullman 2y agoIt might be due to the convenience of familiarity, but I disagree about TS. If you forbid any/unknown it doesn't feel at all like an awkward patch, and as far as I can tell the type system is much more powerful than Swift's.
- Zanfa 2y agoThe main problem with TS is that your types are compile-time. You can have 0 uses of any/unknown, but you can still stuff a number into a string at runtime without any issues until it blows up. I know you should have defined validators for every single external API, library and database, but at some level it feels silly to do all of this extra work.
- sampullman 2y agoOf course, but that comes with the territory. I just think it's really impressive how far TS has come, and doesn't feel like an "awkward patch over javascript" at all these days. In new projects, I've found that it's now very rare to come across a library that doesn't provide typings, or violates the interface.
- emoII 2y agoAnd the typesystem is built in a way that it does not really help you due to typechecking being so slow. Make an error/begin refactoring in ocaml: just follow the typechecker until you’re done. Make an error/begin refactoring in swift: you plan ahead because the typechecker will crash with a timeout or give you non-root-cause errors. Yesterday I changed the signature of a method, and instead of complaining at the callsites I got a ”ambiguous method” error for a built in SwiftUI view modifier. Kinda hard to track down if you’re not completely aware of the changes you’ve made
- happytoexplain 2y agoThis falls under the "new frameworks" category I glossed over. SwiftUI, SwiftData, etc, are failures in my opinion. SwiftUI in particular abuses the type system. In your own code the type system is very helpful.
- cosmic_cheese 2y agoYep. If you’re writing good code that avoids common smells things are perfectly speedy. Usually if you’re making the compiler grumpy you should be sitting back and reconsidering your design anyway.
- zffr 2y agoIf you do a lot with combine publishers, then you might also have a hard time with the type system
- 2y ago
- dep_b 2y ago> It's the only language I've used where I have never asked "but why?" * But why I cannot use @Published and other decorators in protocol declarations? * But why must generics always be a pain in the ass, compared to .net, even in the most recent versions? 5 ways to do things, never the one you need * But why is the person that designed the if case let value = .variable syntax not flagellated in a public square? * But why is modern concurrency and SPM so undocumented?
- frizlab 2y agoIt is not stuck on a single ecosystem and VSCode has an extension to use Swift in it. The Linux ecosystem is actually getting quite interesting tbh, and they even support embedded targets!
- jchw 2y agoI find it intriguing but have so far been unwilling to convince myself to give it a try on anything. It has a lot of good ideas, but I think Apple needs to relinquish more control over its future and direction for me to feel like a future plan change at Apple won't jeopardize its usefulness outside of Apple platforms. Presumably the reason why they want to keep it under their own organization is specifically so they can control their own destiny better, since Apple is heavily using Swift themselves; totally understandable, but trusting it for something that needs to be crossplatform in the long term seems potentially unwise. It's not fool-proof either. Microsoft started the .NET Foundation, but that hasn't stopped them from causing drama by pushing self-serving decisions from the top-down. I don't really fear the same sort of behavior from Apple very much, but I definitely worry that Apple might eventually lose interest on the cross platform part for sure. This is especially troubling because it is a fairly innovative language. If you get trapped on an unmaintained port of it, moving off of it seems like it might be hard. It's got a lot of clever ideas I haven't seen elsewhere.
- pm 2y agoSwift evolution and governance is open and publicly documented. It will always be dominated by Apple engineers, but the evolution of the language is largely orthogonal to Apple's OS releases. I'm not sure how much of the standard library is available on the server side. However, I it's more about the engineers' interest than it is Apple's, and in that respect, the Swift ecosystem has been evolving constantly, e.g., the Swift toolchain was entirely divested from Xcode a month ago. I can't speak for the .NET ecosystem, but your fears are unfounded. Whether Swift is useful in a cross-platform context is another question, however.
- jshier 2y agoOrthogonal? Odd thing to say given Swift's evolution and release timeline are entirely constrained by Apple's OS release schedule. We're currently going through the spike in evolution proposals by Apple engineers in preparation for the branching of Swift 6.2 next month before WWDC in June. As for server side, the standard library is entirely available on other platforms, with a subset available for embedded Swift. However, it's fairly limited when compared to something like Python, and cross platform support for the other libraries like swift-foundation or SwiftNIO is more limited (IIRC SwiftNIO still doesn't support Windows properly). I'm not sure what you're talking about with the tool chain. Apple has been producing toolchains that can run on macOS outside Xcode for years. Do you mean integration of swiftly? I think that just brought swiftly support to macOS for the first time. Ultimately I agree with jchw; Swift would be in a much better position if it wasn't controlled by Apple's process. Features could get more than a few months work at a time. We could have dedicated teams for maintenance intensive parts of the compiler, like the type checker or the diagnostics engine, rather than a single person, or a few people that switch between focus areas.
- heliophobicdude 2y agoIt's a great language for Application-level software on a single platform (could be Linux). It has some challenges that it needs to solve to do great as a cross platform "general-purpose" programming language. It's paradoxically high level with its syntax and ergonomics but is tied down to the same cross platform headaches like in low level languages (e.g. cpp). Linking across cross platforms requires lots of careful thought and testing. Unlike cpp, it's not super portable. It requires a hefty 30 MB runtime for some features of the language to work. Try static executable hello world. That being said, it's possible. You can build cross platform applications with Swift, but you'd still have some of the same kinds of portability issues like in cpp but with nicer syntax and ergonomics.
- deze333 2y ago"Liking" is irrelevant to me. I do use it thoroughly though – I have written Linux containers (web apps) as well as native macOS and iOS apps. I am end-product creator and want my ideas to become end-user products and see the light of day. Delivery is everything. Swift offers convincing ease for writing abstractions that underpin the app layer. You can be as clever or as simple as you wish, it's up to you. I prefer to keep it simple. The other huge win for me is its ability to combine multiple language codebases at the SOURCE CODE LEVEL under a single project umbrella. Many of my projects use a mix of: - Swift - C++ - C The whole thing gets compiled from a bunch of source code folders with a single command. No wrappers or binary wrangling, simply call C++/C from Swift. Compile time is really fast for me with Swift 6 onwards. I use Xcode (and I am fine with it, it compiles really fast in year 2025) or VSCode (with Swift plugin) — both achieve the same thing in my experience. Want to build a Docker Linux container? Very simple too. I fine tune and debug the project on dev macOS machine then use a Docker Linux container to build it for Linux (on a Mac or Linux) and deploy the binary. It's a single binary file by default, all libs inside. Then copy it to my NAS or deploy to remote Linux server and enjoy the speed. Low friction, easy abstraction, fast delivery and binary machine code executable. That's what speaks to me.
- lenkite 2y agoIts popularity is steadily dropping over time since more and more people are moving to cross platform frameworks like Flutter.
- vbezhenar 2y agoProbably almost every developer working professionally on iOS uses Swift at this point. I, personally, don't like it and I prefer Objective C. But I'm not professional iOS developer, so take my words with grain of salt.
- frizlab 2y agoPersonally I initially come from the « Apple world » but now I use Swift on the server and it’s a joy. By far my favorite language ever. I even wrote a tool to be able to run Swift scripts that have non-system dependencies![1] [1] https://github.com/xcode-actions/swift-sh https://github.com/xcode-actions/swift-sh PS: Yes, it’s a fork, but at the point I’m at there is nothing left from the original implementation. Even the way the program works is different.
- pjmlp 2y agoIt is a great language for developers on Apple ecosystem, for portable code not so much. It stands with .NET on Windows, or Kotlin on Android, however outside Apple is at tooling level of .NET Core early days, think .NET Core 2.0. Mostly usable for Apple shops that need to deploy into Linux servers for their app backends, and share code.
- bsaul 2y agoSwift as a langage is fine, the problem is the ecosystem. It's been driven by apple for too long now, and suffers a lot from it. You would think that being constrained by one company would ensure the project remains lean, but apple actually had the opposite effect. Instead of focusing on real cross-platform support, or strong language foundations, they kept piling on features that nobody asked but made nice developer conference demos.
- frizlab 2y agoThat is probably the opposite of true. Go read the forums once in a while, the foundations are really well thought. I agree that function builders were probably added for the shiny SwiftUI (and was added too soon), as well as the property wrappers, but apart from that, the process of adding features in the language is actually quite transparent and well-defined. Also Swift now has real cross-platform support. All of the libraries I create I test on macOS, Linux, Windows, android and WASM/WASI.
- bsaul 2y agoi tried building cross-platform libraries in swift for the past two years, with no success. I just did it in rust (ios / android / wasm) in a week, knowing nothing about the language. the swift wasm project still uses a forked compiler IIRC…
- frizlab 2y ago> the swift wasm project still uses a forked compiler IIRC… No <https://forums.swift.org/t/stdlib-and-runtime-tests-for-wasm-wasi-now-available-on-swift-ci/70385 https://forums.swift.org/t/stdlib-and-runtime-tests-for-wasm...>. Like I told you, I cross compile to all of the targets directly on my Mac (except windows that I do technically on my Mac, but on a VM). I could use Linux all the same. Swift now has the concept of Swift SDK (`swift sdk install …`) and it is possible to target whatever (that has an SDK) easily. Yes, they took their sweet time, but it now works properly.
- 2y ago