コンパイルはする。
crystal run や go run や rdmd や runghc のやうに、事前ビルドのコマンドを走らせる事無くインタープリタのやうに實行する機能が Rust には無いらしいので自作した。
#!ruby -rdigest/sha2 o="/tmp/#{Digest::SHA512.file __FILE__}-#{File.basename __FILE__}";IO.popen(["rustc","-","-o",o],"r+"){|io|io.write DATA.read}unless File.exist? o;system o,*ARGV __END__ // Rustコード
Rust です(〃l _ l)
このやうにして、
#!ruby -rdigest/sha2 o="/tmp/#{Digest::SHA512.file __FILE__}-#{File.basename __FILE__}";IO.popen(["rustc","-","-o",o],"r+"){|io|io.write DATA.read}unless File.exist? o;system o,*ARGV __END__ use std::env; fn main() { let args: Vec<String> = env::args().collect(); println!("Hello World! {}", args[1]); }
./sample.rs momonga
として使へる。
標準ライブラリが充實してゐる事を願ふ。
追記 20161028
毎回 Rust コードにコピペするのは面倒なので矢張り外部スクリプトにした。此れ
#!/usr/bin/env ruby -rdigest/sha2 -rtmpdir o = File.join Dir.tmpdir, "#{Digest::SHA512.file ARGV[0]}-#{File.basename ARGV[0]}" IO.popen(['rustc', '-', '-o', o], 'r+') { |io| io.write IO.read(ARGV[0], encoding: Encoding::UTF_8) } unless File.exist? o system o, *ARGV[1..-1]
を rust-run 等の名で PATH の通ったディレクトリに保存し、
#!/usr/bin/env rust-run fn main() { println!("Hello World!"); }
とすれば使へる。