Hacker News new | ask | show | jobs
by dherman 163 days ago
Ha, I just tried the same trick with Rust:

  //$HOME/.cargo/bin/rustc "$0" && ${0%.rs} "$@" ; exit
  
  use std::env;
  
  fn main() {
      println!("hello, world!");
      for arg in env::args() {
          println!("arg: {arg}");
      }
  }
Total hack, and it litters ./ with the generated executable. But cute.
1 comments

Fortunately this hack isn't necessary for rust, shebangs are syntactically valid and single-file scripts can be executed with cargo nightly: https://doc.rust-lang.org/nightly/cargo/reference/unstable.h...
I wish this was faster, in my tests it’s about 200ms startup consistently on my M4 MacBook. Otherwise very cool
Interesting! That seems unexpected, for a minimal hello-world program I'm averaging 14ms after the first execution:

```

$ echo 'fn main() { println!("hello, world!") }' > file.rs; hyperfine --warmup 1 'cargo +nightly -Zscript file.rs'

Benchmark 1: cargo +nightly -Zscript file.rs

  Time (mean ± σ):      14.0 ms ±   1.0 ms    [User: 7.7 ms, System: 9.7 ms]

  Range (min … max):    12.2 ms …  17.5 ms    203 runs
```
Ah I think it’s because I was testing with an external library in the top level TOML metadata
Cool!