News for hackers. Stuff that matters.
Re:Why Discord is switching from Go to Rust by kllrnohj on Wednesday February 05, 2020 @01:08AM (#22244407)
> 3x might be a bit too much today, but it's definitely slower than C.

If anything the gap is increasing not shrinking. JVM is terrible at memory access patterns due to the design of the language, and designing for memory is increasingly critical for maximum performance on modern systems. All the clever JIT'ing in the world can't save you from the constant pointer chasing, poor cache locality, and poor prefetching.

The gap won't shrink until Java has value types. Which is on the roadmap, yes, but still doesn't exist just yet.

The problem with those benchmarks is if you look at the Java code you'll see it's highly non-idiomatic. Almost no classes or allocations. They almost all exclusively use primitives and raw arrays. Even then it still doesn't match the performance on average of the C (or similar) versions, but if you add the real-world structure you'd find in any substantial project that performance drops off.

Re:Why Discord is switching from Go to Rust by igouy on Friday February 07, 2020 @01:47PM (#22269249)
> Almost no classes or allocations.

Plenty of `inner static classes`. Where's the up-to-date comparison showing that `static` makes a performance difference for those tiny programs?

Plenty of TreeNode allocations.

----

> The problem with …

The problem with saying "in any substantial project that performance drops off" is when we don't show any evidence.

Re:Why Discord is switching from Go to Rust by wool_gather on Wednesday February 05, 2020 @11:43AM (#22248482)
When you say "value types" in this context, you mean "copy-only types"?
Re:Why Discord is switching from Go to Rust by kllrnohj on Wednesday February 05, 2020 @12:05PM (#22248756)
I mean "value types" https://www.jesperdj.com/2015/10/04/project-valhalla-value-t... & http://cr.openjdk.java.net/~jrose/values/values-0.html

I don't know what you mean by "copy-only types." I'm not finding any reference to that terminology in the context of language design.

Re:Why Discord is switching from Go to Rust by wool_gather on Thursday February 06, 2020 @11:22AM (#22257296)
Ah, thanks for the link; I wasn't sure what it meant in the context of Java, since it's possible to get value semantics using a class.

Sorry about the confusion. I meant for the quotes around "copy-only" to indicate that it wasn't really a standard term, but I marked "value types" the same way, so that didn't really work. By "copy-only" I meant something you couldn't have more than one reference to: every name (variable) to which you assign the data would have its own independent copy.

Re:Why Discord is switching from Go to Rust by kllrnohj on Thursday February 06, 2020 @12:57PM (#22258374)
> By "copy-only" I meant something you couldn't have more than one reference to: every name (variable) to which you assign the data would have its own independent copy.

That's not really a requirement of value types, no. C# has value types (structs) and you can have references to them as well (ref & out params).

In general though yes it would be typically copied around, same as an 'int' is. Particularly if Java doesn't add something equivalent to ref/out params.

Re:Why Discord is switching from Go to Rust by wool_gather on Friday February 07, 2020 @11:29AM (#22267605)
I know, that's why I asked for clarification originally. :) Anyways, I appreciate the details.