gpt4 book ai didi

rust - 不使用 libcore 实现内置类型的基本操作

转载 作者:行者123 更新时间:2023-11-29 07:46:58 25 4
gpt4 key购买 nike

当我在不使用 libcore 的情况下为裸机编写简单代码时,出现以下错误:

error: binary operation != cannot be applied to type u32 [E0369]

直接实现面临先有鸡还是先有蛋的问题:

#![crate_type = "lib"]
#![feature(no_std, no_core, lang_items)]
#![no_std]
#![no_core]

#[lang = "sized"]
pub trait Sized {}

#[lang = "sync"]
pub trait Sync {}

pub const CONST1: u32 = 1;
pub const CONST2: u32 = 2;

pub struct Struct {
pub field: u32,
}

impl Sync for Struct {}

pub static VAR: Struct = Struct {
field: CONST1 + CONST2,
};

这里我得到以下错误:

error: binary operation + cannot be applied to type u32 [E0369]

最佳答案

这实际上是当今的预期行为。 Rust 要求为类型实现“添加”lang 项,即使它是内置类型。实现可以是完全伪造的(只要它编译),因为它将是 replaced by the built-in operation .

这样做的原因是对内置类型进行类型检查的代码存在错误且复杂。这样做可以简化类型检查代码,而且 trait 实现已经存在。

因此您需要添加以下两个声明才能在内置类型 u32

上使用 + 运算符
#[lang = "add"]
pub trait Add<RHS=Self> {
type Output;
fn add(self, rhs: RHS) -> Self::Output;
}

impl Add for u32 {
type Output = u32;
fn add(self, _rhs: u32) -> u32 { 42 }
}

这是一个没有链接的完整示例,因为它缺少一些 libc 内容:https://play.rust-lang.org/?gist=a223d48b0f2d8533996f&version=nightly

请注意,您不应该创建如图所示的伪造实现,因为您可能在通用上下文中使用内置类型,而实际将在其中使用该实现

关于rust - 不使用 libcore 实现内置类型的基本操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31761132/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com