rustコンパイラ・メモ
メモ:折角試してみたので、忘れない内にメモ。今後使うかどうかは大いに疑問だけど
Rust
RustはC/C++の置き換えを目指してウェブブラウザfirefox陣営が開発したプログラミング言語です。
インタープリターではなく完全コンパイラであり、同一OS上で用いるのであれば、生成された実行形式は、別途環境を用意することなく動作させることができます。
JavaやPythonも動作環境の構築で手間取ることも多くなってきており、例えばsedではちょっと面倒かなといったツールを作ったりするのには役立ちそうです。
CでもできそうですがCはchar*というバグ製造機構があり、神経を使います。
C++は言語仕様としては素晴らしいのですが、残念ながらSTLという最悪のライブラリが、利点の全てを殺してしまいました。
ただ、現状のRustは日本語文字列の操作はほぼ不可能で、文字のベクターを別途作って作業をする必要があり、単に文字列を扱いたいだけなのに特殊なプログラムとなります。
現時点ではごく限られた用途以外では使い物になりません。
また、処理結果値の受け取り方が、極めて汚らしい構文となっていることも大きな問題です。この汚らしく混乱した記述法が今後受け入れられるような気がしません。
ファイルアクセス、文字列操作などを使う単純なツール
ファイルに置かれた次の形式の文字列
v1.21.03
名前.名前.数値
ドットで区切られた要素がならび、最後の要素は数値
の最後の数値要素をカウントアップしていく。
このプログラムでは次の操作を行います。(細かな説明は本メモ記事では省きます)
コマンド引数を文字列リストの形で得る | env::args().collect() |
リストをなめる(forは役立たず) | let mut _idx=0; while _idx < _args.len() { ... _idx += 1; } |
読み込みファイルオープン | let _file = File::open(_file_name).expect("Can't open file"); |
String初期値 | let _line:String=String::from(""); |
1行ずつ読む 結果は<Ok,Ng>構造に入る Ok(変数)=結果という混乱した文法で内容を得る |
for _result in BufReader::new(_file).lines(){ if let Ok(_line) = _result {...} } |
文字列を分割しリストを得る | let mut _numbers: Vec<&str> = _text.split('.').collect(); |
リストの最後の要素を得る | let mut _last_str:&str = _numbers.last().unwrap(); //last()の戻り値はSomeという型で、 //内容を取り出すにはunwrap()を呼ぶ |
文字列整数変換 | let mut _last_num:i32 = _last_str.parse().unwrap(); //parse()の戻り値はSomeという型で、 //内容を取り出すにはunwrap()を呼ぶ |
swicthのようなもの | match _last_str.len(){ 1 => _new_str=format!("{}" ,_last_num), 2 => _new_str=format!("{:02}",_last_num), } |
書き出しファイルオープン | let mut _out_file = File::create(_file_name).expect("Can't open file"); |
ファイル出力 | writeln!(_out_file,"{}",_new_text).expect("Can't write file"); |
インストール、コンパイル、実行
ubuntuにインストール
$ sudo curl https://sh.rustup.rs -sSf | sh
1) Proceed with installation (default)
2) Customize installation
3) Cancel installation
> 1
$ source $HOME/.cargo/env
$ rustc --version
rustc 1.54.0 (a178d0322 2021-07-26)
#-- 次のコマンドでも可能かもしれない
$ sudo apt install rustc
centOSにインストール
$ sudo yum install rust-toolset
$ rustc --version
rustc 1.52.1 (Red Hat 1.52.1-1.module_el8.4.0+883+6be8ddc6)
コンパイル/実行
コンパイルはrustcコマンドで行います。
単体mainプログラムのコンパイル結果は実行可能です。(リンクやライブラリ作成法などはここでは述べません)
$ rustc RstVrsnCount.rs # コンパイル
$ RstVrsnCount # 実行
サンプル
ソースセットを用意しました。右クリック-「名前を付けてリンクを保存」でダウンロードできます。
次のファイルから構成されています。
RstVrsnCount.rs | : | プログラム |
A01_build.sh | : | ビルド手続き |
A03_run.sh | : | 実行手続き |
A05_run.sh | : | ビルド~試験手続き |
A09_clean.sh | : | 二次ファイルの消去手続き |
RstVrsnCount.rs | : | データ(カウント文字列)ファイル |
RstVrsnCount2.rs | : | データ(カウント文字列)ファイル(2) |
ref_kekka.txt | : | 試験結果リファレンス |
感想
Rustは日本語のハンドリングが出来ないので、近代プログラミング言語としては完全に失格です。
ポリコレ連中はこういう文化差別的な言語仕様こそ問題にすべきです。
RubyやPythonといったオチャラケ言語と違って変数名を書き間違えるとちゃんとコンパイラが検出してくれる所は大いに評価できます。
| 固定リンク