Live data from Hacker News

Swift 6.3

swift.org

221–230 of 239 posts

Re: Swift 6.3

#221

Earlier quoted context omitted.

i would get rid of associatedtype, borrowing, consuming, deinit, extension, fileprivate, init, inout, internal, nonisolated, open, operator, precedencegroup, protocol, rethrows, subscript, typealias, #available, #colorLiteral, #else, #elseif, #endif, #fileLiteral, #if, #imageLiteral, #keyPath, #selector, #sourceLocation, #unavailable, associativity, convenience, didSet, dynamic, indirect, infix, lazy, left, mutating,…

It's true that internal is pointless. Focusing on the keywords rather than the macros, I think the rest of them have legitimate use cases, though they're often misused, especially fileprivate.

this is gonna sound ranty, but it's straight from the heart:

i think most of them are pointless. not every feature needs to be a new keyword. stuff could be expressed within the language. if the language is so inflexible in that regard that it's impossible to express stuff without a keyword, use macros for gods sake.

why is there a need to have a "convenience func" declaration?

why is "didSet" a keyword?

what about "actor"? most other languages don't have nearly as many keywords and manage to express the idea of actors just fine!

Re: Swift 6.3

#222
post #111

Earlier quoted context omitted.

> Swift has remained largely an Apple ecosystem Even today, with the fancy Swift 6.3, the experience of using Swift for anything other than apps for Apple platforms is very painful. There is also the question of trust - I don't think anyone would voluntarily introduce Apple "The Gatekeeper" in parts of their stack unless they're forced to do it.

You can use swift on the server but what for? You have a gigantic ecosystems in languages X,Y,Z. Even Apple does not use Swift on the server (AFAIK) so why would you?

I personally worked on several server-side Swift projects at Apple.

Re: Swift 6.3

#223
post #214
post #131

Earlier quoted context omitted.

The thing what people don't get with C++'s complexity is that complexity is unavoidable. It is also there in Ada, C#, Java, Python, Common Lisp,.... Even if the languages started tiny, complexity eventually grows on them. C23 + compiler extensions is quite far from where K&R C was. Scheme R7 is quite far from where Scheme started. Go's warts are directly related to ignoring history of growing pains from other ecosyst…

