News for hackers. Stuff that matters.
Re:Brython – A Python 3 implementation for client-side web p... by IshKebab on Monday July 06, 2020 @09:37AM (#23747710)
"Any type of value as key" is quite misleading since anything other than primitive types (number, bool, string) is compared by reference. Observe:

  > const m = new Map();
  undefined
  > m.set([1], "one");
  Map(1) {Array(1) => "one"}
  >m.get([1])
  undefined
C++ and Rust don't stand for this nonsense. You can't even define a custom hashing function, which means if you want a useful map for anything other than numbers and strings you have to write a wrapper around `Map` that hashes the objects to numbers or strings, and then you're more or less back to raw objects.

It's definitely better than raw objects because it doesn't mix up data and methods, but it's not much better.

Re:Brython – A Python 3 implementation for client-side web p... by gilnaa on Monday July 06, 2020 @10:35AM (#23748310)
I was quite surprised to read that you can't set a custom hasher in C++/Rust, and I even went and made sure that it's possible.

But then I re-read your comment and realized you've meant that you can't do this in JS.

Re:Brython – A Python 3 implementation for client-side web p... by temporarysdwvit on Monday July 06, 2020 @11:06AM (#23748703)
Oh you can, just implement toString and js will use it for hashing
Re:Brython – A Python 3 implementation for client-side web p... by IshKebab on Tuesday July 07, 2020 @08:31AM (#23758486)
No it won't.
Re:Brython – A Python 3 implementation for client-side web p... by yqot on Tuesday July 07, 2020 @01:59PM (#23762083)
Map, no. Plain object, yes.
Re:Brython – A Python 3 implementation for client-side web p... by IshKebab on Saturday July 11, 2020 @08:06AM (#23801492)
It doesn't "use `toString` for hashing", it just converts the key to a string. That is not the same (e.g. you can't recover the original key).