JackYoustra 7 hours ago

Broadly agree but, as is most things, the devil is in the details!

- Xcode. A really rough ide that has a hard time at scale, choking on package refreshes, many targets, and more. It has a special entitlement so you can't even binary patch it if you want to fix it!

- Build systems. Cargo is _much_ easier to work with than SPM.

- Macros support, codegen is still largely done outside of the macro system, which should indicate its use.

- Linter / format support. Yeah, it exists, last I checked it's just a good bit worse.

- Performance. There are MANY performance cliffs in Swift; most can be fixed by a sufficiently determined compiler developer, but at this point we've kinda departed talking about the language as-is.

- Type inference time. Swift's bidirectional type inference causes a ton of choking on complex expressions, which is a real problem with its number one use case, SwiftUI.

- An exacerbating factor on the above, imports are all implicitly module-scoped, meaning that changing a single file means recomputing the types for all files in the module. And because SPM and Xcode have such a rough time with multiple targets, that usually means that a single change can lead to recompiling all Swift files.

- Weirdness around classes and structs? I understand that they had to do it for objc compatibility, but I would've found it much cleaner if they'd just from the start had something replacing class, like a fully-sugared `final class Box<T>` that replaces all uses of class.

I agree that for the most part it _could_ be an easier rust, but between including bidirectional type inference without a cut operator and poor tooling I struggle to find where it's actually easier in cases that you can't just use typescript and dodge all the non-typecheck compilation headaches entirely.

  • atombender 6 hours ago

    I've made a tiny SwiftUI app. It was really difficult to figure out the memory leaks. In fact, I have leaks that I still haven't been able to find. For some reason the heap is fine, but the app continues to allocate virtual memory.

    I've thrown Claude and Gemini at the app to try to analyze the code, had them use vmmap and Instruments, asked them run all of the code in a loop to reproduce the leakage — and still it leaks, slowly, tens of megabytes per day.

    I'm sure it's something simple starting me in the face. But the fact remains that Swift's sort-of-automatic-but-not-quite memory model still makes it much harder to reason about memory than Rust or even Go.

    • rTX5CMRXIfFG 3 hours ago

      I agree, but I think that it's difficult to spot memory leaks in SwiftUI because it's such a high-level abstraction framework. When working with the Cocoa and Cocoa Touch libraries, it's so much easier to find.

      And of course, Apple's UI frameworks != Swift the language itself.

    • groundzeros2015 3 hours ago

      The memory management is almost broken. They decided not crashing was better than mashing memory.

    • teunispeters 4 hours ago

      hunting dangling references in a reference counted system is like that.... that's all I can guess is going on here. Good hunting! I wonder if there's a resource debugger? So far when I have really had to look, xcode was suffiicent... but there's likely better out there for finding this kind of thing.

    • cosmic_cheese 5 hours ago

      Personally I avoid using SwiftUI except in bite size chunks like collection view cells. It’s great for that kind of use case but doesn’t scale up well.

      I wasn’t of the mind that AppKit/UIKit really needed replacing in the first place, though…

    • jabwd 2 hours ago

      I'm sorry but what exactly are you doing? This is the first time I've ever heard any of this type of reasoning, and well, the fact that you're using AI makes me think you have no clue what you're actually talking about.

      If its a reference cycle, instruments will find it. If it is a leak, instruments will find it. However, you seem to be worried about an implementation detail on how you get memory from your CPU which the mach kernel handles for you, and is something you don't quite grasp.

      please don't reply with "I asked stupid generator", seriously, what is the actual issue you have?

    • heavyset_go 5 hours ago

      What's the issue if it allocates virtual memory?

      • atombender 5 hours ago

        Having my app consume 300GB of virtual memory after running for a week is not ideal.

  • dfabulich 7 hours ago

    If you're not developing an iOS/macOS app, you can skip Xcode completely and just use the `swift` CLI, which is perfectly cromulent. (It works great on Linux and Windows.)

    • alwillis 4 hours ago

      There'a great indie app called Notepad.exe [1] for developing iOS and macOS apps using macOS. You can also write and test Swift apps for Linux easily [2]. It also supports Python and JavaScript.

      If you hate Xcode, this is definitely worth a look.

      [1]: https://notepadexe.com

      [2]: https://notepadexe.com/news/#notepad-14-linux-support

      • afavour 3 hours ago

        So wait this thing is real? Calling it notepad.exe gave me the impression that it's just an elaborate joke about how you can code any program in Notepad...

    • behnamoh 5 hours ago

      Even if you're developing for macOS you can skip xcode. I've had a great time developing a menubar app for macOS and not once did I need to open xcode.

      • alex-russo 5 hours ago

        curious what you used - I've been looking into making a menubar app and really hate xcode

        • hombre_fatal 4 hours ago

          claude -p "Make a menubar app with AppKit (Cocoa) that does X"

    • mort96 4 hours ago

      I would avoid it for Linux and Windows. Even if they are "technically supported", Apple's focus is clearly macOS and iOS. Being a second- (or even third-) class citizen often introduces lots of issues in practice ("oh, nobody teenaged that functionality on Windows"...)

  • frizlab 5 hours ago

    I still don’t understand the Xcode rant. Using Swift can be done in any LSP-compatible text editor (VSCode, which even has a first-party extension for Swift, but also zed, Sublime Text, etc.)

    Unless you’re doing Apple-specific development, you don’t need Xcode.

    • truncate 3 hours ago

      LSP support isn't great. It keeps improving however. Used to get quite a few crashes. And I think background indexing still doesn't work.

    • hn-acct an hour ago

      Agreed. People use any thread mentioning swift to dunk on Apple for X number of reasons with vague details and regurgitated dogma. I get Xcode has quirks I use it everyday believe me I know but it's not that bad that it's unusable.

    • wolvoleo 5 hours ago

      Why would you bother using Swift if you're not targeting Apple? I can imagine wanting to use it for something cross-platform that is primarily an ios/macos thing.

      But if you don't want to include those I wouldn't pick a language that's under control of a company I don't use.

      It's a bit like using c# or powershell on Linux. Yes it can be done and it's helpful for cross platform with windows but I wouldn't consider it a first class citizen.

      • latexr 5 hours ago

        > Why would you bother using Swift if you're not targeting Apple?

        For the reasons stated in the article.

      • behnamoh 5 hours ago

        > I wouldn't pick a language that's under control of a company

        Hmm...

        TypeScript: Microsoft

        Rust: Mozilla

        Go: Google

        Java: Oracle

        By your logic we should be programming in Common Lisp.

        ==========

        Edit:

            - Rust: Mozilla
            + Rust: Rust Foundation
    • teaearlgraycold 5 hours ago

      What company is using Swift outside of Apple-specific development?

      • odo1242 5 hours ago

        Doesn’t affect the validity of your comment whatsoever, but there was the attempt by the Browser Company to implement Arc on Windows in SwiftUI lol

      • frizlab 5 hours ago

        Not a lot, but has absolutely no relation whatsoever to my comment.

      • Imustaskforhelp 4 hours ago

        > What company is using Swift outside of Apple-specific development?

        Skip allows to "Build truly native iPhone and Android apps with Skip" so technically skip runs swift on android which is outside of Apple-specific development.

        They also recently got open source from their closed source model prior from what I can tell

        https://skip.dev/

  • jtrueb 6 hours ago

    Yes! I’m not sure how many people arguing for one or the other have tried both, but it is clear that you know the pain.

  • easeout 2 hours ago

    The main problem I have with the language is compile times. Rust is good at many things, but not that.

    Xcode is optional, though its primacy has meant less adoption of Swift's first party LSP and VS Code extension.

  • andrekandre 2 hours ago

      > imports are all implicitly module-scoped, meaning that changing a single file means recomputing the types for all files in the module
    
    i've noticed this too... i wonder if doing scoped importing helps with this for example:

      import struct MyModule.MyStruct
  • willtemperley 6 hours ago

    Most Swift compilation slowness can be avoided by componentizing using packages, plus a few tricks like being explicit with types rather than relying on type inference.

    I’m not sure why you’re having so much trouble with SPM though, most people seem to get on well with it.

    • hn-acct an hour ago

      I'm also wondering how big their programs are that the compile times are an issue. I'm seeing fantastic build times with Xcode 16 and Xcode 26.2 with swift 6.2 it's even better. SPM is also better with the newer version. Most issues can be solved or exposed by closing the window and reopening or going to the package with issues and pressing cmd+s.

    • ElFitz 5 hours ago

      Trying to make a .xcframework from SPM is "fun". And getting the Objective-C that are generated, but treated as intermediary artifacts discarded is a bit of a pain.

      But I guess the issue here is that .xcframework is an Apple thing, not a Swift thing.

      The whole "won’t build if the product / target has the same name as one of its classes" is absolutely ridiculous on the other hand.

    • cosmic_cheese 5 hours ago

      Experience with SPM might vary depending on how many dependencies you’ve got. A lot of Apple platform apps are quite thin on third party library use, in which case SPM is probably not a large source of trouble.

      • ethin 5 hours ago

        My problem with it is that I want to use C libraries. And I would (like) it to handle that as much as possible. But SPM can't use vcpkg packages or call CMake stuff (at least, not trivially), so it's extremely hard to use on non-Apple platforms. Which honestly is it's killer for me. It's still so, so Apple focused.

    • h4x0rr 5 hours ago

      Using explicit types is less fun though

      • ElFitz 5 hours ago

        It even defeats the purpose of type inference.

        • mh2266 4 hours ago

          It's been a while since I've Swifted but it was mostly with combinations of nested generics, lambdas, and literals. Annotating the type of the variable those were assigned to could improve performance a lot.

          You don't need to add an annotation on `let foo = bar()` where bar is a function that returns `String` or whatever.

    • plagiarist 5 hours ago

      SPM is fine for most Swift and then fully enraging when you have a slightly divergent use case. IME of course.

  • latexr 5 hours ago

    > Xcode

    You don’t need it to program in Swift. I write a lot of it and never open Xcode, my terminal editor with LSP support is fantastic at it.

    • Imustaskforhelp 4 hours ago

      > You don’t need it to program in Swift. I write a lot of it and never open Xcode, my terminal editor with LSP support is fantastic at it.

      when you mention terminal editor, I think you are a Neovim user right?

  • crowbahr 5 hours ago

    I do think xcode is the worst IDE I've ever worked in, bar none. Even Eclipse from 2010 was better than xcode from 2025

    • ks2048 5 hours ago

      As someone who basically only uses Emacs and Xcode- why is Xcode so bad?

      • regenschutz 4 hours ago

        Emacs and Xcode is certainly an interesting mix. Aren't they kind of the polar opposites of each other?

  • ks2048 5 hours ago

    I’m curious about SPM vs Cargo - are there basic design decisions that make Cargo better or just particularities of thier current states?

    • Imustaskforhelp 3 hours ago

      I also wish to ask given that uv from Python learnt from cargo,npm and other things. Can it be possible for SPM to have an alternative similar to how uv got made for python too?

      (I am not familiar with swift which is why I am asking this question if there's a really big difference between Swift package manager and cargo in the first place to warrant a uv like thing for swift ecosystem. I think someone recently posted a uv alternative for ruby)

      Rv, a new kind of Ruby management tool: https://news.ycombinator.com/item?id=45023730

  • stackghost 6 hours ago

    FWIW I have written a complete macOS cocoa+swift app in emacs alone without XCode, just using Makefiles. You don't strictly need it.

  • mrcwinn 6 hours ago

    Totally agree. Xcode is awful. I’m sure that team has a lot to deal with but they’ve produced since really trash software.

    • doawoo 6 hours ago

      +1 I went out of my way to set up a skeleton project that just uses shell scripts to build an app bundle. I really dislike Xcode but Swift itself is actually fun to write.

    • lawgimenez 6 hours ago

      Hours ago I was setting up Xcode Cloud on Xcode and it kept crashing whenever I edited the workflow. Smh

  • blueprint 6 hours ago

    I know Xcode might struggle every now and then with some of the things you're talking about and I'm not saying that I don't have any feedback for Apple, but Xcode is one of the most powerful and well designed development and instrumentation environments I've ever used.

    • jayd16 6 hours ago

      I can't say you hear a lot of folks on other OSes with other IDEs saying "I wish I had Xcode". There was a minute when MonoDevelop was trying to emulate Xcode but that must be over a decade ago.

      • blueprint 5 hours ago

        How many of those people who spend their time using other IDEs on other OSs (where Xcode doesn't run) spend any amount of time using Xcode and therefore have the requisite experience to be able to know that it's generally excellent?

        And when you say "you hear", you really mean "you", not "me". I hear it a lot.

        What motivated your comment?

    • cosmic_cheese 5 hours ago

      Personally speaking I don’t get the hubbub around Jetbrains and MS IDEs. Like they’re not bad by any means but they have their own sets of idiosyncrasies and bugs… it just depends on which set you happen to run up against most often in your day to day.

    • peyton 6 hours ago

      +1 blows the pants off anything else I’ve touched with zero config fiddling. Great stuff.

    • andoando 5 hours ago

      Weird the little Ive used it I completely hated it.

      Errors everywhere with horrible messages that leave you no idea whats wrong

      • blueprint 5 hours ago

        What version did you use? What errors did you see? Don't get me wrong, I've spent 20 years with it, and there was a learning curve - but isn't that the case with many good tools? Again, don't get me wrong, I have some feedback for Apple, and there's a reason why we affectionately call it a harsh mistress. But that doesn't mean it's somehow not one of the best designed, best functioning, and most powerful suites for programming with certain other incidentally very well engineered SDKs etc. And yes, things may have gone downhill a little bit, especially at the scale they're at now. If we could talk about Xcode of, say, 2014, it'd be a less ambiguous conversation.

  • fragmede 7 hours ago

    And the licensing agreement. How do I do it on Linux with no Mac or iOS?

    • JackYoustra 7 hours ago

      You can develop Swift without it. I assume you mean SwiftUI / apple's sdk, which is what most people assume (a note, I'd say, to advocates of Swift who wish not to address SwiftUI: it's the biggest target, and its poor performance on it should speak volumes about the language).

      You can also sometimes avoid xcode, see https://github.com/xtool-org/xtool

      although, at this point, just use expo!

    • snickell 7 hours ago

      Swift is available for Linux, license is Apache 2.0. There's even swift bindings for some linux ecosystem libraries, e.g. adwaita-swift for writing gnome apps and qt bindings for writing kde apps.

  • hedora 6 hours ago

    My one experience with swift involved calling a macos api not written in swift, but that had ergonomic swift bindings from Apple.

    My code was data race free, but the underlying OS primitive wasn’t, so my program crashed out about 10% of the time.

    This isn’t really a criticism of swift as a language, but I haven’t had this sort of problem with the rust ecosystem.

SkiFire13 7 hours ago

> Consider an enum that represents a tree. Since, it is a recursive type, Rust will force you to use something like Box<> for referencing a type within itself. > > enum TreeNode<T> { > Leaf(T), > Branch(Vec<Box<TreeNode<T>>>), > } > > (You could also us Box<Vec<TreeNode<T>>> instead)

This is wrong, you don't need a `Box` here. The Rust compiler forces you to have a layer of indirection, but `Vec` already does that.

  • tialaramex 5 hours ago

    In one sense the places where the Rust is wrong don't trouble me because I already know Rust well, but in the end they do trouble me because it seems reasonable to assume the Swift is equally wrong but I don't know where and how.

    For example "In fact, Swift treats enums as more than just types and lets you put methods directly on it" seems to assume that "just types" don't have methods, which I guess is what you might assume coming from say, C++ but Rust isn't C++ and so of course all of its types, including not only user-defined enums, structures and indeed unions can have methods - but also the built-in primitive types all have methods too.

        'F'.to_digit(16).unwrap() // is the 32-bit unsigned integer constant 15
    
    Or maybe an even closer to the metal example: Rust's pointer provenance APIs get to provide a method on raw pointers which takes a closure to do stuff like hide boolean flag bits at the bottom of an aligned pointer. The fact that you're ultimately going to lower to an XOR on a CPU address register doesn't mean you shouldn't get method syntax, it's the 21st century.
    • mh2266 4 hours ago

      > In fact, Swift treats enums as more than just types and lets you put methods directly on it

      This section was fairly disappointing, that Rust requires you to put "} impl {" between the `enum` and its methods is... not really an interesting point.

      I think the title of the article is... basically correct, and the high-level point that they're both languages with modern type systems, sum types, pattern matching, and so on is good, but too many of the examples were weak.

  • JackYoustra 7 hours ago

    Adding on, its also a bit much to say that Swift has a good level of sugar and reference an enum of all things. Swift's union type story is so poor that, instead of properly modeling state, people to this day still use masses of optional types in their views rather than an enum because actually using swift enums and protocols is so painful.

    • frizlab 5 hours ago

      I don’t which Swift developers you are talking to, but let the record know I don’t and use enum quite a lot. And I don’t find it particularly painful though a bit verbose at times.

      • willtemperley 2 hours ago

        I think Swift enums are really well designed, but SwiftData doesn't really support them unfortunately and Observable has problems with reactivity and enums (works on iOS not macOS I've found).

        So lots of optionals might well be the better path here.

    • nielsbot 6 hours ago

      I don't think it's horrible, but I really do wish they would copy TypeScript here.

      Let me do this:

          const x: String | Int
      
      Instead of

          enum MyEnum {
              case string(String)
              case int(Int)
          }
      
      There's an existing proposal for this here:

      https://forums.swift.org/t/re-proposal-type-only-unions/7270...

      • Mond_ 5 hours ago

        It's worth pointing out that the two examples that you're writing are actually strictly different, and not just "better syntax for the same thing". (This is assuming `String | Int` works as in Python, and the second example works as in Rust.)

        To understand the difference, `String | String` is just `String`. It's a union, not a sum type. There's no tag or identifier, so you cannot distinguish whether it's the first or the second string.

        If this sounds pedantic, this has pretty important ramifications, especially once generics get involved.

        • ekimekim 4 hours ago

          To provide a concrete example, this bit me in a typescript codebase:

              type Option<T> = T | undefined
          
              function f<T>(value: T): Option<T> { ... }
          
              let thing: string | undefined = undefined;
              let result = f(thing);
          
          Now imagine the definition of Option is in some library or other file and you don't realize how it works. You are thinking of the Option as its own structure and expect f to return Option<string | undefined>. But Option<string | undefined> = string | undefined | undefined = string | undefined = Option<string>.

          The mistake here is in how Option is defined, but it's a footgun you need to be aware of.

  • saghm 3 hours ago

    You're not wrong, but I think there's a subtle way people still might get confused about `Vec` versus `Box` with the way you've phrased it. I'd argue the important characteristic of `Vec` here isn't that it's indirection but specifically that it's sized at compile time. Compared to a `Box`, it does not provide meaningful indirection around types that are themselves not sized at compile time (e.g. dyn trait objects), and storing them inside a `Vec` itself will require a `Box` or something similar.

  • YmiYugy 6 hours ago

    I don't think that is true. Testing with rust 1.92

    enum Tree<T> { Lead(T), Branch(Vec<Tree<T>>), }

    works just fine, no superfluous Box needed.

    • slavapestov 6 hours ago

      Similarly, the ‘indirect’ keyword can be omitted from Swift example in the blog post, for the same reason. A Swift Array stores its elements out of line, so an enum case payload can be an array type whose element contains the same enum, without any additional indirection.

  • LukaD 6 hours ago

    You don't need Box here because Vec<T> is already a fixed size handle to heap data.

    • slaymaker1907 5 hours ago

      A vector of boxes is beneficial if you need to move objects around. If each T is 1000B or something, you really don’t want to copy or even do true moves in memory.

      Hell, even if you’re not moving things around explicitly, don’t forget that vectors resize themselves. If you use Box, then these resizes will be less painful with large objects.

      • zamalek 4 hours ago

        Of course, the language lets you decide. I think this anti feature is actually a feature.

rednafi 6 hours ago

Swift is a neat language, but it’s a hard sell for server-side software. The ecosystem is tiny, and there’s nothing you gain from using it instead of Go or Rust for infra / distsys.

Also, it works okay at best with VS Code, and you couldn’t pay me to use Xcode.

Kotlin tried doing similar things to gain adoption on the server side. But server-side programming is a crowded space, and people just don’t like writing distsys code in another JVM language. Swift’s story is a little better on that front.

If you want a quick-and-dirty language, Python and TypeScript do the job. For perf-sensitive, highly concurrent environments, Go is hard to compete against. A lot of ops tooling and infra code is written in Go. For systems programming and embedded code, Rust is a better choice.

So while it’s fun to think about what language X gives you in terms of syntax, in practice it’s rarely enough to pick a language like Swift for your next non-toy backend distsys work.

Also, Apple. Given their stance against free and open source software, I wouldn't be too thrilled to pick a language that works better in their walled garden.

  • jabwd an hour ago

    This makes me think you haven't really tried it ever? Sure writing a hello world is something but, one of the best features of Swift on the server side is that it seamlessly interopts with anything C (and nowadays C++, though that is after my time).

    I wrote an entire, well performing backend in Swift because I could just directly plug in to already existing libraries without having ot provide a whole bunch of "FFI" glue.

    All the other languages you suggest is something that Swift excels at while staying performant (also none of those have an IDE like Xcode so idk why you even bring it up). Though for actual systems programming I don't think Rust can be beaten by Swift, simply because of its more explicit (and therefore confronting) nature.

  • myko 3 hours ago

    I have been using Swift Vapor for personal projects for awhile and it's great. I kind of regret it now on some projects since I use a lot of Go too and I miss the speed of compiling/testing when I'm using agentic coding (where my goal is to put the agent into virtuous loops leading to a success state) - it just takes longer in Swift.

    • rednafi 3 hours ago

      In agentic workflows, Go’s fast compiler and simple syntax make things so much easier.

      I no longer write Python or JavaScript, even for trivial scripts. Why suffer sluggish performance or tooling nightmares when choosing a typed language no longer costs much?

      As for Swift, it’s a harder sell. The docs aren’t there. The libraries aren’t that great. Apple-ism scares away a ton of folks, and the alternatives create less friction.

mogoh 6 hours ago

> There is a perception that Swift is only a good language for Apple platforms. While this was once true, this is no longer the case and Swift is becoming increasingly a good cross-platform language.

How good is the developer experience on a non-Apple platform really? Linux is my primary platform and my perception is, that allmost all of the swift eco system is for Apple. Libraries, tools, documentation, IDEs, tutorials, etc. all assume, that you use an Apple.

Can someone tell me who does not use an Apple-device and uses swift?

  • willhbr 5 hours ago

    My experience is that it is very frustrating. Apple's documentation makes no mention of what works on Linux and its limitations, so you just have to guess or work it out with trial and error.

    I tried to write a websocket client: https://willhbr.net/2023/08/23/the-five-stages-of-swift-on-l... Then tried again 2 years later: https://willhbr.net/2025/10/13/the-6-2nd-stage-of-swift-on-l...

    • g947o 4 hours ago

      Sounds like a language not to waste my time on.

      I should spend my time writing actual code and ship stuff, not debugging or finding holes in someone else's product.

  • WD-42 6 hours ago

    It’s not. The Apple devs will tell you it’s a great time on Linux, just like the MS people will tell you the same for C#.

    Rust wasn’t designed for any specific platform and you can tell. The ecosystem on Linux especially is fantastic.

    • sealeck 6 hours ago

      > Rust wasn’t designed for any specific platform

      I suspect that Mozilla being the primary developer and sponsor for many years actually meant that compatibility with all major platforms was prioritised; Mozilla obviously care about stuff working on Windows, and run lots of builds on Windows + I imagine a number of Firefox developers (if not drive) at least own a Windows machine for testing Windows-specific stuff!

      I call out Windows because I think generally software people go for Mac > Linux > Windows (although Mac > Linux may be slowly changing due to liquid glass).

      • wolvoleo 5 hours ago

        Is liquid glass really that bad? I left Mac years ago due to other annoyances. It was my daily driver for a decade and change. But I couldn't get used to the iOSification and the dependence on apple cloud services for most new features. When I started with macOS jaguar it was just a really good commercial UNIX. It got even better with Tiger and leopard.

        But the later years I spent every release looking at new fancy features I couldn't use because I don't use apple exclusively (and I don't use iOS at all, too closed for me). So almost no features that appealed to me while usually breaking some parts of the workflow I did use.

        While I did hate the 'flat' redesign after Mavericks that on its own was not really a deal-breaker though. Just an annoyance.

        I'm kinda surprised liquid glass is so bad people actually leave for it. Or is it more like the last drop?

    • myko 3 hours ago

      I ship a lot of .NET on Linux these days, works great

    • jiggawatts 5 hours ago

      Arguably the dotnet sdk now works better on Linux than Windows. For example, Windows Containers are "supported" only the marketing checkbox sense.

  • rcarmo 6 hours ago

    I tried doing compiling a few of my Mac CLI tools to Linux. These days, it's faster to run them through an LLM and get quite excellent Go at the other end, and _that_ is much easier to cross-compile.

    I have been looking at the new Android support (don't have the link handy) and it's tempting, but I know Kotlin and always developed for Android with a bare Makefile and the JDK, so I don't need any fancy tooling...

  • afavour 5 hours ago

    Yes, in my experience the Apple bias exists in all the articles and how-tos you read in a way that can trip you up.

    It’s been years now but I wanted to create a Set with weak memory in its keys. Everything I read said “oh just use NSHashTable” and I dutifully did (it’s in Foundation) and then when I tried to cross compile it didn’t exist outside of Apple platforms. It’s not as if the import made it clear I wouldn’t be able to use it, but I couldn’t.

  • frizlab 5 hours ago

    Swift has swiftly to manage the Swift compilers to use (equivalent of rustup) and LSP works pretty well. Most of the (open-source) libs that Apple does are cross-platform. I personally take care to make sure my personal libs work on all platforms as well, including Windows(!) (anecdotal, I know…).

    All in all it’s not perfect yet, but it’s getting better, with intent to continue in that direction.

Validark 4 hours ago

> Swift doesn’t have a match statement or expression. It has a switch statement that developers are already familiar with. Except this switch statement is actually not a switch statement at all. It’s an expression. It doesn’t “fallthrough”. It does pattern matching. It’s just a match expression with a different name and syntax.

Are there people who see a "match" statement, smash both hands on the table, and shout, "WHAT THE ___ is a ------- MATCH STATEMENT?!!! THIS IS SO $%^&@*#%& CONFUSING!! I DON'T KNOW THAT WORD!! I ONLY KNOW SWITCH!!"

  • throwaway17_17 an hour ago

    TL;DR — it seems to me that it is less anger from devs at being confused over a Case construct and more an attempt to preemptively soothe any ruffled feathers for devs wanting a traditional Switch.

    I think your comment was probably rhetorical, but does address/raise a fairly common issue in designing programming languages. My position on this is that it is less like "WHAT THE ___ is a ------- MATCH STATEMENT?!!! THIS IS SO $%^&@*#%& CONFUSING!! I DON'T KNOW THAT WORD!! I ONLY KNOW SWITCH!!" and instead more like the following (from the language designers POV):

    Okay, we want a Case construct in the language, but programmers coming from or preferring imperative syntax and semantics may not like the Case concept. But, they often like Switch, or at least are familiar with it appearing in code, sooooooo: first, we will alter the syntax of the tradition Switch to allow a more comfortable transition to using this functional inspired construct; then second, we wholesale replace the semantics of that Switch with the semantics of a Case. This is underpinned by the assumption the the syntax change is small enough that devs won’t recoil from the new construct, then the larger divergence of semantics will hopefully not produce issues because it is just a small semantic change coated in an most familiar syntax.

    Interestingly, the author of TFA seems to be operating under the assumption that the Case construct is an unqualified positive change and sneaking the corresponding semantics into that unfortunate imperative code is a wholly positive goal for the language design.

    Without taking a position on the above positivity, I think the maneuvers language designers take while designing syntax and semantics (as exhibited in Swift’s Switch syntax for a Case Expression) is motivated by divergent, and often times strange, priorities and prior assumptions. So, from the 10,000’ view, does enshrining priorities and assumptions, and others like it, as a hard coded facet of the language the right path for languages generally? Should a language seek to be an overall more general framework for programming, leaving a vast majority of the syntax and higher-level semantics to be chosen and instantiated by devs where fit-for-purpose and pros/cons direct its inclusion? Or is the goal for opinionated languages, with or without accompanying sugar to help smooth over differences from other languages, the better path? Is there a ‘happy’ medium where:

    1) design goals and forward thinking or experimental syntax/semantics get put in the language as an ‘it’s for your own good’ method for advancing the field as a whole and advancing/optimizing a single dev’s programs in particular;

    2) the default position of a language should be as generalized as possible, but with abilities and options for users to specify what advanced, uncommon, or divergent syntax/semantics are utilized in a given program?

gary17the 7 hours ago

If you want more convenience from Rust and do not want to mess with Rust borrow checker, you do not really have to switch to Swift: you can rely on Rust reference counting. Use 1.) Rust reference-counted smart pointers[1] for shareable immutable references, and 2.) Rust internal mutability[2] for non-shareable mutable references checked at runtime instead of compile time. Effectively, you will be writing kind of verbose Golang, but keep Rust expressiveness.

