diff options
| author | Patrick Walton <pcwalton@mimiga.net> | 2013-03-04 19:43:14 -0800 |
|---|---|---|
| committer | Patrick Walton <pcwalton@mimiga.net> | 2013-03-05 10:18:36 -0800 |
| commit | 2fa2ad59958d0028c856fb68359edb9a7bd9cab8 (patch) | |
| tree | 7a5c3fec488e6422a4bf34e0d363cd453e297ec6 /src/libsyntax/parse | |
| parent | c4075492ad46a343bd99d6f258e38ed9c2320418 (diff) | |
| download | rust-2fa2ad59958d0028c856fb68359edb9a7bd9cab8.tar.gz rust-2fa2ad59958d0028c856fb68359edb9a7bd9cab8.zip | |
libcore: Implement an `Equiv` trait and use it on hashmaps.
7.3x speedup in string map search speed on a microbenchmark of pure hashmap searching against a constant string, due to the lack of allocations. I ran into a few snags. 1. The way the coherence check is set up, I can't implement `Equiv<@str>` and `Equiv<~str>` for `&str` simultaneously. 2. I wanted to implement `Equiv<T>` for all `T:Eq` (i.e. every type can be compared to itself if it implements `Eq`), but the coherence check didn't like that either. 3. I couldn't add this to the `Map` trait because `LinearMap` needs special handling for its `Q` type parameter: it must not only implement `Equiv<T>` but also `Hash` and `Eq`. 4. `find_equiv(&&"foo")` doesn't parse, because of the double ampersand. It has to be written `find_equiv(& &"foo")`. We can probably just fix this. Nevertheless, this is a huge win; it should address a major source of performance problems, including the one here: http://maniagnosis.crsr.net/2013/02/creating-letterpress-cheating-program.html
Diffstat (limited to 'src/libsyntax/parse')
0 files changed, 0 insertions, 0 deletions
