Resolving imports and Tables in 21-paper
T4 raw pointer declaration
T5: raw pointer dereferences,
T6: FNs using raw pointers in a given
T3: # of fns affected by each cat of unsafety(Union, Global, InlineAsm, Extern, RawDeref, Cast, Alloc, FP)
T2: times cat of unsafety appear in each corpus program
T1: App Domain, C LoC, Rust LoC, #Fn, #Unsafe Fn
∃! lifetime cat contains only unique
root@90186e9b3b92:~/lab/laertes/rewrite-invocations# cat bzip2
/root/lab/laertes/rewrite-workspace/bzip2/rust/c2rust-lib.rs
root@90186e9b3b92:~/lab/laertes/rewrite-invocations# cat /root/lab/laertes/rewrite-workspace/bzip2/rust/c2rust-lib.rs
#![allow(dead_code)]
#![allow(mutable_transmutes)]
#![allow(non_camel_case_types)]
#![allow(non_snake_case)]
#![allow(non_upper_case_globals)]
#![allow(unused_assignments)]
#![allow(unused_mut)]
#![feature(const_raw_ptr_to_usize_cast)]
// #![feature(const_transmute)]
#![feature(extern_types)]
#![feature(linkage)]
#![feature(main)]
#![feature(ptr_offset_from)]
#![feature(register_tool)]
#![register_tool(c2rust)]
pub mod blocksort;
pub mod bzip2;
pub mod bzip2recover;
pub mod bzlib;
pub mod compress;
pub mod crctable;
pub mod decompress;
pub mod huffman;
pub mod randtable;
root@90186e9b3b92:~/lab/laertes/rewrite-invocations# cargo run --release --bin resolve-imports -- `cat rewrite-invocations/bzip2`
::core::
替换为 ::std::
可以使编译通过。
sed -i 's/::core::/::std::/g' /root/lab/laertes/rewrite-workspace/leet-extern_types/0051_n_queens/c2rust/src/n_queens.rs
关于原理,我想你可能是想要了解为什么将 ::core::
替换为 ::std::
可以使编译通过。
这个问题的核心在于 Rust 标准库 std
和 core
之间的关系。Rust 的 std
库是它的标准库,提供了诸如文件系统 I/O、线程、进程和网络等功能。而 core
库是 std
库的一个子集,它是 std
库的一部分,提供了没有 I/O 和分配功能的最基本的工具。core
库是为了可以在没有操作系统或需要避免分配的环境(例如嵌入式系统)中运行的 Rust 程序设计的。
你在源代码中看到的 ::core::
和 ::std::
是 Rust 中的路径语法,用于在模块系统中引用类型或函数。::core::
表示的是从 core
库中引用,而 ::std::
表示的是从 std
库中引用。
当你在运行代码时遇到问题,问题出在 ::core::
中的某些特性在你的环境中无法找到,但在 ::std::
中却可以找到。这是因为你的环境有完整的 std
库,包括 core
库以及其他功能。因此,将 ::core::
替换为 ::std::
允许 Rust 编译器在 std
库中找到正确的特性,使得代码可以成功编译和运行。
这就是为什么你只需使用 sed
将 ::core::
替换为 ::std::
,就可以解决你的问题。因为 ::std::
路径在你的环境中能找到对应的特性,而 ::core::
路径无法找到。