[1] https://doc.rust-lang.org/book/ch15-04-rc.html

[2] https://doc.rust-lang.org/book/ch15-05-interior-mutability.h...

  • Cyph0n 5 hours ago

    Also, you get the ability to use Rc (non-atomic refcount) as long as you’re not in a multithreaded env. The atomic version is Arc, which is similar to C++ shared_ptr.

    And there are no footguns to using Rc. More specifically, you cannot mistakenly use a Rc across threads, because the compiler will ensure that you aren’t doing this thanks to the Send marker trait.

  • rjh29 6 hours ago

    It gets really verbose though!

    • virtualritz 6 hours ago

      > It gets really verbose though!

      Nope, you just use wrapper types (which you should anyway).

jdalsgaard 6 hours ago

I would tend to disagree; fundamental to Rust is the concept of zero-cost abstraction. Swift does not do that.

I my view, and I might be wrong, many features of Rust are chosen specifically to have the language comply to the zero-cost rule. Such as the ownership model.

  • isodev 5 hours ago

    The explicit ownership model in Rust also protects one from the footguns of actors and Tasks in Swift. Rust also makes most mistakes in that area a build time error which is not only a huge time saver but also helps one learn and improve in these areas.

  • behnamoh 5 hours ago

    Swift also supports the ownership model.

    • kibwen 3 hours ago

      Defaults matter. Owned types are the default in Rust and opt-in in Swift. As a consequence, by default it's safe to assume that any Swift code you fine in the wild isn't making use of owned types.

