I’ve been programming for decades, though usually for myself, not as a profession. My current go-to language is Python, but I’m thinking of learning either Swift (I’m currently on the Apple ecosystem), or Rust. Which one do you think will be the best in terms of machine learning support in a couple of years and how easy is it to build MacOS/ iOS apps on Rust?

  • @[email protected]
    link
    fedilink
    910 months ago

    I think Python is still unmatched when it comes to ML, and nothing can beat Swift in terms of Apple ecosystem support. Why not learn both, though? I find Swift a bit harder to reason with than rust, but both have merit (and both have interesting use cases). Just see what uses you will find for them as you progress.

    • @[email protected]OP
      link
      fedilink
      English
      310 months ago

      I was working on the assumption that it would make it harder to learn two at once. Maybe you are right though.

      • @[email protected]
        link
        fedilink
        5
        edit-2
        10 months ago

        Honestly - now that you know one language learning any new language is a pretty simple task. For example - here’s a hello world in the three languages:

        # Python
        print("Hello, World!")
        
        // Swift
        print("Hello, World!")
        
        // Rust
        fn main() {
            println!("Hello, World!");
        }
        

        As you can see, the differences between Swift and Python are pretty minimal* and while rust adds a whole bunch of extra busywork (you need a function, you need an explanation point, you need a semicolon…) it’s generally the same thing.

        (*) While that comparison of Python/Swift only differs in the comments, Swift is generally a much more complex language than Python, so you will need to learn a bunch of new concepts. For example if you needed to manually specify the output string encoding you’d write the Swift hello world like this:

        let string = "Hello, World!"
        if let data = string.data(using: .utf16) {
            print(data)
        }
        

        There are some common Swift language patterns there that are rare in other languages:

        • if let will gracefully handle any errors that occur in the encoding step (there can’t be any errors when you’re using utf16 encoding, but if another encoding format was specified it might fail if, for example, you gave it an emoji.
        • Swift allows you to interleave part of your function names in between the function arguments. That’s not a data() function, the function name is data(using:) and there are other function names that start with data() but accept totally different arguments, for example you might give it a URL and it would download the contents of the URL as the contents of the data.
        • the .utf16 syntax is also something I haven’t seen elsewhere. The using parameter only accepts String.Encoding.something and you can shortcut that by only writing the .something part.

        For completeness, in python and rust you would do:

        # python
        string = "Hello, World!"
        utf16_data = string.encode("utf-16")
        print(utf16_data)
        
        # rust
        fn main() {
            let string = "Hello, World!";
            let utf16_data: Vec< u16 > = string.encode_utf16().collect();
            println!("{:?}", utf16_data);
        }
        

        That’s actually pretty good comparison of the three languages and an example of why I like Swift.

        The syntax in Rust is absurdly complicated for such a simple task. And while the Python code is very simple, it doesn’t handle potential encoding errors as gracefully as Swift, and it also uses a string to specify the encoding, which opens up potential mistakes if you make a simple typo an also you’ll have to do a Google search to check - is it “utf-16” or “utf16”? With Swift the correct encoding string will auto-complete and it will fail to compile if you make a mistake.

        • @[email protected]OP
          link
          fedilink
          English
          1
          edit-2
          10 months ago

          Python actually isn’t my first language, just my current choice. I’ve programmed in Basic, Pascal, Fortran, PL-SQL, Prolog and C at various times in the past. My question was more about which is likely to scale over time to be the more popular ML language.

          Python also sucks for MacOS gui apps, so I was contemplating building MacOS/iOs apps for myself as a side quest.

          • @[email protected]
            link
            fedilink
            310 months ago

            Purely from the standpoint of making GUI apps in macOS/iOS, Swift is almost certainly the best choice. All of Apple’s UI frameworks are written in Swift (technically often Objective-C, but with Swift in mind), and designed to be used from Swift. It’s kind of possible to do this in C++ using Objective-C++, but nearly all of the UI code is going to be Objective-C anyways (Objective-C is the language that used to be the default on Apple platforms, but was replaced by Swift). It’s also certainly possible to use libraries for other languages that wrap this functionality, but these often can be missing features and/or be harder to work with. Additionally when looking for help, you’re likely to find much more support out there for the native frameworks since that’s what most people are using.

          • @[email protected]
            link
            fedilink
            110 months ago

            OK - well at the end of the day the right approach is to have a problem you’re trying to achieve and pick the best language for that (wether you know the language or not).

            If it’s MacOS/iOS apps, then definitely don’t choose Rust. But reconsider that choice for your next project.

            Also, with modern large language models, it’s even easier to work with an unfamiliar language. And honestly it wasn’t ever all that difficult.

      • @[email protected]
        link
        fedilink
        310 months ago

        The tricky part isn’t the syntax, it’s the domain knowledge. Well, actually it’s syntax, too. Swift has a whole lot of things that aren’t like anything else with sprinkles of Objective-C. Rust turns the common patterns upside down because they make borrow checker sad. But, in the end, what makes you a good engineer is knowing how to apply the tool to solve the problem and that goes well beyond syntax.

        Programming languages are like different kinds of saws: all of them are made to cut things, but there are nuances. Some are replaceable, others can be used for one specific thing. Knowing how to operate a hacksaw gives you some idea how a chainsaw would work even though they are fundamentally different. But tinkle it this way: what are you trying to do? Answering that will tell you which saw you need to use.

        • @[email protected]OP
          link
          fedilink
          English
          110 months ago

          I’m trying to work out which one will have better for ML in a couple of years time.

            • @[email protected]OP
              link
              fedilink
              English
              210 months ago

              One of the things that I’m struggling with on Python is the very poor support for AMD GPU’s, which are in Macs. I’m sure Swift will do a better job of using the hardware capabilities better.

              • @[email protected]
                link
                fedilink
                110 months ago

                If you’re looking for the best utilization of your hardware, I wouldn’t be surprised if Apple’s ML frameworks were best. Since Apple has a small set of hardware, they can write software that takes advantage of it better. Consider looking into Core ML which is by Apple and for Swift. Of course this will only work for Apple hardware, but if this is just for personal interest/hobby then that doesn’t really matter.