Resolving imports and Tables in 21-paper

·

1 min read

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 标准库 stdcore 之间的关系。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:: 路径无法找到。