porcoda an hour ago

I’ve done both Swift and rust for Linux applications (symbolic analysis tools and compilers, not web stuff or other server apps). I have to say, I’m torn after building a couple moderate (10-30k SLOC) scale tools in both. I prefer swift since I feel like I’m working at the abstraction level I prefer and letting the ARC stuff take care of memory for me. Rust isn’t so bad, but it does make me think more about things that I don’t when I’m in Ocaml or Swift. Rust has better tooling: the LSP support makes life nice in emacs. Compiler feedback and clippy : super useful. Not a fan of the high usage of crates (I’m in the paranoid about supply chain camp). Swift felt like it shipped with more batteries included. I think the main factor is the people side: however much I like swift, I’m more likely to find rust people in my world. I’m rooting for swift though: the world has room for more than one memory safe C++ successor.

killingtime74 7 hours ago

Even if it's the same (faster horse?) I would rather use Rust for the fact it's development is not tied to a big tech company which could abandon it if they liked. Yes it could continue on as a fork but it's development velocity would suffer.

  • threatofrain 7 hours ago

    If we're going to be concerned about any language languishing due to a lack of support... like, I don't think people are going to put "Apple dropping support" as anywhere near their shortlist. Rust has a higher risk of losing support.

    • kibwen 7 hours ago

      Apple was the primary and only major sponsor of Objective-C, used it as the core foundation of their entire platform, and dropped it like a stone with little warning or ceremony. Yes, being tied so closely to Apple is an existential risk for Swift. One need only look at the quality and trajectory of MacOS to see that Apple isn't a software company, let alone a company that cares about developer experience (Xcode, anyone?). As far as modern Apple is concerned, the primary benefit of Swift is that it produces a tiny bit extra lock-in for iOS apps, by making cross-platform development more difficult.

      • KlayLay 6 hours ago

        People still write applications in Objective-C (e.g., see Transmission [1]), and the language is still maintained to support the latest OS. If anything, Apple being the largest sponsor of Objective-C would suggest that you get greater vendor lock-in out of it than Swift, since you can at least use the latter outside of Apple platforms (e.g., on a server).

        [1]: https://github.com/transmission/transmission

      • CharlesW 6 hours ago

        Objective-C is as dead because of Swift as C is because of Rust, which is to say, "not very".

        Objective-C remains a first-class iOS development language, and there's no sign of that changing for at least another decade.

      • st3fan 6 hours ago

        "and dropped it like a stone with little warning or ceremony"

        What?! This is complete nonsense. Swift was introduced 11 (!) years ago and it was clear from day one that it was going to be the future. Every single year since the introduction there were clear messages and hints in documentation and WWDC that Swift is in and Objective-C will _eventually_ be out.

        Little warning? Maybe if you kept your eyes closed the past 11 years.

        And do not forget that today you can still write apps in Objective-C.

      • j3th9n 7 hours ago

        Such bullshit, macOS is the best OS for power users.

  • Hamuko 7 hours ago

    A lot of Apple's software is written in Swift now. It's probably not in their interest to abandon the language.

    • HaloZero 6 hours ago

      I mean they did switch from objective c. At some point they might switch again if it makes sense.

      • cube00 5 hours ago

        Especially if the promise of coding agents porting between languages is even partially realised it could make it very easy for them to switch.

      • hokumguru 6 hours ago

        I mean, after some almost 40 years. If 40 years from now, hell, even 20, Apple abandoned the language I’m not sure I care about the risk.

        And that’s not to say they don’t support objective-c still. It just hasn’t been actively developed with new features.

  • rvz 6 hours ago

    > I would rather use Rust for the fact it's development is not tied to a big tech company which could abandon it if they liked.

    Go's development is tied to Google Inc. and is widely used at Google. Same with Microsoft's C# with .NET and Swift isn't very different to this as long as it is open source.

    So this really is a moot point.

    • sealeck 5 hours ago

      Go has a critical mass that Swift clearly doesn't (i.e. there are many, many companies who have net profits of >$1bn and write most of their server software in Go).

      Additionally Google isn't selling Go as a product in the same way as Apple does Swift (and where Google does publish public Go APIs it also tends to use them in the same way as their users do, so the interests are more aligned)...

      • behnamoh 4 hours ago

        > Additionally Google isn't selling Go as a product in the same way as Apple does Swift

        Hmm, Apple isn't selling Swift as a product either; it's literally what they needed for their own platform, much like how GOOG needed Go for their server works.

    • kibwen 5 hours ago

      Objective-C had its own open source source implementations, along with a better cross-platform story than Swift has ever had, and yet Apple's abandonment still managed to reduce it to irrelevance.

    • cube00 5 hours ago

      IMHO your case for a moot point would be stronger if you also mentioned which company you feel is tied to Rust in the same way as the other languages you've mentioned.

  • nomel 7 hours ago

    First sentence of the wiki page [1]:

    > Swift is a high-level general-purpose, multi-paradigm, compiled programming language created by Chris Lattner in 2010 for Apple Inc. and maintained by the open-source community.

    As the article repeats, it is not Apple specific.

    [1] https://en.wikipedia.org/wiki/Swift_(programming_language)

    • piyuv 6 hours ago

      Swift being maintained by the open source community is an illusion. The community was very against function builders. Apple went ahead and did it anyway because they needed it for SwiftUI. The open source community just provides discussion, and Apple gets its way either way.

    • dochtman 6 hours ago

      I'd bet a supermajority of Swift commits comes from Apple developers. Pretty sure the rust-lang/rust commit authors would be much less centralized.

    • WD-42 6 hours ago

      Yup just like google doesn’t actually control chromium right

    • Aurornis 6 hours ago

      I know Swift is technically not Apple specific, but it says right there in your quote that it was created for Apple and Apple is the giant weight behind it.

      I doubt Apple is in danger of dropping Swift, but if they did it would create a devastating vacuum in the Swift ecosystem.

    • afavour 5 hours ago

      But the fact remains that if Apple abandoned Swift tomorrow the language would almost certainly wither and die.

    • heavyset_go 5 hours ago

      It's about as maintained by the "open source community" as Android is lol

