#语法 #解析 # #Java #类似Java #val #警告

jrust

一个解析类似Java语法的Rust宏,并将其作为Rust程序运行的Rust宏

2个不稳定版本

使用旧的Rust 2015

0.2.0 2018年8月11日
0.1.0 2018年8月10日

#2196Rust 模式

自定义许可证

15KB
295

jRust Crates.io

这是什么疯狂的东西?

朋友们,这是一个解析类似Java语法的Rust宏,并将其作为Rust程序运行的Rust宏。

警告:这是一个非常早期的版本。 我只是想完成一个原型,以便在crates.io上保留这个名称。当然,我会在以后更多地关注这个非常有用的库。

为什么

"科学不是关于为什么,而是关于为什么不?为什么我们的大部分科学都是危险的,为什么不可以有安全的科学呢?实际上,为什么不发明一个特殊的逃生门,这样你出门的时候就不会因为 被解雇 而被踢到屁股上。" — Cave Johnsson, Portal 2

  • 来源:Cave Johnsson, Portal 2

这个项目的整个想法是由 @nilset 发明的。

示例

java! {
    public class Value {
        int val;

        ---

        public Value(this, int val) {
            (this.val) = val;
        }

        public void print(this) {
            System.out.println((this.val));
        }
    }
}

注意:这不是1:1的Java,因为存在一些限制。强调的是 this,这是为了对抗Rust的宏卫生。

生成的Rust代码

可以使用 cargo-expand 进行检查

#[derive(Clone, Debug, Default)]
pub struct Value {
    val: i32,
}
impl Value {
    pub fn init(this: &mut Self, val: i32) {
        this.val = val;
    }
    pub fn new(val: i32) -> Self {
        let mut me = Self::default();
        Self::init(&mut me, val);
        me
    }
}
impl Value {
    pub fn print(this: &mut Self) -> () {
        println!("{}", this.val);
    }
}

显然这并不完美。清洁的代码、速度等是我将努力追求的,但它们不是优先事项。

无运行时依赖