小编Chu*_*uck的帖子

安装最新的 rust nightly 抱怨缺少 rls 组件

尝试编译:https://github.com/SergioBenitez/Rocket/tree/master/examples/hello

Cargo.toml

[dependencies]
rocket = "0.4.10"
Run Code Online (Sandbox Code Playgroud)

抱怨我每晚都需要 Rust

$ cargo build
...
  Error: Rocket (core) requires a more recent version of rustc.
  Installed version: 1.54.0 (2021-05-17)
  Minimum required:  1.54.0-nightly (2021-05-18)
Run Code Online (Sandbox Code Playgroud)

我已经完成了本地目录覆盖

$ rustup override set nightly
Run Code Online (Sandbox Code Playgroud)

我每晚运行 2021-05-17 但我需要 2021-05-18

$ rustup show
...
active toolchain
----------------

nightly-x86_64-unknown-linux-gnu (directory override for '/<redacted>')
rustc 1.54.0-nightly (3e99439f4 2021-05-17)
Run Code Online (Sandbox Code Playgroud)

我尝试了各种命令来获取更新的每晚

$ rustup update
$ rustup update nightly
$ rustup toolchain install nightly-2021-05-18
Run Code Online (Sandbox Code Playgroud)

当我这样做的时候,会发生一些奇怪的事情rustup update nightly

$ rustup update nightly 
info: syncing …
Run Code Online (Sandbox Code Playgroud)

nightly-build rust rust-language-server rust-rocket

11
推荐指数
1
解决办法
5126
查看次数

获取比较指令的值

据我了解, cmp 指令将设置标志寄存器中的一些位。然后,您可以使用 jle、jnp 等指令基于这些指令进行分支。

我想知道如何从比较中恢复整数值。

示例:以下是有效的 c 语法

y = x[a >= 13];
Run Code Online (Sandbox Code Playgroud)

因此,a 与 13 进行比较,得到 true 或 false,分别解释为 1 或 0。但是,1 或 0 必须作为整数输入到数组访问中。编译器会做什么?

我能想到的一些事情是:

进行比较,然后分支到 x[0] 或 x[1]

进行比较,然后分支执行 tmp = 0 或 tmp = 1,然后执行 x[tmp]

也许对标志做一些奇特的逻辑(不确定是否有直接访问标志的指令)

我试图查看 gcc 为该代码示例吐出的内容,但不可能从它抛出的所有额外垃圾中找出逻辑。

我正在开发一个编译器,因此任何建议将不胜感激。

x86 compare

3
推荐指数
1
解决办法
1909
查看次数