kibwen 5 hours ago

> Swift on Windows is being used by The Browser Company to share code and bring the Arc browser to windows.

Arc is no longer being developed ( http://www.newswarner.com/2025/05/27/the-browser-company-exp... ) and AFAICT their efforts to port Swift to Windows for its sake have been cancelled.

jsomedon 20 minutes ago

Looks like the post was written in 2023, I wonder how much better did Swift get in crossplatform department these days?

dagmx 7 hours ago

There’s definitely areas where I agree Swift is more ergonomic.

Parameter defaults, and null short circuiting are two of them.

I find writing Swift is faster for me, and it’s easier to learn for people than Rust. Also Swift interop with other languages is much simpler.

Though there are way fewer resources to learn Swift, and cargo is superior to SPM. And of course rust is better cross platform today, but Swift is closing the gap.

I think they feel like very similar languages overall, and they both influence each other.

beshrkayali 7 hours ago

Writing Swift is really fun! Last year I built a game and a macOS app (now working on another app) to get some proper hands on experience and I was very impressed. Wrote about it here[1].

I'd love for the experience outside of Xcode to get better (even on a mac, developing for macOS/iOS) but I have to say that I didn't find Xcode to be _that_ aweful. I've certainly used worse IDEs, which is partly why I dislike IDEs altogether.

1: https://log.beshr.com/notes-on-swift-from-building-an-ios-ga...

  • bloomca 3 hours ago

    I personally never seen anything as bad as XCode, but granted, I haven't used really old IDEs (always preferred just editors). Last year I built a few small apps using both XCode/Swift and Visual Studio/C# and using MS stack felt like you are living in the future, despite WinUI having a very dated UI syntax.

999900000999 3 hours ago

Hmm.

How about Rust is Rust. Swift doesn't really appeal to me as a high level programer. C#, JS and Python largely pay my bills.

The non apple ecosystem just isn't there, and it was never built to be cross platform. If I need to build something I'd probably lean on the languages I already know.

A few times a close friend has wanted an app built and I went with Flutter/Dart + Firebase.

I'm using Godot for games.

Learning a new language, even a similar one is a time investment. In fact I just want better tooling for the languages I already know. Word to UV for Python.

thomassmith65 5 hours ago

I lived and breathed Swift for the first five or six years of its existence. When people compliment it, I assume they haven't used it long enough to hate it.

Swift is a mix of great features, miserable features, and... every other feature that someone on Evolution dreamt up (with the exception of those that would fix the miserable features)

Swift is unique among high-level languages in that the mental effort required to do many simple things rivals that of a low-level language.

  • ks2048 5 hours ago

    I think you have to give some examples.

    • thomassmith65 5 hours ago

      It's been a while, but the one I remember with the most horror was dealing with Enums, and Enum payloads. Since Swift is statically-typed, many 'type union' situations end up becoming difficult problems. The question usually boils down to thinking about choosing one of (a) Enum with Payload (b) Generic (c) Type erasure. Nearly anything technically is do-able, but I wasted many hours (ie: repeatedly, not until I figured out the 'right way' for every situation) deliberating over how!

politelemon 4 hours ago

I can trust the community behind Rust. I cannot trust the company behind swift. They hold a stance that is against open source, and this stance can affect swift at any time, so I wouldn't want to invest into something that could be affected at a whim. It is certainly not convenient.

Larrikin 5 hours ago

Kotlin and Swift came in to popularity around the same time. They felt extremely similar at the beginning

Kotlin put a lot of work into proving itself as something more than just a language for Android development, starting first with backend.

It seems like once KMP became viable Swift is just trying catch back up.

  • cosmic_cheese 4 hours ago

    Opinions on this will vary, but for me Kotlin’s ties to the JVM and associated tooling is like a ball and chain. The language itself is mostly fine (though it has some weird design hangups compared to Swift), but I really do not enjoy the tooling at all. Gradle for example has me banging my head against the wall way too often.

cosmic_cheese 4 hours ago

To me a big ding on Rust is no native imperative UI toolkit. Last I knew all Rust UI toolkits are declarative, which I’ve found to scale poorly past things like terminals, text editors, some mobile apps, and somewhat simplistic utilities. The more complex your UI gets, the more awkward and ill-suited declarative UI becomes. For something like a replacement for Photoshop or Word or even just Firefox you’re better off with something like AppKit.

usamoi 6 hours ago

I really don't understand what's the point of such comparisons. Swift uses subtyping, while Rust uses typeclasses. Even looking only at their type systems, the two are completely different. You can't assume they are similar just because they both use the Latin alphabet.

  • slavapestov 6 hours ago

    > Swift uses subtyping, while Rust uses typeclasses. Even looking only at their type systems, the two are completely different.

    What does it mean to “use” subtyping vs typeclasses? Swift protocols are essentially typeclasses with associated types, just like Rust traits.

fooker 3 hours ago

Swift's happy path is pretty good, i.e. when you want to use a recent-ish toolchain to develop IOS applications using APIs that are not too new.

The more you deviate from this, the more cracks there are.

bla3 2 hours ago

Since then, Swift also grew excellent C++ interop, something Rust doesn't have at all.

drnick1 6 hours ago

No thanks, too tied to Apple and closed source development models.

dzonga 4 hours ago

I once wrote a swift server app - hell even did a show hn over here

last time when I used Swift was v3 - and transition from v2 was a little rough.

the language kept adding features becoming a baby C++

if they had invested in bringing outside parties early on - not just iOS etc - swift would've replaced python

g947o 4 hours ago

"The compiler is unable to type-check this expression in reasonable time; try breaking up the expression into distinct sub-expressions" doesn't feel convenient to me.

csmantle 5 hours ago

Swift has little to no toolchain support for less-common platforms like more recent MIPS, LA and alike. I frequently work and develop on such platforms, so sadly this is the major nay for me to use it.

OrangeDelonge 7 hours ago

I generally like Swift, but async is a mess, it feels like they come up with a new async library every release

  • hn-acct an hour ago

    Just forget everything you've learned about it previously, use 6.2+, non isolated by default and every upcoming feature turned on. And your intuition will be spot on.

xannabelle 7 hours ago

I was surprised how similar their approach was to memory management. The creator is doing the same thing for Python as they did for Objective-C, making way for a new wave of Swift and Mojo, although we'll have to see if the latter grows to the same success.

nubg 3 hours ago

> to do reference counting and “clone-on-right” in your code

Was this article vibe dictated?

nixpulvis 5 hours ago

> Swift takes Rust’s ideas and hides them in C-like syntax.

This example doesn't show me any meaningful difference, and Rust also let's you attach functionality to enums.

  • isodev 5 hours ago

    Swift tends to overuse enums, for example people would use them instead of namespaces or when they want a function but don’t want to create a class or a struct which in my opinion has always felt like a work-around for language deficiencies.

  • kibwen 5 hours ago

    It also assumes that "C-like syntax" is a desirable thing. Many of the worst parts of Rust syntax (and Swift syntax, and Java syntax, and Javascript syntax, and...) are things it took from C.

syspec 3 hours ago

I think this title is doing more harm than good.

Both are great languages

isodev 6 hours ago

Until you get to the Swift concurrency stuff, or you try to use Swift on a backend or non-Apple system - then it’s hot garbage.

If Rust is too low level for you, you can write Go or Kotlin or even something new and fresh like Gleam.

  • frizlab 5 hours ago

    Except I did and it was good. When did you last try?

    • isodev 5 hours ago

      It’s what I do, every day. You maybe in need of a broader horizon for comparison

Alex_L_Wood 6 hours ago

One of the Swift’s worst parts is how Apple keeps putting features in there just for the sake of SwiftUI.

HippoBaro 6 hours ago

> Rust invented the concept of ownership as a solution memory management issues without resorting to something slower like Garbage Collection or Reference Counting.

This is plain wrong, and it undermines the credibility of the author and the rest of the piece. Rust did not invent ownership in the abstract; it relies on plain RAII, a model that predates Rust by decades and was popularized by C++. What Rust adds is a compile-time borrow checker that enforces ownership and lifetime rules statically, not a fundamentally new memory-management paradigm.

  • frizlab 5 hours ago

    Thank you for saying that. It makes me crazy every time I read that rust invented the concept of ownership…

morshu9001 3 hours ago

I used Swift in versions 1-4, so idk if it's better now, but the syntax seemed fancy and complicated for no reason. So many different ways to do simple things like loops. Infuriating strings lib. Kinda believe the entire language was designed around emojis. And Xcode was a liability.

Rust is more complicated than C but has good reasons for everything it does. It's lower level too, which is fine. If I want high level, I look to JS and not Swift.

Zak 4 hours ago

> Except this switch statement is actually not a switch statement at all. It’s an expression. It doesn’t “fallthrough”. It does pattern matching. It’s just a match expression with a different name and syntax.

Giving a familiar name to a concept which behaves in familiar ways some of the time and surprising ways other times seems like a dirty trick to me, not a convenience.

rcarmo 6 hours ago

Riiiiight. No. I'm a Mac user for decades, former Obj-C hacker, have tried and tried again and again to use Swift (and I have quite a few CLI apps written in it), but the thing has been a clusterfuck of paper cuts and very minor but significant changes over the years, and I gave up waiting for it to settle.

And it's not a more convenient Rust. I'd rather use Zig or Go (neither of which are worthy in the eyes of true Crustaceans, but which just get the job done).

suddenlybananas 7 hours ago

I don't really see the advantage of switch statements over match statements.

bigyabai 7 hours ago

Glad to see "Swift is good now" taking the place of "year of the Linux desktop" in a post-Steam Deck world.

rickstanley 6 hours ago

Toady I used GLM 4.7 to port a C++ project of mine to Rust, so I could read and toy with it, to get into the language: https://codeberg.org/RickStanley/agatetepe-rs.

Really interesting results, not sure how well it is written but works. I was quite found of Rust syntax; it certainly is not as convoluted as C++ (in my opinion).

Then I read this article. Since I was already eye-balling Swift for some time, I decided to give it a try and port to it, using Rust implementation as reference, and this time, without much of A. I. assistance, if I could help it.

I'm using an qcow2 Debian trixie arm image in UTM as playground. I found out that there is no packaging for Debian at the time of this writing: https://github.com/swiftlang/swift/issues/60690. No problem! They have a script for installing: https://www.swift.org/install/linux/

    curl -O https://download.swift.org/swiftly/linux/swiftly-$(uname -m).tar.gz && \
    tar zxf swiftly-$(uname -m).tar.gz && \
    ./swiftly init --quiet-shell-followup && \
    . "${SWIFTLY_HOME_DIR:-$HOME/.local/share/swiftly}/env.sh" && \
    hash -r
But, god damn, the size is huge,

    Unsupported Linux platform
    Debian GNU/Linux 13 (trixie) is not an officially supported platform, but the toolchains for another platform may still work on it.
    Please select the platform to use for toolchain downloads:
    
    0) Cancel
    1) Ubuntu 24.04
    2) Ubuntu 22.04
    3) Ubuntu 20.04
    4) Ubuntu 18.04
    5) Fedora Linux 39
    6) RHEL 9
    7) Amazon Linux 2
    8) Debian GNU/Linux 12
    Pick one of the available selections [0-8] : 
    
    8 
    Installing swiftly in /home/debby/.local/share/swiftly/bin/swiftly...
    Creating shell environment file for the user...
    Updating profile...
    Fetching the latest stable Swift release...
    Installing Swift 6.2.3
                      Downloading Swift 6.2.3
    100% [========================================================]
    Downloaded 947.6 MiB of 947.6 MiB
    
    Verifying toolchain signature...
    Extracting toolchain...
    The file `/home/debby/ent/agateteper/.swift-version` has been set to `Swift 6.2.3`
    The global default toolchain has been set to `Swift 6.2.3`
    Swift 6.2.3 is installed successfully!
    There are some dependencies that should be installed before using this toolchain.
    You can run the following script as the system administrator (e.g. root) to prepare
    your system:
    
        apt-get -y install libicu-dev libcurl4-openssl-dev libedit-dev libsqlite3-dev 
        libncurses-dev libpython3-dev libxml2-dev pkg-config uuid-dev libstdc++-12-dev