The issue with C++ complexity is that the standard development model is dysfunctional. They aren’t able to bring concepts like “a file” into the standard because one standards body member maintains a compiler in some baroque ancient environment without the concept of a fs. Too much is forced to implement at the library level instead of in the compiler, and end up feeling half baked for real users (modules, coroutines…

Just like any other language under ISO, like Ada, Fortran, COBOL and guess what, C the FOSS beloved language.

Re: Swift 6.3

#224
post #143

Earlier quoted context omitted.

I think they even haven't adopted newer JVM features, it is a hosted language designed to depend on its host, plus it is a Lisp. The complexity would be to grow like Common Lisp, instead it is up to Clojure folks to write Java, C#, JavaScript code, therein lies the complexity.

> I think they even haven't adopted newer JVM features You don't know what you're talking about. Not only Clojure steadily adopting newer JVM features (for when that makes sense) - java streams, functional interfaces, qualified method values, interactive lib loading, JDK21 virtual threads, etc., Clojure constantly explores beyond the JVM - e.g., Jank targets LLVM and has C++ interop. Pick some hardcore JVM topics and…

I was talking about the JVM bytecodes for dynamic languages.

Also I remember watching a recent talk, where virtual threads was still "being considered".

Having to write portable code that has to take into account the host differences, and difference in execution semantics, and still delivery the same outcome, is also complexity that keeps neurons busy.

Re: Swift 6.3

#225
post #144

Earlier quoted context omitted.

Is Typed.Clojure finally stable and sound? In theory we only need parentheses, prefix operators and a REPL, but mainstream never went down that route. Anyway the complexity then ends up being custom DSLs and macros.

> Is Typed.Clojure finally stable and sound? It feels like as if you're operating with a few keywords you picked up without fully understanding the meaning of them. Typed Clojure was a PhD research project. Experimental. CircleCI experimented with it at one point but the friction was high enough that it never became a standard practice - the annotation burden was significant. You'd be writing a lot of type scaffoldin…

No, I happen to know that some things that people throw around haven't delivered their initial expectations.

Just as you confirmed with your lengthy reply, by following up to my question.

Re: Swift 6.3

#226
post #201
post #188

Beyond the marketing view... here are the (incomplete) changes: https://github.com/swiftlang/swift/blob/main/CHANGELOG.md Here are the evolution proposals that landed in 6.3: https://www.swift.org/swift-evolution/#?search=6.3 Overall 6.3 ended up mostly about integration: stdlib, c/c++ (often driven by swift-java interop needs), and builds. SPM (swift package manager) is slowly reaching out to take over xcode build f…

Looks like swift-build will be the default in Swift 6.4: https://forums.swift.org/t/swiftpm-development-update-defaul... Unfortunately, swift-build is what Xcode has been using for years now, and has major performance issues: https://forums.swift.org/t/target-dependency-graph-computati... Perhaps using it in both SPM and Xcode will lead to improvements, but I'm not especially optimistic.

I mean... "In projects with many local Swift packages (~160 packages, ~2,100 targets), the "Compute target dependency graph" phase takes 60+ seconds"

I'm doubting this is a comparable setup for the vast majority of swift users. Is it unfortunate for people who land on this edge case - yes.

My experience shows it's fast and our iOS apps build faster than a feature parity Android app.

Re: Swift 6.3

#227

Earlier quoted context omitted.

I still have hope Swift will break free like C# has. I hope one day something like Vapor or Kitura takes off.

I guess what Swift misses compared to C# is enterprise usage.

I take what I said back then. I hope Swift never breaks out and is spared the fate of enterprise usage.

Re: Swift 6.3

#229
post #224

Earlier quoted context omitted.

> I think they even haven't adopted newer JVM features You don't know what you're talking about. Not only Clojure steadily adopting newer JVM features (for when that makes sense) - java streams, functional interfaces, qualified method values, interactive lib loading, JDK21 virtual threads, etc., Clojure constantly explores beyond the JVM - e.g., Jank targets LLVM and has C++ interop. Pick some hardcore JVM topics and…

I was talking about the JVM bytecodes for dynamic languages. Also I remember watching a recent talk, where virtual threads was still "being considered". Having to write portable code that has to take into account the host differences, and difference in execution semantics, and still delivery the same outcome, is also complexity that keeps neurons busy.

Let's see.

> JVM bytecodes for dynamic languages

You're talkiing about invokedynamic - bytecode instruction added in Java 7, specifically to make dynamic language dispatch efficient, right? Explained simply: JVM was designed for static types - method calls resolved at compile time. In dynamic langs you don't know the type of something until runtime had to hack around, typically by boxing everything and doing manual type checks. This was slow and awkward. JRuby/Groovy adopted it eagerly. Clojure's dispatch model though is different. Most calls are either: direct interop (already statically typed), or calls through a Var (is a reference to a function value, not a dynamic method lookup). The Var indirection is a different shape of problem that invokedynamic doesn't solve as cleanly. It's not that it's useless, just that the fit isn't as natural.

> virtual threads was still "being considered"

That is an outdated info. Clojure 1.12.0 shipped two years ago with virtual thread support, but the integration with core.async's thread pool model was not there (so you were not completely incorrect). However, core.async later reimplemented go blocks using virtual threads when available. The improvements are still underway https://clojure.org/news/2025/10/01/async_virtual_threads

> take into account the host differences

Okay, this one is genuinely not that straightforward. The #? reader conditional in .cljc files is a clean, minimal mechanism. I don't really know any other language that can target completely different platforms from a single namespace as cleanly - even in Nodejs you can't in practice do it as nicely. Kotlin Multiplatform is probably the closest competitor - but its `expect/actual` mechanism requires separate source sets, separate files, and considerably more boilerplate. You're not writing in the same namespace; you're wiring together parallel declarations. Scala.js and GHCJS are essentially separate compilation targets with thinner sharing stories. But yes, it still can get complicated - different hosts have meaningfully different concurrency and I/O models, so it's rather "shared logic, host-specific edges" rather than "write once run anywhere". I still think Clojure handles this all far more elegantly than alternatives.

So pragmatically speaking, you're pointing at complexity at the implementation/runtime layer, while Clojure's complexity reduction happens at a different layer entirely - data model, immutability by default, simpler concurrency reasoning, REPL workflow. Those layers mostly don't interfere with each other. You mentioned real concerns at the platform engineering level, but they in practice don't touch what Clojure is actually trying to simplify. Someone writing Clojure code never experiences invokedynamic problems one way or the other.

Re: Swift 6.3

#230
post #225

Earlier quoted context omitted.

> Is Typed.Clojure finally stable and sound? It feels like as if you're operating with a few keywords you picked up without fully understanding the meaning of them. Typed Clojure was a PhD research project. Experimental. CircleCI experimented with it at one point but the friction was high enough that it never became a standard practice - the annotation burden was significant. You'd be writing a lot of type scaffoldin…

No, I happen to know that some things that people throw around haven't delivered their initial expectations. Just as you confirmed with your lengthy reply, by following up to my question.

What do you know about "initial expectations" of Typed Clojure specifically? I for one have worked with Ambrose on the same team, he's a good friend of mine and we discussed his dissertation at least a few times. I don't argue about static vs. dynamic typing without specific context, because it always matters. I have intimate understanding for why Clojure is how it is. I'm not defending it blindly - just like any other PL it has its own warts, but you're picking the wrong ones to criticize its face value.
Post reply on HN