小编Luk*_*odt的帖子

引用如何在绑定表达式的模式中工作?

我在 Rust 书中遇到了下面的例子。

for &item in list.iter() {
    if item > largest {
        largest = item;
    }
}
Run Code Online (Sandbox Code Playgroud)

我想这意味着list.iter()返回对列表中元素的引用,&item但是在将其与最大数字进行比较时,为什么我们不使用*item&item另外,当我将第一行中的to更改为时,编译器item强制我在第二行和第三行中使用。*item

我在网上看到了另一个例子。

(0..).map(|x| x * x)
    .take_while(|&x| x <= limit)
    .filter(|x| is_even(*x))
Run Code Online (Sandbox Code Playgroud)

这里的闭包take_while接受&x但直接使用x,但闭包filter接受x而不引用但传递*xis_even

那么这在 Rust 中是如何工作的呢?

iterator reference rust

0
推荐指数
1
解决办法
191
查看次数

为什么 Rust 会发出 280 行汇编代码来打印“Hello, world”?

Rust 中的一个简单的 3 行 Hello, World 程序会发出一个 280 行的汇编文件,以便打印两个单词。同时,这个程序的纯汇编版本只需要大约 15 行。为什么 Rust 版本那么长?

这是在 Mac OS 上。

hello.rs

fn main() {
    println!("hello world")
}
Run Code Online (Sandbox Code Playgroud)

hello.s(由rustc --emit=asm hello.rs):

    .section    __TEXT,__text,regular,pure_instructions
    .macosx_version_min 10, 7
    .private_extern __ZN3std2rt10lang_start17hb4e01c1e588bf694E
    .globl  __ZN3std2rt10lang_start17hb4e01c1e588bf694E
    .p2align    4, 0x90
__ZN3std2rt10lang_start17hb4e01c1e588bf694E:
    .cfi_startproc
    pushq   %rbp
    .cfi_def_cfa_offset 16
    .cfi_offset %rbp, -16
    movq    %rsp, %rbp
    .cfi_def_cfa_register %rbp
    subq    $32, %rsp
    leaq    l___unnamed_1(%rip), %rax
    movq    %rdi, -8(%rbp)
    leaq    -8(%rbp), %rcx
    movq    %rcx, %rdi
    movq    %rsi, -16(%rbp)
    movq    %rax, %rsi …
Run Code Online (Sandbox Code Playgroud)

macos assembly rust

0
推荐指数
1
解决办法
240
查看次数

-1
推荐指数
1
解决办法
181
查看次数

为什么在Sw中交换[] float64的元素比在Rust中交换Vec <f64>的元素更快?

我有两个(相当于?)程序,一个在另一个在Rust中.平均执行时间是:

  • 去~169ms
  • 生锈~201ms

package main

import (
    "fmt"
    "time"
)

func main() {
    work := []float64{0.00, 1.00}
    start := time.Now()

    for i := 0; i < 100000000; i++ {
        work[0], work[1] = work[1], work[0]
    }

    elapsed := time.Since(start)
    fmt.Println("Execution time: ", elapsed)
}
Run Code Online (Sandbox Code Playgroud)

我编译了 --release

use std::time::Instant;

fn main() {
    let mut work: Vec<f64> = Vec::new();
    work.push(0.00);
    work.push(1.00);

    let now = Instant::now();

    for _x in 1..100000000 {
        work.swap(0, 1); 
    }

    let elapsed = now.elapsed();
    println!("Execution time: {:?}", elapsed); …
Run Code Online (Sandbox Code Playgroud)

performance go rust llvm-codegen

-6
推荐指数
1
解决办法
207
查看次数