947.6 MiB ! I wonder why is that...
drcongo 6 hours ago

This article made me actually interested in learning Swift. Anyone recommend a good place to start?

worik 5 hours ago

I am unconvinced

I have used Swift (stopped about two years ago) and use Rust extensively these days.

People commenting here have mentioned the dreadful Xcode. But if you want to build systems on Apple, without investing a lot in setup, you are stuck with Xcode.

To be clear it's failures as an editor or build system are not the main problems with Xcode (albethey very frustrating when the intermittent problems show up) it is the abject failure of the tooling.

We never got the profiler to produce anything intelligible after days of trying, spread over several weeks.

SwiftUI is not part of the conversation here, and I limit the amount of UI building I do, but it shares all the problems of declarative UI frameworks - mainly "where is the code?". Debugging logic problems is nigh impossible in code you're unfamiliar with

The very worst part of Swift were the thread control. Trivial to overwrite shared memory, "DispatchQueus" (?IIRC?) are a thin wrap of fork, and do nothing but add complications

Swift is probably better than Objective C, the latter being from the 1980s, and things have moved on, if your target is iOS and friends, and you are sure you never want to port, then obeying Apple is a wise business decision. Other than that stay away from it. Use Go for most things, and Rust when you must

  • frizlab 5 hours ago

    I’m sorry but reading your comment, you have not understood much about Swift (and GCD).

    In particular “"DispatchQueus" (?IIRC?) are a thin wrap of fork, and do nothing but add complications”, in addition to having typo, is as wrong as it can get.

    > if you want to build systems on Apple, without investing a lot in setup, you are stuck with Xcode.

    If you want to do in Swift the same type of dev you do in go/rust/whatever, Xcode is more than not mandatory, it is generally recommended to use something else, including in the Swift community. Also, you can build native apps in Swift using something else than Xcode (if it is possible to do that in rust for macOS, it is obviously possible with Swift).

    > We never got the profiler to produce anything intelligible after days of trying

    You mean Instruments? That app is incredibly good, I fail to see how you failed to get anything out of it.

    > The very worst part of Swift were the thread control

    Already talked about that one, but Swift has async/await now, also.

    • worik 3 hours ago

      Async/await is not a solution to poor thread models.

      Async/await is cooperative multitasking and is no help at all for cpu bound problems.

      For i/o intensive systems it makes non-blocking i/o look like blocking i/o, and people find that helpful.

      I do real-time i/o so I need more control and Async/await is unhelpful.

      It is a worthy adition to Swift I agree. But they sorely lack Rust's excellent design in this area

  • positron26 3 hours ago

    Yeah. You can bind C in swift. You can expose C interfaces from Rust. Write non-iOS code in Rust, then bind. Now you have iOS support with common client code in Rust.

    You can compile Rust to WASM. You can run Rust on the backend. It's gaining popularity on k8s for memory consumption. You can write music visualizers in Rust. You can pivot to killer drones or embedded in Rust. It has very few foot guns compared to C and all of the advantages of C.

    The people who want Swift to succeed off of Apple hardware are basically waiting for someone else to do it. Rust users will just invade Apple from every side. It is very clear which platform is the better investment of anyone's time.

    I can't believe I'm even wasting keystrokes thinking about this. I saw a bunch of upvotes and can only imagine this has to be wishful thinking from Swift users.

  • airstrike 5 hours ago

    I can relate so much to this comment I need to check my house's CO2 level to make sure I didn't write it

    Well, the only difference is I'm allergic to Go and just use Rust 99% of the time these days

    • worik 3 hours ago

      > is I'm allergic to Go and just use Rust 99% of the time these days

      I confess I have not used Go. I am allergic to Typescript, let alone, Javascript, and Node.js should be deleted.

      I do mostly real-time audio, so I too am Rust (job control in Shell). But what decent choices are there for garbage collected systems?

      And garbage collection, for most systems, is crucial

      • positron26 3 hours ago

        Leptos etc. WASM is mature enough to just go for it. Same code sharing arrangement as using TS on the backend but using the backend language on the frontend instead.

