News for hackers. Stuff that matters.
Re:Mixing Swift and C++ by saagarjha on Sunday July 23, 2023 @01:42PM (#36837701)
Depends on what you think they’re masters of. Developer experience? Sure. Modern programming languages design? Absolutely not.
Re:Mixing Swift and C++ by tempodox on Sunday July 23, 2023 @02:35PM (#36838261)
I think Go is made for writing a certain kind of software that is important for Google, and for a certain kind of developer Google wants to have writing this software. That the result is not the kind of language I would want to use is immaterial. I'm quite sure Go is masterfully targeted for the purposes Google wants it for.
Re:Mixing Swift and C++ by pjmlp on Sunday July 23, 2023 @03:20PM (#36838718)
Go was designed by a couple of well known UNIX folks that dislike C++.

With exception of Kubernetes, most of Google's software keeps being written in Java, C++, Kotlin, and nowadays Rust.

Its use is much more widespread outside Mountain View walls than inside them.

Re:Mixing Swift and C++ by seabrookmx on Sunday July 23, 2023 @04:30PM (#36839507)
And remember that unlike Amazon does with AWS, Google doesn't use GCP/Kubernetes to run it's infrastructure.

Google's software runs on Borg, which is _not_ written in GoLang.

Google's three OS projects all eschew GoLang as well.

Re:Mixing Swift and C++ by slinkyavenger on Sunday July 23, 2023 @07:45PM (#36841246)
Both criticisms are pointless -

1. Borg precedes K8s and likely is tightly coupled with Google's backend infra - that's to say, Borg gets architected around Google's existing workflow and new backend development is written around Borg's workflow.

2. GoLang was never intended to be an OS-level programming language. It was created to enable more robust, efficient, and rapid development in a particular space. It would be just as silly to argue that Google's three OS projects all eschew Dart.

Re:Mixing Swift and C++ by vips7L on Sunday July 23, 2023 @08:41PM (#36841622)
Isn’t Fuchsia designed to use Dart for the front end?
Re:Mixing Swift and C++ by seabrookmx on Sunday July 23, 2023 @09:15PM (#36841871)
I'm not actually criticizing GoLang, just pointing out some facts.

1. is fair.

2. I'd argue is false, given Fuschia and Dart are tightly integrated (as another commenter noted) and that GoLang was originally designed as a C++ replacement born from the Plan9/Inferno tool chains (certainly "OS-level"). Also there's a ton of non-kernel code in an OS so this is a really blurry distinction. containerd does some pretty low level stuff with Linux and GoLang is perfectly capable of this.. if Fuschia wanted to use it they could.

Re:Mixing Swift and C++ by pjmlp on Monday July 24, 2023 @01:04AM (#36843291)
In fact, Fuchsia's original TCP/IP stack and volume manager were written in Go.

They were however rewritten in Rust, after the author left Google and they wanted to clean Fuchsia from Go code.

Re:Mixing Swift and C++ by pjmlp on Monday July 24, 2023 @12:58AM (#36843253)
Flutter/Dart is Fuchsia's UI framework.

Go was created by three folks that got fed up waiting on C++ compile times, and from their point of view Go is designed for people unable to take feature rich languages, on Rob Pike's own words.

"The key point here is our programmers are Googlers, they’re not researchers. They’re typically, fairly young, fresh out of school, probably learned Java, maybe learned C or C++, probably learned Python. They’re not capable of understanding a brilliant language but we want to use them to build good software. So, the language that we give them has to be easy for them to understand and easy to adopt."

Or alternatively,

"It must be familiar, roughly C-like. Programmers working at Google are early in their careers and are most familiar with procedural languages, particularly from the C family. The need to get programmers productive quickly in a new language means that the language cannot be too radical."

Re:Mixing Swift and C++ by Someone on Sunday July 23, 2023 @01:50PM (#36837797)
But developer experience is a factor that should weigh heavily in evaluating the quality of a programming language.

I also fear Swift is going a step too far. For example, IMO Swift's compilation speed isn’t good enough.

If that’s a matter of lack of tooling, I won’t blame the language, but is it, or is its slowness unavoidable for a language that is so flexible? If the latter, I would rather have a bit less flexibility and more compilation speed.

Similarly, there’s quality of error messages. Swift has gotten better there, but still has some weird ones. Are they unavoidable for the current language?

Re:Mixing Swift and C++ by cvwright on Sunday July 23, 2023 @02:31PM (#36838220)
I would be fine with slow, if the Swift compiler could actually compile all valid Swift programs. It’s pretty commonplace for me to have to break a large or complicated function into smaller bite-size pieces because the compiler can’t type check it all at once.
Re:Mixing Swift and C++ by refulgentis on Sunday July 23, 2023 @02:50PM (#36838416)
I had several years in the ObjC ecosystem, embraced Swift whole-heartedly immediately at 1.0, and was surprised by people nitpicking like this.

It's been humbling to come back to it over the intervening 7 years and realize they weren't nitpicks that would be resolved shortly, and people would understand if they just read the swift-evolution mailing list. They were fundamental flaws.

Re:Mixing Swift and C++ by novok on Sunday July 23, 2023 @03:45PM (#36839013)
If they removed the few small features that are responsible for 80% of the slowness and called it optimized swift I bet many would embrace it fairly quickly, especially considering they are functionally cosmetic features.
Re:Mixing Swift and C++ by math_dandy on Sunday July 23, 2023 @04:22PM (#36839435)
When will “Swift: The Good Parts” be available for preorder?
Re:Mixing Swift and C++ by saagarjha on Sunday July 23, 2023 @05:37PM (#36840121)
Not really. These are pretty critical features for the language.
Re:Mixing Swift and C++ by refulgentis on Sunday July 23, 2023 @06:10PM (#36840393)
Not type inference, rather, whatever is so pathological about the fundamental algorithm for doing Swift type inference that it can become an infinite loop.

This is a Swift-only feature in major languages with type inference.

Re:Mixing Swift and C++ by novok on Monday July 24, 2023 @01:53AM (#36843583)
> Primary-file mode's advantages are that the driver can do incremental compilation by only running frontends for files that it thinks are out of date, as well as running multiple frontend jobs in parallel, making use of multiple cores. Its disadvantage is that each frontend job has to read all the source files in the module before focusing on its primary-files of interest, which means that a portion of the frontend job's work is being done quadratically in the number of jobs. Usually this portion is relatively small and fast, but because it's quadratic, it can easily go wrong. The addition of batch mode was specifically to eliminate this quadratic increase in early work.

One example that would improve the above: replace module imports with file specific imports, including within the module itself. You could also make a case for operator overloading and there are probably a bunch of candidates a swift compiler engineer could tell you that would be small but significant like that.

https://github.com/apple/swift/blob/main/docs/CompilerPerfor...

Re:Mixing Swift and C++ by jwells89 on Sunday July 23, 2023 @04:14PM (#36839338)
This used to irritate me, but now that I'm in the habit of breaking functions up I've come to prefer it. It makes for code that's easier for myself to read and follow further down the road, which I think is a reasonable proxy for readability by others.
Re:Mixing Swift and C++ by cachvico on Sunday July 23, 2023 @04:32PM (#36839523)
Writing modular code is good but that's a ridiculous reason to need to do so.

Xcode also trips on simple type errors and sometimes fails to even provide a line number where the error lies. As someone who just wrote a Swift app after no prior exposure, it's oddly immature in some basic ways after nearly a decade from launch.

Re:Mixing Swift and C++ by jwells89 on Sunday July 23, 2023 @04:46PM (#36839657)
Yeah I won’t defend it too much, Xcode/SourceKit/etc are clearly written in a way that assumes devs are writing perfectly idiomatic, smell-free code which isn’t very aligned with reality. I’ve more or less got a feel for what makes it grumpy so I don’t trip it up too often any more but it’s annoying on the odd occasion I do.
Re:Mixing Swift and C++ by cvwright on Monday July 24, 2023 @08:47AM (#36847114)
Yeah this is a major pet peeve. Especially when the compiler crashes. Growing up writing in C, I didn’t even know that was a thing.
Re:Mixing Swift and C++ by newZWhoDis on Sunday July 23, 2023 @04:36PM (#36839564)
If you are writing functions that the current/latest Swift compiler can’t handle on modern hardware then I feel sorry for anyone who has to someday read your code.
Re:Mixing Swift and C++ by bsaul on Sunday July 23, 2023 @06:53PM (#36840812)
just try using state machines modelled with enums and you'll fairly quickly reach those limits.
Re:Mixing Swift and C++ by dagmx on Sunday July 23, 2023 @02:11PM (#36838031)
When discussing compiler speed, Go specifically prioritizes compilation speed over optimization of the resulting code.

Swift and Rust both suffer from slower compilation than Go, primarily because LLVM prioritizes optimization over speed.

There are of course other reasons like complexity of language, size of compilation units etc… but optimization tends to be the biggest hit in my experience.

Hence why Rust is adopting/investigating cranelift as a debug compiler to improve speed.

Re:Mixing Swift and C++ by Someone on Sunday July 23, 2023 @03:57PM (#36839155)
> There are of course other reasons like complexity of language, size of compilation units etc… but optimization tends to be the biggest hit in my experience.

I guess you don’t have much experience with Swift. LLVM code generation may be slower than alternatives, but that’s more or less by a constant factor.

Swift’s type inference, on the other hand, can lead to a combinatorial explosion.

For example, https://www.hackingwithswift.com/articles/11/how-to-make-swi... claims that

  let sum = [1, 2, 3].map {
    String($0)
  }.flatMap {
    Int($0)
  }.reduce(0, +)
takes over 11 seconds to compile, while

compare this code:

  let sum = [1, 2, 3].map { (num: Int) -> String in
    String(num)
  }.flatMap { (str: String) -> Int? in
    Int(str)
  }.reduce(0, +)
takes about 75ms, and

  let numbers = [1, 2, 3]
  let stringNumbers = numbers.map {
    String($0)
  }
  let intNumbers = stringNumbers.flatMap {
    Int($0)
  }
  let sum = intNumbers.reduce(0, +)
compiles in 71ms.

Of course, all of these use LLVM, and likely even generate highly similar intermediate code.

Also, you’ll see these slowdowns even in debug builds that don’t ask LLVM to optimize code much.

Re:Mixing Swift and C++ by dagmx on Sunday July 23, 2023 @06:14PM (#36840415)
Pretty rude to start your comment with the assumption that I’m not experienced with Swift. The rest of your comment would be more useful without the unnecessary condescension.

But nothing you said contradicts what I said either. Yes it’s easy to get into slow paths with Swift, but it’s also easy not to. Granted it takes a lot of up front knowledge to do so.

But even if you just stick to the LLVM portion, llvms debug mode is slower than cranelift and other toolchains debug modes. Debug doesn’t mean “no optimizations” whatsoever, nor does it mean efficient paths through the toolchain either.

Re:Mixing Swift and C++ by ori_b on Sunday July 23, 2023 @02:09PM (#36837999)
What is the purpose of modern language design, if not to improve developer experience?
Re:Mixing Swift and C++ by jb1991 on Sunday July 23, 2023 @02:14PM (#36838054)
It's a subjective issue, but sometimes the end results can be better even if the experience of getting there is not as nice as a simpler language that is more bug-prone. Consider Rust, which is notoriously difficult to learn, but that offers improved end results in many cases re: security, safety, reliability.
Re:Mixing Swift and C++ by ori_b on Sunday July 23, 2023 @02:34PM (#36838248)
Can you explain how that's not an aspect of developer experience? It seems to be like trading off between type system correctness (you can go all the way to needing full formal proofs of correctness, resource use, etc) and ease of getting stuff done is the core of developer experience.
Re:Mixing Swift and C++ by worik on Sunday July 23, 2023 @03:19PM (#36838709)
With Rust it is the learning curve that is hard.

I find every other aspect of "developer experience" excellent

Re:Mixing Swift and C++ by jb1991 on Sunday July 23, 2023 @03:27PM (#36838798)
Does your idea of a good developer experience include programs that are reliable, won't crash in production, won't be compromised, and save you lots of time later on so you can just focus on writing code the first time? In the absence of these guarantees, your developer experience can include some very frustrating and/or stressful debugging.
Re:Mixing Swift and C++ by ori_b on Sunday July 23, 2023 @03:51PM (#36839088)
Yes. Does yours not?

Tools like Agda, Spark, Idris, and Coq move the tradeoff around towards "probably correct", and I welcome seeing some of their features become gradually available. Getting things right the first time is useful.

But these features can also make it hard to get anything done quickly.

Good developer experience means finding a balance between the quick and dirty, and the provably correct.

Re:Mixing Swift and C++ by jb1991 on Sunday July 23, 2023 @03:55PM (#36839130)
You just made my point for me.
Re:Mixing Swift and C++ by ori_b on Monday July 24, 2023 @07:21AM (#36846070)
Was your point that you agree with me? If not, I don't get it.
Re:Mixing Swift and C++ by saagarjha on Sunday July 23, 2023 @03:00PM (#36838517)
Developer experience is just one facet of writing software. It means that it is pleasant to write code, but you can also focus on:

* Language features that make it so that you don't have to write code at all

* Tooling that makes it easier to find bugs in the code you do write

* Expressiveness and portability that allows the code to be used in more places

* Approachability, so that new people can pick up the language quickly

* "Batteries", so that people can rely on your high-quality libraries instead of having to manage their own

* Documentation and community, to handle the hardest parts of programming: people

* Performance, so that the code can use fewer resources

…among many other things.

Re:Mixing Swift and C++ by geodel on Sunday July 23, 2023 @03:04PM (#36838567)
Same as purpose of modern arts. True masters know its worth. Will it look good in my living room? Doesn't matter.