< 返回版块

Neutron3529 发表于 2020-06-05 10:49

现在编写Rust程序的时候,只要稍稍一不小心(比如漏了一个分号)

use std::env;
use std::path::PathBuf;
fn main(){
    let dir = if let Some(td) = env::home_dir() {
        td.join(".config")
    } else { 
        if let Ok(td1) = env::current_dir() {
            td1.join("passwd")
        } else {
            PathBuf::new()
        }
    }
    (1+2).max(3);
}

我们得到的就是:

error[E0618]: expected function, found `std::path::PathBuf`
  --> fuckif.rs:4:15
   |
4  |        let dir = if let Some(td) = env::home_dir() {
   |   _______________^
   |  |_______________|
   | ||
5  | ||         td.join(".config")
6  | ||     } else { 
7  | ||         if let Ok(td1) = env::current_dir() {
...  ||
11 | ||         }
12 | ||     }
   | ||_____^
13 | |      (1+2).max(3);
   | |__________- call expression requires function

error: aborting due to previous error; 1 warning emitted

For more information about this error, try `rustc --explain E0618`.

我知道,如果编译成功,我们完全可以借用gdb调BUG 但问题是,Rust不总是能编译成功,有些问题实在太见鬼(比如漏分号这个) 如果没看出是漏了分号,我们根本无法调试这个程序(因为连编译都过不了)

所以我突发奇想,Rust能否像Python或者R之类的语言一样,出一个解释器呢? 毕竟,用解释器编程超级方便的。 只要解释器支持把代码一键导出到.rs文件,在实际性能上,Rust也不会有什么额外的损失(甚至,因为解释器可以顺手存储某些做过的类型检查和推导,从而加速编译时间)

想知道,Rust会不会做类似的解释器 这样的解释器在实现上又会有什么样的困难

(我有一个很好的想法,现在,就差一个程序员了[狗头])

评论区

写评论
tokyohuang123 2020-06-22 16:24

少个分好 没打 还让编译通过,你就不怕程序有bug吗

Nalleyer 2020-06-08 21:43

有人在做mun这个项目,似乎是对标lua的。可能符合楼主的需求。

不过不是rs本身解释,而是造另一门语言。

作者 Neutron3529 2020-06-06 11:58

对以下内容的回复:

多谢告知,现在就去试试

sssooonnnggg 2020-06-05 16:29

已经有了,不过是基于MIR的 https://github.com/rust-lang/miri

作者 Neutron3529 2020-06-05 15:34

对以下内容的回复:

如果提示“call expression requires function”的时候你能想到你其实漏了一个分号 编译不过也挺好

lineCode 2020-06-05 13:42

编译不过不是很好吗,一眼就看出来哪里问题

1 共 6 条评论, 1 页