首页 文章
  • 0 votes
     answers
     views

    在Rust中在堆上或堆栈上声明变量的经验法则是什么? [等候接听]

    如何决定何时使用堆栈或堆(即 Box::new(whatever); ) 我阅读了下面的所有链接,但我看不到任何指导,所以我怀疑只要类型的大小超出要复制的地址的大小,我们就会进行堆分配(有点像在值和引用类型之间的C#) . https://doc.rust-lang.org/book/ch04-01-what-is-ownership.html#the-stack-and-the-heap ...
  • -5 votes
     answers
     views

    搬家后,这里借来的 Value 问题是什么? [等候接听]

    有我的代码,我不知道是什么问题,所以, Ant 非常感谢 . 并且有所有代码 . 当您运行此代码时,将在移动错误消息后抛出此处借用的值 . pub fn median_of_two_sorted_arrays(vec1: Vec<i32>, vec2: Vec<i32>) -> i32 { let _mlen: i32 = (vec1.len() + vec2...
  • 1 votes
     answers
     views

    Rust错误代码E0495是什么意思?

    我正在使用Rocket创建一个Web服务器,我正在尝试围绕 Responder trait创建一个包装器,以便我的路由方法可以返回任何结构 . 下面的代码不能编译,因为我不完全理解有关生命周期的错误 . 错误是not listed in the error index;它从E0492跳到E0496 . 由于此代码使用Rocket,因此需要夜间编译器 . main.rs #![feature(cu...
  • -1 votes
     answers
     views

    特征绑定不满意库中的错误[重复]

    这个问题在这里已有答案: Why is a trait not implemented for a type that clearly has it implemented? 1回答 我正在尝试使用secp256k1库生成密钥对 . 在官方文档中我找到了这段代码: use rand::OsRng; use secp256k1::{Secp256k1, Message}; let secp =...
  • -2 votes
     answers
     views

    适用于Linux,ARM和Windows的Canonical交叉编译(不包括libc)

    目前,Rust的交叉编译故事是scattered across several outdated博客文章,repos,工具(musl,crosstools-ng)或Docker文件 . 我花了大约20个小时努力让ARM和Windows编译和链接为一个不需要libc的项目工作,所以我很乐意看到完整的规范指令来获得“Hello world!”为以下目标编译的示例: OSX到ARM, armv7-u...
  • 0 votes
     answers
     views

    如何将Vec <ndarray :: Array1>的集合转换为Array2?

    我正在尝试使用ndarray crate从 Vec 的1D阵列创建一个2D数组 . 在当前的实现中,我将 Vec&lt;Array1&lt;u32&gt;&gt; 作为一维数组的集合,而我很难弄清楚如何将其转换为 Array2&lt;u32&gt; . 我在 Vec&lt;Array1&lt;u32&gt;&gt; 上尝试了 from_vec() ,但它产生了 Array1&lt;Array1&...
  • 6 votes
     answers
     views

    尝试从RefCell中包含的结构中借用2个字段时出错

    我有一个结构,其中包含数据和最终将用于写入数据的编写器 . 结构包含在 RefCell 中 . 这是一个小的复制品: use std::cell::RefCell; use std::io::Write; struct Data { string: String, } struct S { data: Data, writer: Vec&lt;u8&gt;, } fn...
  • 3 votes
     answers
     views

    为什么rustc需要一分钟来编译这个250行程序并进行优化?

    背景:我为各种编程语言制作了一个愚蠢的代码生成程序,目的是比较各种编译器编译由简单函数构成的荒谬的长100K LOC程序需要多长时间 . 但是在编译时,程序的Rust版本从未在 rustc 给出优化标志时完成编译 . 我发现使用 -C opt-level=2 或 -C opt-level=3 标志为 rustc 编译一个非常小的Rust程序(下面的示例)很容易(对我的敏感性)太长了 . 我尝试在1...
  • 1 votes
     answers
     views

    包含任意数量类型的宏

    是否可以编写一个宏来定义包含任意数量(不同)输入类型的枚举?我想做一种类型级别的匹配 . type_switch!(i32 =&gt; println!(&quot;integer&quot;), f32 =&gt; println!(&quot;float&quot;), Foo =&gt; println!(&quot;foo&quot;)) 这将扩展到: { enum Wrappe...
  • 1 votes
     answers
     views

    通过值从原始类型引用复制的惯用方法是什么?

    请考虑以下代码段: fn example(current_items: Vec&lt;usize&gt;, mut all_items: Vec&lt;i32&gt;) { for i in current_items.iter() { let mut result = all_items.get_mut(i); } } 编译器抱怨 i 是 &amp;mut us...
  • 1 votes
     answers
     views

    为什么通过auto-deref访问的引用变量被移动了?

    我以为我有了移动语义的想法,直到这段代码 . fn main() { let v = Data { body: vec![10, 40, 30], }; p(&amp;v); } fn p(d: &amp;Data) { for i in d.body { // &amp;d.body, Why d.body move? ...
  • 1 votes
     answers
     views

    为什么Arc :: try_unwrap()导致恐慌?

    我正在写一个简单的聊天服务器,它向所有连接的客户端广播消息 . 代码可能看起来很糟糕,因为我是初学者 . 对等体还没有在任何地方使用,因为我也希望将它传递给 handle_client 函数,所以当数据在流中可用并成功读取时,我想在所有连接的客户端上广播它 . 我知道这不是一个好方法,我只是想了解我怎样才能做到这样的事情 . use std::io::BufRead; use std::io::W...
  • 3 votes
     answers
     views

    有没有办法直接在堆上分配标准的Rust数组,完全跳过堆栈?

    Stack Overflow上已经有几个关于在堆上分配数组(比如 [i32] )的问题 . 一般建议是拳击,例如 Box&lt;[i32]&gt; . 但是虽然拳击对于较小的阵列工作得很好,但问题是被装箱的阵列必须首先在堆栈上分配 . 因此,如果数组太大(比如1000万个元素),你会 - 甚至用拳击 - 得到一个堆栈溢出(一个不太可能有一个大的堆栈) . 然后建议使用 Vec&lt;T&gt; ...
  • 0 votes
     answers
     views

    变量的生命周期错误我认为我没有借用

    我有一个代码块,递归地读取目录并为每个文件创建一个哈希 . 这是代码: //read the file paths all the way upto individual files for dir in search_dirs.iter(){ //read the dir, skip errors (hidden files, syslinks etc) for e in Wa...
  • 2 votes
     answers
     views

    类型级Fibonacci序列导致“溢出评估需求”

    我已经写了一个类型级别的添加,工作正常 . 每个数字都表示为 Inc&lt;Inc&lt;...&lt;Zero&gt;...&gt;&gt; . 有一个特征 Add ,然后结构 Bop&lt;Left, Right&gt; (二元操作)实现 Add 特征 . 用法是 &lt;Bop&lt;Inc&lt;Inc&lt;Inc&lt;Zero&gt;&gt;&gt;, Inc&lt;Inc&lt;...
  • 0 votes
     answers
     views

    Rust是否具有Python的字典理解语法?

    如何翻译下面的Python,其中读取了几个文件,并且它们的内容被用作字典的值(文件名为键),以及Rust? countries = {region: open(&quot;{}.txt&quot;.format(region)).read() for region in [&quot;canada&quot;, &quot;usa&quot;, &quot;mexico&quot;]} 我的尝试...
  • 0 votes
     answers
     views

    如何获得Rust一个月的天数?

    是否有一种惯用的Rust方法来获取给定月份的天数?我看过时计,但我没有在文档中找到任何内容 . 我正在寻找可以管理闰年的东西,类似于Python中的 calendar.monthrange 或C#中的 DateTime.DaysInMonth .
  • 0 votes
     answers
     views

    不了解如何访问Rust中的向量元素[重复]

    这个问题在这里已有答案: Why does printing a pointer print the same thing as printing the dereferenced pointer? 1回答 这是我第一次遇到Rust,我正在阅读当前版本的Rust Book中关于向量的章节 . 我之前有过使用其他语言的经验(主要是功能性的,隐藏了以下问题) . 运行以下代码片段(从书中)返回 3...
  • 2 votes
     answers
     views

    在Rust中生成安全随机数

    我可以看到我必须像这样导入: use std::io::IoResult; use std::num::{Int, ToPrimitive}; use std::rand::{OsRng, Rng}; 然后创建一个新的OsRng实例,并尝试从中生成一个新的u32 int fn main() { let mut rng = OsRng::new(); let num:u32 = rng...
  • 28 votes
     answers
     views

    问号在类型参数中的含义是什么意思?

    我找到了std::borrow::BorrowMut的定义: pub trait BorrowMut&lt;Borrowed&gt;: Borrow&lt;Borrowed&gt; where Borrowed: ?Sized, { fn borrow_mut(&amp;mut self) -&gt; &amp;mut Borrowed; } Sized 前面的问号是什么意思在这...
  • 4 votes
     answers
     views

    如何返回对本地分配的struct / object的引用? AKA错误:`foo`的寿命不够长

    这是我正在做的简化示例: struct Foo ... impl io::Read for Foo ... fn problem&lt;'a&gt;() -&gt; io::Result&lt;&amp;'a mut io::Read&gt; { // foo does not live long enough, because it gets allocated on the stac...
  • 6 votes
     answers
     views

    返回位置的值是否总是在父堆栈框架或接收框中分配?

    我试图了解从方法返回时结构的行为 . “Rust Book”的nightlies部分有一节说如果你使用了语法...... let x = box i_return_a_struct(); ..没有副本,因此不需要返回指针 . 但是当我开始玩它时,似乎不需要 box ,除非您需要在堆上存在该值 . #[derive(Debug)] struct Dummy { data: i64, } ...
  • 2 votes
     answers
     views

    发生运行时混乱时,堆栈/堆分配类型会发生什么?

    在发生恐慌之前在堆或堆栈上分配的类型会发生什么?是否已调用析构函数以便取消分配类型?他们在记忆中徘徊等待被其他一些过程覆盖吗?或者它完全是另一回事? 我不知道,因为我是Rust和系统编程的新手 .
  • 0 votes
     answers
     views

    为什么Rust文档说即使向量在堆上,共享对向量的引用也会创建无效向量?

    以下是Rust编程语言chapter on ownership的摘录: 现在考虑以下代码片段:let v = vec![1,2,3]; 让mut v2 = v;第一行为堆栈上的矢量对象v分配内存,就像上面的x一样 . 但除此之外,它还在堆上为实际数据分配了一些内存([1,2,3]) . Rust将此堆分配的地址复制到内部指针,该指针是放置在堆栈上的向量对象的一部分(让我们将其称为数据指针) ...
  • 2 votes
     answers
     views

    Rust中的所有权跟踪:Box <T>(堆)和T(堆栈)之间的差异

    尝试使用编程语言Rust,我发现编译器能够非常准确地跟踪 field of some struct on the stack 的移动(它确切地知道移动了哪个字段) . 但是,当我将结构的一部分放入 Box (即将其放入堆中)时,编译器不再能够确定框中发生的所有事件的字段级移动 . 它将假设整个结构&quot;inside the box&quot;已经移动 . 让我们首先看一下一切都在堆栈上的例子...
  • 0 votes
     answers
     views

    从对象池借用时解决省略的静态生命周期

    这是我目前面临的问题的简化版本 . trait SuperObject { fn object_name(&amp;self) -&gt; String; } trait Inspect { fn inspect(&amp;self); } impl Inspect for SuperObject { fn inspect(&amp;self) { pr...
  • 3 votes
     answers
     views

    是一个String数组,例如[串; 3]存储在堆栈或堆上?

    Rust书指定: 使堆栈快速运行的另一个特性是堆栈上的所有数据必须占用已知的固定大小 . 它还说 String 存储在堆上,因为大小未知并且可能会发生变异 . &quot;composite&quot;数据结构在哪里,如包含 String 的数组存储?阵列的大小是固定的,但阵列的组件大小可能会发生变化 . let array: [String; 3] = [&quot;A&quot;,&quo...
  • 10 votes
     answers
     views

    通过FFI将C99`bool`返回Rust的正确类型是什么?

    一位同事和我一直在思考如何通过FFI将 bool 从 &lt;stdbool.h&gt; (a.k.a . _Bool )返回Rust . 我们有想要在Rust中使用的C99代码: bool myfunc(void) { ... } 我们让Rust知道 myfunc 使用 extern C 块: extern &quot;C&quot; { fn myfunc() -&gt; T...
  • 2 votes
     answers
     views

    在Rust中统一分配是什么意思?

    在Learning Rust With Entirely Too Many Linked Lists中,作者声称此代码是统一分配的 . 那是什么意思? struct Node { elem: i32, next: List, } pub enum List { Empty, More(Box&lt;Node&gt;), }
  • 5 votes
     answers
     views

    移动可变借入的所有权

    我的理解是,可变借款人可以将所有权转移给另一个可变借款人 . 但这一举动似乎与移动非指针变量有点不同 . 我们来看一个例子吧 . 当 compute() 第一次被调用时, p1 以下被移动到 p2 . 但在 compute() 回归之后,所有权似乎又回到了 p1 . fn compute(p2: &amp;mut Point) { } fn reset(p1: &amp;mut Point)...

热门问题