- 24 7月, 2014 5 次提交
-
-
由 Brian Anderson 提交于
-
由 Brian Anderson 提交于
-
由 Brian Anderson 提交于
-
由 Brian Anderson 提交于
Implement for Vec, DList, RingBuf. Add MutableSeq to the prelude. Since the collections traits are in the prelude most consumers of these methods will continue to work without change. [breaking-change]
-
由 bors 提交于
cc #15294
-
- 23 7月, 2014 18 次提交
-
-
由 bors 提交于
1. Removed obsolete comment regarding recursive/iteration implementations of tree_find_with/tree_find_mut_with 2. Replaced easy breakable find_with example with simpler one (which only removes redundant allocation during search)
-
由 bors 提交于
-
由 bors 提交于
This removes the special casing for `float`s where it was not necessary, as `-0.0 == 0.0`.
-
由 Valerii Hiora 提交于
1. Removed obsolete comment regarding recursive/iteration implementations of tree_find_with/tree_find_mut_with 2. Replaced easy breakable find_with example with simpler one (which only removes redundant allocation during search)
-
由 bors 提交于
The removed code caused confusion because it is not clear that the type of `y` is actually `()`
-
由 Steven Fackler 提交于
-
由 bors 提交于
I found these things to be ambiguous, or at least worth stating explicitly to reduce the amount a user/developer needs to think about the API.
-
由 bors 提交于
Fixes #13041.
-
由 Jakub Wieczorek 提交于
Fixes #13041.
-
由 bors 提交于
Fill in examples for missing methods. Opt for `vec![]` instead of `vec!()`.
-
由 nham 提交于
-
由 nham 提交于
-
由 bors 提交于
Closes #15828
-
由 Tobias Bucher 提交于
This removes the special casing for `float`s where it was not necessary, as `-0.0 == 0.0`.
-
由 Adolfo Ochagavía 提交于
The removed code caused confusion because it is not clear that the type of `y` is actually `()`
-
由 Alexis Beingessner 提交于
-
由 bors 提交于
Lifetime intrinsics help to reduce stack usage, because LLVM can apply stack coloring to reuse the stack slots of dead allocas for new ones. For example these functions now both use the same amount of stack, while previous `bar()` used five times as much as `foo()`: ````rust fn foo() { println("{}", 5); } fn bar() { println("{}", 5); println("{}", 5); println("{}", 5); println("{}", 5); println("{}", 5); } ```` On top of that, LLVM can also optimize out certain operations when it knows that memory is dead after a certain point. For example, it can sometimes remove the zeroing used to cancel the drop glue. This is possible when the glue drop itself was already removed because the zeroing dominated the drop glue call. For example in: ````rust pub fn bar(x: (Box<int>, int)) -> (Box<int>, int) { x } ```` With optimizations, this currently results in: ````llvm define void @_ZN3bar20h330fa42547df8179niaE({ i64*, i64 }* noalias nocapture nonnull sret, { i64*, i64 }* noalias nocapture nonnull) unnamed_addr #0 { "_ZN29_$LP$Box$LT$int$GT$$C$int$RP$39glue_drop.$x22glue_drop$x22$LP$1347$RP$17h88cf42702e5a322aE.exit": %2 = bitcast { i64*, i64 }* %1 to i8* %3 = bitcast { i64*, i64 }* %0 to i8* tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %2, i64 16, i32 8, i1 false) tail call void @llvm.memset.p0i8.i64(i8* %2, i8 0, i64 16, i32 8, i1 false) ret void } ```` But with lifetime intrinsics we get: ````llvm define void @_ZN3bar20h330fa42547df8179niaE({ i64*, i64 }* noalias nocapture nonnull sret, { i64*, i64 }* noalias nocapture nonnull) unnamed_addr #0 { "_ZN29_$LP$Box$LT$int$GT$$C$int$RP$39glue_drop.$x22glue_drop$x22$LP$1347$RP$17h88cf42702e5a322aE.exit": %2 = bitcast { i64*, i64 }* %1 to i8* %3 = bitcast { i64*, i64 }* %0 to i8* tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %2, i64 16, i32 8, i1 false) tail call void @llvm.lifetime.end(i64 16, i8* %2) ret void } ```` Fixes #15665
-
由 bors 提交于
I wanted to have a slightly larger example compared to the method examples, but I'm unsure how it worked out. Feedback would nice.
-
- 22 7月, 2014 17 次提交
-
-
由 Jonas Hietala 提交于
-
由 bors 提交于
Allow "rustdoc --passes list" to work without specifying input files, as shown in the examples section of the man page.
-
由 bors 提交于
I screwed this up a while back, and now that I have no outstanding PRs, it's a good time to fix this.
-
由 Jonas Hietala 提交于
Remove unnecessary `use std::vec::Vec`. Use ``` code blocks with rust as default instead of spelling it out.
-
由 Jonas Hietala 提交于
Also more explicit raw pointer handling in unsafe examples.
-
由 bors 提交于
Adds a new runtime unwinding function that encapsulates the printing of the words "explicit failure" when `fail!()` is called w/o arguments. The before/after optimized assembly: ``` leaq "str\"str\"(1412)"(%rip), %rax movq %rax, 24(%rsp) movq $16, 32(%rsp) leaq "str\"str\"(1413)"(%rip), %rax movq %rax, 8(%rsp) movq $19, 16(%rsp) leaq 24(%rsp), %rdi leaq 8(%rsp), %rsi movl $11, %edx callq _ZN6unwind12begin_unwind21h15836560661922107792E ``` ``` leaq "str\"str\"(1369)"(%rip), %rax movq %rax, 8(%rsp) movq $19, 16(%rsp) leaq 8(%rsp), %rdi movl $11, %esi callq _ZN6unwind31begin_unwind_no_time_to_explain20hd1c720cdde6a116480dE@PLT ``` Before/after filesizes: rwxrwxr-x 1 brian brian 21479503 Jul 20 22:09 stage2-old/lib/librustc-4e7c5e5c.so rwxrwxr-x 1 brian brian 21475415 Jul 20 22:30 x86_64-unknown-linux-gnu/stage2/lib/librustc-4e7c5e5c.so This is the lowest-hanging fruit in the fail-bloat wars. Further fixes are going to require harder tradeoffs. r? @pcwalton
-
由 Jonas Hietala 提交于
Add more useful functions to main example.
-
由 bors 提交于
-
由 Jonas Hietala 提交于
-
由 Björn Steinbrink 提交于
Lifetime intrinsics help to reduce stack usage, because LLVM can apply stack coloring to reuse the stack slots of dead allocas for new ones. For example these functions now both use the same amount of stack, while previous `bar()` used five times as much as `foo()`: ````rust fn foo() { println("{}", 5); } fn bar() { println("{}", 5); println("{}", 5); println("{}", 5); println("{}", 5); println("{}", 5); } ```` On top of that, LLVM can also optimize out certain operations when it knows that memory is dead after a certain point. For example, it can sometimes remove the zeroing used to cancel the drop glue. This is possible when the glue drop itself was already removed because the zeroing dominated the drop glue call. For example in: ````rust pub fn bar(x: (Box<int>, int)) -> (Box<int>, int) { x } ```` With optimizations, this currently results in: ````llvm define void @_ZN3bar20h330fa42547df8179niaE({ i64*, i64 }* noalias nocapture nonnull sret, { i64*, i64 }* noalias nocapture nonnull) unnamed_addr #0 { "_ZN29_$LP$Box$LT$int$GT$$C$int$RP$39glue_drop.$x22glue_drop$x22$LP$1347$RP$17h88cf42702e5a322aE.exit": %2 = bitcast { i64*, i64 }* %1 to i8* %3 = bitcast { i64*, i64 }* %0 to i8* tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %2, i64 16, i32 8, i1 false) tail call void @llvm.memset.p0i8.i64(i8* %2, i8 0, i64 16, i32 8, i1 false) ret void } ```` But with lifetime intrinsics we get: ````llvm define void @_ZN3bar20h330fa42547df8179niaE({ i64*, i64 }* noalias nocapture nonnull sret, { i64*, i64 }* noalias nocapture nonnull) unnamed_addr #0 { "_ZN29_$LP$Box$LT$int$GT$$C$int$RP$39glue_drop.$x22glue_drop$x22$LP$1347$RP$17h88cf42702e5a322aE.exit": %2 = bitcast { i64*, i64 }* %1 to i8* %3 = bitcast { i64*, i64 }* %0 to i8* tail call void @llvm.memcpy.p0i8.p0i8.i64(i8* %3, i8* %2, i64 16, i32 8, i1 false) tail call void @llvm.lifetime.end(i64 16, i8* %2) ret void } ```` Fixes #15665
-
由 bors 提交于
-
由 Corey Richardson 提交于
-
由 bors 提交于
Fixes #15793.
-
由 Corey Richardson 提交于
-
由 bors 提交于
- Made custom syntax extensions capable of expanding custom macros by moving `SyntaxEnv` into `ExtCtx` - Added convenience method on `ExtCtx` for getting a macro expander. - Made a few things private to force only a single way to use them (through `ExtCtx`) - Removed some ancient commented-out code Closes #14946
-
由 Corey Richardson 提交于
-
由 Corey Richardson 提交于
-