Mawr 3 hours ago

> without resorting to something slower like Garbage Collection or Reference Counting

Hah! But RC is GC! [1]

> Again, this is just deception for those developers coming from C-like languages. Swift’s error handling works exactly like Rust’s behind the scenes, but it is hidden in a clever, familiar syntax.

But the indent heavy syntax is one of the worst parts of exceptions?

    Rust:
    fn value_in_cents(coin: Coin) -> u8 {

    Swift:
    func valueInCents(coin: Coin) -> Int {
Well, that settles it — it is known languages that use snake_case are superior.

> This is because Rust is fast by default, and lets you be slow, while Swift is easy by default and lets you be fast.

Good, good, you're onto something here.

> There is a perception that Swift is only a good language for Apple platforms. While this was once true, this is no longer the case and Swift is becoming increasingly a good cross-platform language.

Sigh. But you just said defaults matter, come on. Let me paraphrase: "This is because Swift is for Apple platforms by default, while Rust is cross-platform by default."

[1]: https://www.youtube.com/watch?v=NdREEcfaihg

[removed] 2 hours ago
[deleted]
IshKebab 7 hours ago

Interesting. I'm not totally sold - still seems like Swift is quite niche and Apple-specific - but I might take another look.

Also you might want to rework the `Box` example because you don't actually need to use `Box` in that case - the `Vec` already provides indirection.

amelius 7 hours ago

> Swift is better for writing UI and servers and some parts of compilers and operating systems.

For UI, why would anyone choose a language that has no automatic GC that can handle cycles?

  • mh2266 4 hours ago

    weak delegates seem to work fine...?

  • keyle 7 hours ago

    Look up the language and ARC.

    • astrange 5 hours ago

      ARC doesn't do cycles, but it is deterministic and more power efficient than GC.