← Back to context

Comment by dherman

2 months 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.

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
      

      ```

      1 reply →