I like Objective C. I worked at Apple for a couple of decades and I still think it hits the sweet-spot between expressiveness and complexity. Just a dozen or so more keywords over C and it became so much more. It certainly helped that it came with a really good class library. However, the writing is on the wall for ObjC, it has been for a decade, and I’m not a fan of Swift. So, being retired I thought I’d look at what I could do to create something in the ObjC vein, and maybe file off some warts along the way.
Enter ‘xc’ [1]. It’s cross-platform (Windows, Mac, Linux), and can compile for (amongst others) Windows, Mac, Linux, iOS, Android and WASM. I’m slowly building out an AppKit-like UI library [2] that supports all the platforms with the same View / delegate / datasource paradigm as AppKit, and an Interface-Builder like app that lets you associate the same code core with a variety of platforms layouts {desktop, tablet, phone,}
If you know ObjC, xc will be very familiar though there’s a lot less [] - the function/method calling style is C not ObjC. It has ARC and blocks (without the god-awful block syntax [7], I use 'block' as a type), threads, a Foundation like class library (no NS prefix). It doesn’t have header files, preferring to bind C libraries by reading the DWARF data in library for types/structs/classes/methods/functions. So a ‘#use <psql>’ statement will parse libpsql.so, read out all the types and let you use them. I adopted C-style structure ordering on the target platform to make this seamless.
As far as performance, it’s pretty much on-a-par with clang, on all 64-bit targets [3]. Sometimes a bit faster (notably method/function calls), sometimes a bit slower. That’s good because it gives me a target to still optimise. It’s basically float vectorisation that is the long tail, clang vectorises in places you might not initially expect, for good reason.
In some ways, this is going from a somewhat-still-popular language to a language used by precisely 1 person (me), but the advantage of owning the compiler is the ability to effect change in an afternoon, not 6 months. It’s also rather cool to have the same classes for the web-app that talks to your back-end server, and if you implement the ‘Codable’ protocol, to be able to serialise those classes seamlessly between WASM client and native server. Using xc let me write blewit.net [4] really easily, and one of the games within blewit (Monokracy [5], a web-client rewrite of Wolfpack Empire [6]) is in-process so I'd say its undergone at least some "in anger" testing, not just the 900 or so unit-tests.
So I agree that you should be able to change our languages, though perhaps my path and the author's differs somewhat :)
[1]: https://compile-xc.org
[2]: https://compile-xc.org/compiler/api/uxkit/guide-first-window...
[3]: https://compile-xc.org/compiler/performance/
[4]: https://blewit.net/sandbox/
[5]: https://0x0000ff.co.uk/img/blewit/monokracy.png
[6]: https://www.empire.cx
[7]: http://goshdarnblocksyntax.com (https didn't work for me)