小编kni*_*t42的帖子

如何编写生成模块的Rust编译器插件?

我正在编写一个扩展的Rust编译器插件

choose! {
    test_a
    test_b
}
Run Code Online (Sandbox Code Playgroud)

#[cfg(feature = "a")]
mod test_a;
#[cfg(feature = "b")]
mod test_b;
Run Code Online (Sandbox Code Playgroud)

它现在几乎完成,但模块在最终扩展的代码中不包含任何内容.我猜原因是跨度不包括模块文件.

use syntax::ast;
use syntax::ptr::P;
use syntax::codemap;
use syntax::parse::token;
use syntax::tokenstream::TokenTree;
use syntax::ext::base::{ExtCtxt, MacResult, DummyResult, MacEager};
use syntax::ext::build::AstBuilder;
use syntax_pos::Span;
use rustc_plugin::Registry;
use syntax::util::small_vector::SmallVector;

// Ideally, it will expand
//
// ```rust
// choose! {
//   test_a
//   test_b
// }
// ```
// to
// ```rust
// #[cfg(feature = "a")]
// mod test_a;
// #[cfg(feature = "b")]
// mod test_b;
// ``` …
Run Code Online (Sandbox Code Playgroud)

rust rust-compiler-plugin

6
推荐指数
1
解决办法
333
查看次数

如何从Rust中的二进制文件中读取C结构?

我已阅读如何从Rust中的文件读取结构?,但std::slice::raw::mut_buf_as_slice已被弃用,因此我想重新提出这个问题.

我想读一个struct utmp来自/var/run/utmp,我尝试了以下代码:

fn read_utmp() -> Utmp {
    let mut reader = BufReader::new(File::open("/var/run/utmp").unwrap());
    let mut ut = vec![];
    let size = mem::size_of::<Utmp>();
    reader.take(size as u64).read_to_end(&mut ut);
    unsafe {
        std::mem::transmute(ut)
    }
}
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,编译器投诉:

错误:使用不同大小的类型调用transmute:std :: vec :: Vec(192位)到Utmp(3056位)[E0512]

我怎么能这样做?

io serialization rust

5
推荐指数
1
解决办法
2568
查看次数

如何组合std :: str :: lines和std :: io :: lines?

我想编写一个解析文本的函数,但文本可能来自外部文件或内部文件&str.该parse功能可能如下所示:

fn parse(lines: GenericLinesGenerator) {
   for line in lines {
       // parse content
   }
}
Run Code Online (Sandbox Code Playgroud)

......它可以像这样调用:

use std::io::BufReader;
use std::fs::File;
let fin = BufReader::new(File::open("info.txt").expect("not found"));
parse(TransformFromIO(fin.lines()))
Run Code Online (Sandbox Code Playgroud)

要么

let content: &'static str = "some\nlong\ntext";
parse(TransformFromStr(content.lines()))
Run Code Online (Sandbox Code Playgroud)

是否可以实现这样的parse功能?

generics iterator traits rust

4
推荐指数
1
解决办法
143
查看次数