- 01 8月, 2014 24 次提交
-
-
由 Kevin Ballard 提交于
Add a few new free functions to alloc::rc for manipulating uniquely-owned Rc values. is_unique() can be used to test if the Rc is uniquely-owned, try_unwrap() can remove the value from a uniquely-owned Rc, and get_mut() can return a &mut for a uniquely-owned Rc. These are all free functions, because smart pointers should avoid having methods when possible. They can't be static methods because UFCS will remove that distinction. I think we should probably change downgrade() and make_unique() into free functions as well, but that's out of scope.
-
由 Andrew Poelstra 提交于
-
由 Andrew Poelstra 提交于
A quick and dirty fix for #15036 until we get serious decoder reform. Right now it is impossible for a Decodable to signal a decode error, for example if it has only finitely many allowed values, is a string which must be encoded a certain way, needs a valid checksum, etc. For example in the libuuid implementation of Decodable an Option is unwrapped, meaning that a decode of a malformed UUID will cause the task to fail. Since this adds a method to the `Decoder` trait, all users will need to update their implementations to add it. The strategy used for the current implementations for JSON and EBML is to add a new entry to the error enum `ApplicationError(String)` which stores the string provided to `.error()`. [breaking-change]
-
由 Kevin Ballard 提交于
When generating a unique symbol for things like closures or glue_drop, we call token::gensym() to create a crate-unique Name. Recently, Name changed its Show impl so it no longer prints as a number. This caused symbols like glue_drop:1542 to become glue_drop:"glue_drop"(1542), or in mangled form, glue_drop.$x22glue_drop$x22$LP$1542$RP$.
-
由 Tshepang Lekhonkhobe 提交于
-
由 Kevin Ballard 提交于
-
由 Kevin Ballard 提交于
Errors can be printed with {}, printing with {:?} does not work very well. Not actually related to this PR, but it came up when running the tests and now is as good a time to fix it as any.
-
由 Kevin Ballard 提交于
This was motivated by a desire to remove allocation in the common pattern of let old = key.replace(None) do_something(); key.replace(old); This also switched the map representation from a Vec to a TreeMap. A Vec may be reasonable if there's only a couple TLD keys, but a TreeMap provides better behavior as the number of keys increases. Like the Vec, this TreeMap implementation does not shrink the container when a value is removed. Unlike Vec, this TreeMap implementation cannot reuse an empty node for a different key. Therefore any key that has been inserted into the TLD at least once will continue to take up space in the Map until the task ends. The expectation is that the majority of keys that are inserted into TLD will be expected to have a value for most of the rest of the task's lifetime. If this assumption is wrong, there are two reasonable ways to fix this that could be implemented in the future: 1. Provide an API call to either remove a specific key from the TLD and destruct its node (e.g. `remove()`), or instead to explicitly clean up all currently-empty nodes in the map (e.g. `compact()`). This is simple, but requires the user to explicitly call it. 2. Keep track of the number of empty nodes in the map and when the map is mutated (via `replace()`), if the number of empty nodes passes some threshold, compact it automatically. Alternatively, whenever a new key is inserted that hasn't been used before, compact the map at that point. --- Benchmarks: I ran 3 benchmarks. tld_replace_none just replaces the tld key with None repeatedly. tld_replace_some replaces it with Some repeatedly. And tld_replace_none_some simulates the common behavior of replacing with None, then replacing with the previous value again (which was a Some). Old implementation: test tld_replace_none ... bench: 20 ns/iter (+/- 0) test tld_replace_none_some ... bench: 77 ns/iter (+/- 4) test tld_replace_some ... bench: 57 ns/iter (+/- 2) New implementation: test tld_replace_none ... bench: 11 ns/iter (+/- 0) test tld_replace_none_some ... bench: 23 ns/iter (+/- 0) test tld_replace_some ... bench: 12 ns/iter (+/- 0)
-
由 Alex Crichton 提交于
Closes #16097 (fix variable name in tutorial) Closes #16100 (More defailbloating) Closes #16104 (Fix deprecation commment on `core::cmp::lexical_ordering`) Closes #16105 (fix formatting in pointer guide table) Closes #16107 (remove serialize::ebml, add librbml) Closes #16108 (Fix heading levels in pointer guide) Closes #16109 (rustrt: Don't conditionally init the at_exit QUEUE) Closes #16111 (hexfloat: Deprecate to move out of the repo) Closes #16113 (Add examples for GenericPath methods.) Closes #16115 (Byte literals!) Closes #16116 (Add a non-regression test for issue #8372) Closes #16120 (Deprecate semver) Closes #16124 (Deprecate uuid) Closes #16126 (Deprecate fourcc) Closes #16127 (Remove incorrect example) Closes #16129 (Add note about production deployments.) Closes #16131 (librustc: Don't ICE when trying to subst regions in destructor call.) Closes #16133 (librustc: Don't ICE with struct exprs where the name is not a valid struct.) Closes #16136 (Implement slice::Vector for Option<T> and CVec<T>) Closes #16137 (alloc, arena, test, url, uuid: Elide lifetimes.)
-
由 OGINO Masanori 提交于
Signed-off-by: NOGINO Masanori <masanori.ogino@gmail.com>
-
由 Derek Harland 提交于
-
由 Luqman Aden 提交于
-
由 Luqman Aden 提交于
-
由 Steve Klabnik 提交于
Fixes #11511.
-
由 Steve Klabnik 提交于
This now works because of elision. Fixes #16117
-
由 Ilya Dmitrichenko 提交于
-
由 Ilya Dmitrichenko 提交于
-
由 Ilya Dmitrichenko 提交于
-
由 Simon Sapin 提交于
-
由 Simon Sapin 提交于
-
由 nham 提交于
-
由 nham 提交于
-
由 nham 提交于
-
由 Alex Crichton 提交于
This deprecates the hexfloat library as it is now located in the rust-lang organization as a cargo package
-
- 31 7月, 2014 16 次提交
-
-
由 Alex Crichton 提交于
This initialization should happen unconditionally, but the rtassert! macro is gated on the ENFORCE_SANITY define Closes #16106
-
由 Steve Klabnik 提交于
-
由 Erick Tryzelaar 提交于
-
由 Erick Tryzelaar 提交于
Our implementation of ebml has diverged from the standard in order to better serve the needs of the compiler, so it doesn't make much sense to call what we have ebml anyore. Furthermore, our implementation is pretty crufty, and should eventually be rewritten into a format that better suits the needs of the compiler. This patch factors out serialize::ebml into librbml, otherwise known as the Really Bad Markup Language. This is a stopgap library that shouldn't be used by end users, and will eventually be replaced by something better. [breaking-change]
-
由 Steve Klabnik 提交于
-
由 Tobias Bucher 提交于
-
由 Brian Anderson 提交于
-
由 Brian Anderson 提交于
For consistency, just because `fail_` has it.
-
由 Brian Anderson 提交于
Divide-by-zero before: ``` leaq "str\"str\"(1762)"(%rip), %rax movq %rax, 16(%rsp) movq $27, 24(%rsp) leaq "str\"str\"(1542)"(%rip), %rax movq %rax, (%rsp) movq $19, 8(%rsp) leaq 16(%rsp), %rdi leaq (%rsp), %rsi movl $32, %edx callq _ZN7failure5fail_20hc04408f955ce60aaqWjE@PLT ``` After: ``` leaq .Lconst(%rip), %rdi callq _ZN7failure5fail_20haf918a97c8f7f2bfqWjE@PLT ``` Bounds check before: ``` leaq "str\"str\"(1542)"(%rip), %rax movq %rax, 8(%rsp) movq $19, 16(%rsp) leaq 8(%rsp), %rdi movl $38, %esi movl $1, %edx movl $1, %ecx callq _ZN7failure17fail_bounds_check20hf4bc3c69e96caf41RXjE@PLT ``` Bounds check after: ``` leaq .Lconst2(%rip), %rdi movl $1, %esi movl $1, %edx callq _ZN7failure17fail_bounds_check20h5267276a537a7de22XjE@PLT ``` Size before: 21277995 librustc-4e7c5e5c.s ``` text data 12554881 6089335 ``` Size after: 21247617 librustc-4e7c5e5c.so ``` text data 12518497 6095748 ```
-
由 Brian Anderson 提交于
Smaller text size.
-
由 DJUrsus 提交于
-
由 Michael Neumann 提交于
-
由 Michael Neumann 提交于
-
由 Simon Sapin 提交于
The replacement is [rust-url](https://github.com/servo/rust-url), which can be used with Cargo. Fix #15874 Fix #10707 Close #10706 Close #10705 Close #8486
-
由 nham 提交于
-
由 nham 提交于
In order to prevent users from having to manually implement Hash and Ord for bitflags types, this commit derives these traits automatically. This breaks code that has manually implemented any of these traits for types created by the bitflags! macro. Change this code by removing implementations of these traits. [breaking-change]
-