尝试编译: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) 据我了解, 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 为该代码示例吐出的内容,但不可能从它抛出的所有额外垃圾中找出逻辑。
我正在开发一个编译器,因此任何建议将不胜感激。