読者です 読者をやめる 読者になる 読者になる

c4se記:さっちゃんですよ☆

.。oO(さっちゃんですよヾ(〃l _ l)ノ゙☆)

.。oO(此のblogは、主に音樂考察Programmingに分類されますよ。ヾ(〃l _ l)ノ゙♬♪♡

音樂はSoundCloud等バラバラの場所に公開中です。申し訳ないがlinkをたどるなどして探してください。

考察は現在は主に此のblogで公表中です。

programmingは、ひろくみせるものはGitHubで、個人的なものはBitBucketで開発中です。

c4se

Rustをスクリプト言語としてコンパイルせずに呼び出す

コンパイルはする。

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!");
}

とすれば使へる。