News for hackers. Stuff that matters.
Re:Rust vs C Pitfalls by steveklabnik on Tuesday December 27, 2016 @06:45PM (#13267312)
Rust can do custom hashes as well, to be clear. There's been some arguments over what hashes are allowed in the game in the past.
Re:Rust vs C Pitfalls by igouy on Wednesday December 28, 2016 @12:40PM (#13272101)
To be clear: anyone can contribute a Rust k-nucleotide program that uses a custom hash function, just like those used by other programming languages.
Re:Rust vs C Pitfalls by steveklabnik on Wednesday December 28, 2016 @12:55PM (#13272213)
Wasn't there some issues around a "custom library" for this? I distinctly remember there being some kind of argument about what is legal and what isn't.

That is, I think I'm thinking of this:

> k-nucleotide will explicitly require built-in / library HashMap.

https://alioth.debian.org/tracker/?func=detail&group_id=1008...

Since C doesn't have a standard library hashmap, you can write an entirely custom one just for the benchmark. But since Rust has a built-in hashmap in the standard library, you cannot. Even though you could write Rust code that's the same as the custom C hashmap.

Re:Rust vs C Pitfalls by pvg on Wednesday December 28, 2016 @01:43PM (#13272573)
The rules provided aren't as clear as they could be:

http://benchmarksgame.alioth.debian.org/u64q/knucleotide-des...

But they say 'don't write a custom hash table', not 'don't write a custom hash function'. Maybe the problem is that the data in this benchmark is just not a good way to exercise the hash tables in a given language the way the benchmark intended. That probably means the benchmark should be modified; the complaint that some implementations use 'laughably bad' hash functions that seem to be measurably decent hash functions for the data at hand seems really strange.

Re:Rust vs C Pitfalls by igouy on Wednesday December 28, 2016 @01:57PM (#13272700)
To be clear: anyone can contribute a Rust k-nucleotide program that uses a custom hash function, just like those used by other programming languages.

> Since C doesn't have a standard library hashmap, you can write an entirely custom one just for the benchmark.

NOT TRUE!

#315195 states the opposite!

"k-nucleotide will explicitly require built-in / library HashMap"

Re:Rust vs C Pitfalls by steveklabnik on Wednesday December 28, 2016 @02:01PM (#13272722)
The "library" distinction you're drawing here is arbitrary. Or at least, my understanding of it is.

Am I allowed to use a custom HashMap for the game, or am I required to use the one in std::collections? My understanding is that it's the latter, and so that penalizes Rust or any other language that includes a map in their standard library.

Re:Rust vs C Pitfalls by igouy on Wednesday December 28, 2016 @02:09PM (#13272785)
Just like everyone else Rust advocates can contribute programs that use a custom Hash function with a library Hash map.

In fact, the current Rust k-nucleotide DOES use a custom Hash function with a library Hash map.

No one is allowed to -- in your words -- "write an entirely custom [hashmap] just for the benchmark".

(This was all discussed to death, in early December on https://www.reddit.com/r/rust/ ).

Re:Rust vs C Pitfalls by steveklabnik on Wednesday December 28, 2016 @02:16PM (#13272829)
You didn't answer my question. Does "library" here mean that you are able to use a hashmap other than the one in std::collections, or not?
Re:Rust vs C Pitfalls by igouy on Wednesday December 28, 2016 @03:44PM (#13273456)
When someone fully re-implements khash in Rust and publishes the library, that will become a question which merits consideration.

Meanwhile, from the task description: Please don't implement your own custom "hash table" - it will not be accepted.

Re:Rust vs C Pitfalls by steveklabnik on Wednesday December 28, 2016 @04:18PM (#13273750)
So, the answer is "no, you are not allowed." But you're open to changing that. Got it.
Re:Rust vs C Pitfalls by igouy on Thursday January 05, 2017 @06:40PM (#13332544)
Can't use a library that doesn't exist.

If you want an additional Rust hashmap implementation then you need to persuade the Rust community to provide one in std::collections.

No one is allowed to -- in your words -- "write an entirely custom [hashmap] just for the benchmark".

Re:Rust vs C Pitfalls by steveklabnik on Thursday January 05, 2017 @07:58PM (#13333012)
> If you want an additional Rust hashmap implementation then you need to persuade the Rust community to provide one in std::collections.

Again, this means that for Rust, it _has_ to be in the standard library. But C doesn't have one in the standard library. So C gets to write their own, and Rust doesn't.

Re:Rust vs C Pitfalls by fungos on Tuesday December 27, 2016 @10:42PM (#13268277)
If it compiles and run it is allowed. There is no rule to benchmark other than having the same end result with best performance.

I still can't get all the moral over this.

The best thing here for Rust would be to achieve the best performance on this game and nothing else.

To me this game is important and winning on it is more yet. So, if Rust don't have better result by "morals" this is so wrong that hurts. But each time I read these responses I ask myself if there is not a real problem there.

I like Rust, but performance is decisive. It is really sad to see that Rust keeps going down on this game and that makes me question myself when trying to invest time on Rust.

Re:Rust vs C Pitfalls by sanderjd on Tuesday December 27, 2016 @11:57PM (#13268496)
It isn't a "moral" issue. It is about the usefulness of the benchmarks. If you're using them to make a recommendation about which programming language to choose, it is important to have a sense for how well the results generalize to the kind of programs you will be writing. Using unrealistic hacks targeted specifically to each benchmark is contra that goal.

If, on the other hand, you're just treating the benchmarks as a fun competition akin to code golf, then by all means, hacks ahoy!

Re:Rust vs C Pitfalls by fungos on Wednesday December 28, 2016 @11:38AM (#13271638)
Benchmark GAME :)
Re:Rust vs C Pitfalls by igouy on Wednesday December 28, 2016 @01:31PM (#13272481)
Re:Rust vs C Pitfalls by eridius on Wednesday December 28, 2016 @03:05AM (#13269145)
> The best thing here for Rust would be to achieve the best performance on this game and nothing else.

That's absurd. The benchmarks game doesn't measure real-world performance in any sense whatsoever. And many of the implementations are written in ways that you'd never ever put into production code (for example, the laughably bad hashing functions that are mentioned elsewhere in this thread). From what I understand, the Rust implementations tend to not get up to those shenanigans, which makes them appear worse than the implementations from other languages that do.

It's not the goal of a programming language to be the top on a silly benchmarks game. The goal is to be an excellent language for real-world use.

Re:Rust vs C Pitfalls by steveklabnik on Wednesday December 28, 2016 @12:14AM (#13268575)
The Benchmarks Game has more rules than that. It's not about "morals."
Re:Rust vs C Pitfalls by fungos on Wednesday December 28, 2016 @11:30AM (#13271570)
But people are criticizing C because the way it is implemented is not "realistic". Or that the "hash" is a hack that will never work in real life.

I don't know the background of these people, but they couldn't be more wrong. So that looks like "morals" or just they don't ever saw real C code out there.

Re:Rust vs C Pitfalls by steveklabnik on Wednesday December 28, 2016 @12:13PM (#13271889)
You're making an assumption that the C code is allowed to have the same algorithm as the Rust code. This is not actually exactly true, based on the rules of the game.
Re:Rust vs C Pitfalls by igouy on Wednesday December 28, 2016 @01:41PM (#13272555)
Where is it forbidden for programs written in C to use FNV?

For example https://github.com/haipome/fnv/blob/master/fnv.c

Re:Rust vs C Pitfalls by steveklabnik on Wednesday December 28, 2016 @01:58PM (#13272701)
I'm referring to my reply to you above about not being able to implement a different map, not the hash function itself.