Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

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.


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!




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: