| ▲ | Improving the usability of C libraries in Swift(swift.org) |
| 120 points by timsneath 13 hours ago | 15 comments |
| |
|
| ▲ | krzat 14 minutes ago | parent | next [-] |
| I love shitting on Apple's developer tools but they handled cross language integration really well. Swift Package Manager handles Swift, ObjC, C, C++ in the same project, code completion works just fine. Overall much nicer than in other ecosystems. |
|
| ▲ | woadwarrior01 14 minutes ago | parent | prev | next [-] |
| PythonKit[1] could be improved significantly with these new Swift 6.2 features. [1]: https://github.com/pvieito/PythonKit |
|
| ▲ | skrrtww 10 hours ago | parent | prev | next [-] |
| This is pretty great stuff, I knew about the raw interop features but had no idea what API Notes offered. Quite cool. I can't help but feel that Swift will ultimately be the "slow and steady wins the race" safe language of the future. Swift steadily working "first" on both tooling and cohabitability with existing ecosystems is a huge boon for adoption. It understands what an ABI is! If I were doing a greenfield cross platform application I think Swift would be the first thing I reach for now. The qualms I have with Swift are mostly some of the more recent complex language features that can make Swift code much harder to understand and read, as well as the brainpower required to use Swift concurrency. That and some performance concerns, though many of those seem like they may be solvable with optimizations in LLVM. |
| |
| ▲ | mpweiher an hour ago | parent | next [-] | | > ... some of the more recent complex language features This isn't recent. The approach that Swift took had this path locked in from the start, the (d)evolution towards ever more spiraling complexity was inevitable from the initial choices. And this is not 20/20 hindsight, a lot of people, including yours truly, were saying that fron the very start. As an example, take initialization: 2014: https://blog.metaobject.com/2014/06/remove-features-for-grea... The swift book has 16 rules and 14 pages just on object initialization. Chris replied in the comments: "the complexity is necessary for <feature we want> and thus simplicity must give way". My reply: "the <feature you want> is incompatible with simplicity and thus must give way". 2020: called it! https://blog.metaobject.com/2020/04/swift-initialization-swi... --- Or the syntax: https://blog.metaobject.com/2020/06/the-curious-case-of-swif... → Swift included all of Smalltalk's keyword message syntax as a special case of a special case of the method call syntax. --- Rob Rix: “Swift is a crescendo of special cases stopping just short of the general; the result is complexity in the semantics, complexity in the behaviour (i.e. bugs), and complexity in use (i.e. workarounds).” https://www.quora.com/Which-features-overcomplicate-Swift-Wh... | |
| ▲ | pjmlp 3 hours ago | parent | prev | next [-] | | That is surely the target for Apple platforms, whatever happens outside is more a nice to have kind of thing. As proven by the track record of all languages that want to be simple, created as kind of anti-trends, they always tend to evolve into complexity as their userbase grows, as it turns out other programming language didn't got complex just for fun. Then since they were initially created as kind of anti-complexity movement, the added on features always have warts due to not wanting to break compatibility, and are only half way there. C23 versus PL/I, ALGOL variants, Scheme R7RS (full report) vs Lisp evolution, Java 26 vs Modula-3/Eiffel, Go 1.26 versus everyone, ... | |
| ▲ | aaronbrethorst 6 hours ago | parent | prev | next [-] | | It feels like the language designers have never met a feature or paradigm they didn't love and agree to include :-\ | | |
| ▲ | arcticbull 3 hours ago | parent [-] | | Yeah, Swift started out fairly clear and cohesive and now it's just a katamari of every language feature ever made by anyone plus a whole bunch of home-grown features too. I'm always mixed on this because in isolation the feature is neat and I like it, but the totality of Swift is becoming as overwhelming and inconsistent as C++. Now some C functions which are indistinguishable from free Swift functions get named parameters, and you can switch on some enumerations from C, and some C objects are ref counted but other ones still need you to do it. It's going to be quite something to keep track of which library is which since there's no way to know apriori. | | |
| ▲ | mpweiher an hour ago | parent [-] | | While it has gotten even worse, thinking it was clear and cohesive in the beginning is rose tinted nostalgia. |
|
| |
| ▲ | peterspath 8 hours ago | parent | prev | next [-] | | This is a good write up about Swift Concurrency: https://fuckingapproachableswiftconcurrency.com/en/ | | | |
| ▲ | andeee23 5 hours ago | parent | prev [-] | | i’m not sure about the work on tooling just a few weeks ago i was trying to work on a swift project in neovim and found the whole langserver experience pretty bad and it’s way worse when working on swif ui apps, but i guess that’s more of an apple wanting you to use xcode thing. i wish there was better tooling, i like the language, but i just switched to nim for my side project | | |
| ▲ | pentamassiv 5 hours ago | parent [-] | | I find the Swift tooling very lacking. There's no way to lint dead code, there no way to auto format the files exactly as Xcode would do it and tell the linter those rules so that it doesn't lint your auto formatted code. Xcode project files are impossible to edit except with Xcode and Xcode often has issues and I need to manually empty the build folder. These are just some of the issues I remember |
|
|
|
| ▲ | w10-1 4 hours ago | parent | prev | next [-] |
| I believe Apple is investing in C/C++ interop so much because they realize they'll likely keep their existing low-level system+embedded code rather than port it to Swift. That's good for people who want to do the same. A swift API layer can reduce the need for C/C++ developers. But in my experience, there are sharp cliffs whenever you get off the happy path shown in the demos. That's not a problem with code where you can design workarounds, but when you wrap highly complex (if not arcane) C API, you often can't change or omit portions of the API causing problems. So while usability may be better, apinotes might not be enough to complete the work. If you're wrapping something, I would recommend cataloging and then verifying all the language features you need to make it work before getting too far in. |
|
| ▲ | isodev 2 hours ago | parent | prev | next [-] |
| It's good to have options. I guess this is similar effort as Swift's java interop - created to enable internal Apple needs and a cool feature to share on socials for engagement. I don't think any of this would attract people who aren't already forced to use Swift. Generally, Apple's open source/public efforts feel more like a thing they do so they can point at this during antitrust/gatekeeper lawsuits than actual healthy foss ecosystem. (which is not a surprise of course, Apple is the opposite of foss). |
|
| ▲ | handstitched 10 hours ago | parent | prev [-] |
| This was a great read. I've used the naive approach shown in the first example before and its always felt a bit clunky, but I wasnt aware of most of these language features. I'm definitely going to try this out next time I have to write C bindings |