Andreas Kling aka @awesomekling wrote:

We’ve been evaluating a number of C++ successor languages for @ladybirdbrowser , and the one best suited to our needs appears to be @SwiftLang 🪶

Over the last few months, I’ve asked a bunch of folks to pick some little part of our project and try rewriting it in the different languages we were evaluating. The feedback was very clear: everyone preferred Swift!

Why do we like Swift?

First off, Swift has both memory & data race safety (as of v6). It’s also a modern language with solid ergonomics.

Something that matters to us a lot is OO. Web specs & browser internals tend to be highly object-oriented, and life is easier when you can model specs closely in your code. Swift has first-class OO support, in many ways even nicer than C++.

The Swift team is also investing heavily in C++ interop, which means there’s a real path to incremental adoption, not just gigantic rewrites.

Strong ties to Apple?

Swift has historically been strongly tied to Apple and their platforms, but in the last year, there’s been a push for “swiftlang” to become more independent. (It’s now in a separate GitHub org, no longer in “apple”, for example).

Support for non-Apple platforms is also improving, as is the support for other, LSP-based development environments.

What happens next?

We aren’t able to start using it just yet, as the current release of Swift ships with a version of Clang that’s too old to grok our existing C++ codebase. But when Swift 6 comes out of beta this fall, we will begin using it!

No language is perfect, and there are a lot of things here that we don’t know yet. I’m not aware of anyone doing browser engine stuff in Swift before, so we’ll probably end up with feedback for the Swift team as well.

I’m super excited about this! We must steer Ladybird towards memory safety, and the first step is selecting a successor language that we can begin adopting very soon. 🤓🐞

      • mke@lemmy.world
        link
        fedilink
        arrow-up
        1
        ·
        edit-2
        4 months ago

        That’s actually interesting, I learned something new today.

        cross-platform CLI and server

        Will Ladybird compete against lynx? …No? I tried. Jokes aside, I don’t see why that’d matter much for end-users.

        It looks to me like Apple wants Swift on Linux, but that might simply be because they understand you can’t run away from Linux when dealing with servers. That’s not necessarily the same as wanting to create a cross-platform (read: greater than Apple and Linux) ecosystem.

    • LeFantome@programming.dev
      link
      fedilink
      arrow-up
      5
      ·
      edit-2
      4 months ago

      The text you quote literally appears under the heading “Apple Platforms”. Gee, why don’t they mention anybody else in the Apple section?

      Immediately below that, there is a cross-platform section where they say “SwiftArgumentParser and Swift’s growing package ecosystem make developing cross-platform command-line tools a breeze.”

      So, at worst, it sounds like the main Swift project may leave you to heft some of the GUI load yourself. Except 99% of what Ladybird does is under the hood processing that creates bitmaps for display. There is hardly any GUI really. Plus, Swift offers C++ interop.

      Ladybird stems from SerenityOS where they write everything themselves. They have their own networking, GUI libraries, and crypto. Since splitting, they have adopted font rendering and media libraries from other projects ( largely available as C code I believe ).

      Swift is cross-platform in all the ways the Ladybird gang needs it to be. It uses LLVM ( very cross-platform ) and the Swift compiler is meant to be cross-platform. All that will evolve and improve independent of Ladybird itself. The Ladybird team does not need many libraries from the Swift ecosystem. What they will need is pretty basic and fundamental.

      Think back to Rust and Mozilla. When Mozilla rewrote the CSS parser in Rust, how much GUI rework was required? None? The CSS parser fell into the space defined by “command-line tools”.