Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(96)

Issue 9490003: Implement String.hashCode. (Closed)

Created:
8 years, 9 months ago by ahe
Modified:
8 years, 9 months ago
CC:
reviews_dartlang.org, ngeoffray, Lasse Reichstein Nielsen, karlklose
Visibility:
Public.

Description

Implement String.hashCode. Committed: https://code.google.com/p/dart/source/detail?r=4714

Patch Set 1 #

Total comments: 8

Patch Set 2 : Improve performance by avoiding bailout. #

Total comments: 2

Patch Set 3 : Don't use XOR :-( #

Total comments: 6

Patch Set 4 : Address review comments #

Unified diffs Side-by-side diffs Delta from patch set Stats (+127 lines, -137 lines) Patch
M dart/frog/leg/lib/js_helper.dart View 1 2 3 40 chunks +127 lines, -114 lines 0 comments Download
M dart/tests/co19/co19-leg.status View 2 chunks +0 lines, -22 lines 0 comments Download
M dart/tests/corelib/corelib-leg.status View 1 chunk +0 lines, -1 line 0 comments Download

Messages

Total messages: 11 (0 generated)
ahe
Micro benchmark used: main() { Expect.equals(0, foo('fiskfiskfiskfiskfiskfiskfiskfiskfiskfiskfiskfiskfiskfiskfiskfisk')); } foo(x) { int j = 0; for ...
8 years, 9 months ago (2012-02-28 09:33:10 UTC) #1
kasperl
LGTM. https://chromiumcodereview.appspot.com/9490003/diff/1/dart/frog/leg/lib/js_helper.dart File dart/frog/leg/lib/js_helper.dart (right): https://chromiumcodereview.appspot.com/9490003/diff/1/dart/frog/leg/lib/js_helper.dart#newcode1202 dart/frog/leg/lib/js_helper.dart:1202: var hash = 0; int hash? https://chromiumcodereview.appspot.com/9490003/diff/1/dart/frog/leg/lib/js_helper.dart#newcode1204 dart/frog/leg/lib/js_helper.dart:1204: ...
8 years, 9 months ago (2012-02-28 09:37:08 UTC) #2
ahe
Hi Kasper, Thank you for taking a look. I have uploaded a new version that ...
8 years, 9 months ago (2012-02-28 10:09:35 UTC) #3
ngeoffray
LGTM Why are the tests not failing anymore? https://chromiumcodereview.appspot.com/9490003/diff/1/dart/frog/leg/lib/js_helper.dart File dart/frog/leg/lib/js_helper.dart (right): https://chromiumcodereview.appspot.com/9490003/diff/1/dart/frog/leg/lib/js_helper.dart#newcode1206 dart/frog/leg/lib/js_helper.dart:1206: hash ...
8 years, 9 months ago (2012-02-28 10:13:24 UTC) #4
ahe
I don't know what I was thinking. There is something with + and XOR both ...
8 years, 9 months ago (2012-02-28 11:58:15 UTC) #5
ahe
Uploaded new version without XOR.
8 years, 9 months ago (2012-02-28 13:51:38 UTC) #6
ngeoffray
Still LGTM
8 years, 9 months ago (2012-02-28 13:57:12 UTC) #7
kasperl
LGTM. https://chromiumcodereview.appspot.com/9490003/diff/1005/dart/frog/leg/lib/js_helper.dart File dart/frog/leg/lib/js_helper.dart (right): https://chromiumcodereview.appspot.com/9490003/diff/1005/dart/frog/leg/lib/js_helper.dart#newcode1184 dart/frog/leg/lib/js_helper.dart:1184: * This is the [Jenkins hash function][1], but ...
8 years, 9 months ago (2012-02-28 13:58:42 UTC) #8
Lasse Reichstein Nielsen
DBC. https://chromiumcodereview.appspot.com/9490003/diff/1005/dart/frog/leg/lib/js_helper.dart File dart/frog/leg/lib/js_helper.dart (right): https://chromiumcodereview.appspot.com/9490003/diff/1005/dart/frog/leg/lib/js_helper.dart#newcode1191 dart/frog/leg/lib/js_helper.dart:1191: if (receiver is num) return JS('int', @'$0 & ...
8 years, 9 months ago (2012-02-28 14:12:16 UTC) #9
floitsch
On 2012/02/28 14:12:16, Lasse Reichstein Nielsen wrote: > DBC. > > https://chromiumcodereview.appspot.com/9490003/diff/1005/dart/frog/leg/lib/js_helper.dart > File dart/frog/leg/lib/js_helper.dart ...
8 years, 9 months ago (2012-02-28 14:13:36 UTC) #10
ahe
8 years, 9 months ago (2012-02-28 17:26:10 UTC) #11
Team,

Thank you so much for all your comments and suggestions.

@lrn: do you have a better suggestion for double?

Cheers,
Peter

https://chromiumcodereview.appspot.com/9490003/diff/1/dart/frog/leg/lib/js_he...
File dart/frog/leg/lib/js_helper.dart (right):

https://chromiumcodereview.appspot.com/9490003/diff/1/dart/frog/leg/lib/js_he...
dart/frog/leg/lib/js_helper.dart:1206: hash ^= JS("int", @"$0 << $1", hash, 10);
On 2012/02/28 10:13:25, ngeoffray wrote:
> Cobnsistency -> use ' instead of "

Done.

https://chromiumcodereview.appspot.com/9490003/diff/1/dart/frog/leg/lib/js_he...
dart/frog/leg/lib/js_helper.dart:1209: hash ^= JS("int", @"$0 << $1", hash, 3);
On 2012/02/28 10:13:25, ngeoffray wrote:
> ditto

Done.

https://chromiumcodereview.appspot.com/9490003/diff/3001/dart/frog/leg/lib/js...
File dart/frog/leg/lib/js_helper.dart (right):

https://chromiumcodereview.appspot.com/9490003/diff/3001/dart/frog/leg/lib/js...
dart/frog/leg/lib/js_helper.dart:1192: if (receiver is num) return JS('int',
@'$0 & 0x1FFFFFFF', receiver);
On 2012/02/28 10:13:25, ngeoffray wrote:
> Please add a TODO to make sure we change the code to the original once our
> optimizations are smarter.

Done.

https://chromiumcodereview.appspot.com/9490003/diff/1005/dart/frog/leg/lib/js...
File dart/frog/leg/lib/js_helper.dart (right):

https://chromiumcodereview.appspot.com/9490003/diff/1005/dart/frog/leg/lib/js...
dart/frog/leg/lib/js_helper.dart:1184: * This is the [Jenkins hash function][1],
but always using XOR
On 2012/02/28 13:58:42, kasperl wrote:
> Update comment to match reality.

Done.

https://chromiumcodereview.appspot.com/9490003/diff/1005/dart/frog/leg/lib/js...
dart/frog/leg/lib/js_helper.dart:1191: if (receiver is num) return JS('int',
@'$0 & 0x1FFFFFFF', receiver);
On 2012/02/28 14:12:16, Lasse Reichstein Nielsen wrote:
> That's a somewhat bad hash for doubles (specifically fractions are all the
> same).

What do you suggest I use instead?

https://chromiumcodereview.appspot.com/9490003/diff/1005/dart/frog/leg/lib/js...
dart/frog/leg/lib/js_helper.dart:1192: if (receiver is !String) return
UNINTERCEPTED(receiver.hashCode());
On 2012/02/28 14:12:16, Lasse Reichstein Nielsen wrote:
> What about arrays and booleans?

I checked, neither List nor bool are hashable.

Powered by Google App Engine
This is Rietveld 408576698