2017年12月31日

Rust言語をWindows上でインストールした時のメモ 2018

Rust言語をWindows上でインストールした時のメモ 2018

はじまり
msvc版とgnu版の違い
    「Build Tools for Visual Studio 2017」(C++)
    インストールサイズ比較
gnu版がおすすめでない理由
結論
    ただし (オイ
Rustのバイナリを小さくする方法
gnu版 Rustのインストール方法
    nightly版とstable版を入れ替える方法


はじまり
C++/Cの牙城に迫る次世代言語 Rust。

実行速度比較
Rust vs C言語
https://benchmarksgame.alioth.debian.org/u64q/rust.html
Rust vs C++言語
https://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=rust&lang2=gpp
Rust vs Swift言語
https://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=rust&lang2=swift
Rust vs Go言語
https://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=rust&lang2=go
Rust vs Java言語
https://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=rust&lang2=java

Go言語をインストールしてみて、検索中に引っかかって来た言語 Rust。 (オイ
Go言語よりも実行速度が速く、単独のバイナリサイズも小さい様だ。
ていうか、Go言語の単独バイナリが少し大きめか。(注1)

Rust言語を検索中に引っかかってきた言語 Swift。
RustとSwiftは似てる感じがする。
Swiftは未調査だけど、単独バイナリが小さいならRustに並ぶか、
スマホ系サポートで一気にRustを抜いてしまう可能性もある。
ということで、
Rust言語をWindows上でインストールしてみたメモ。

インストール方法
https://www.rust-lang.org/ja-JP/install.html

msvc版とgnu版の違い
おすすめは「msvc版」。
上記トップにあるrustup-init.exeを実行するとmsvc版になる。

「Build Tools for Visual Studio 2017」(C++)
ただし、 rustup-init.exeを実行する前に、
「Build Tools for Visual Studio 2017」(C++) (2013以降なら可)
をインストールしておく必要がある。
これのサイズが約5.5GBもあってorz orz orz orz なのは確か。
orz
https://www.visualstudio.com/ja/downloads/?rr=https%3A%2F%2Fwww.rust-lang.org%2Fja-JP%2Finstall.html
上のページの、一番下から2番めあたりにある。
直リンク
https://www.visualstudio.com/ja/thank-you-downloading-visual-studio/?sku=BuildTools&rel=15

インストールサイズ比較
    msvc版のインストールサイズ 約7GB
         5.5GB : 「Build Tools for Visual Studio 2017」(C++)
         1.4GB : stable版 + nightly版
    gnu版のインストールサイズ 約1.4GB
         1.4GB : stable版 + nightly版
            インストール方法
            https://www.rust-lang.org/ja-JP/other-installers.html

gnu版がおすすめでない理由
インストールサイズが小さいので、はじめはこれを試しました。
しばらくして、以下のことがわかったので即座に使うのをやめました。

(1) Rustで書いたソース・ファイルをコンパイルした*.exeの実行速度が劇的に遅い。
        簡単な比較でpythonスクリプトよりも30倍以上低速だった。
        orz orz orz
        ありえない 遅さ。
        テキストファイル処理(ファイルI/O)が、mingw系なので遅いと推測。
        (BufReader, BufRead を使った上で)

        追記: よくあるフィボナッチ数列のベンチマークだと、
              gnu版は1/3強の速度しか出ていなかった。
(2) コンパイルされた*.exeのファイルサイズがデカい。
        Hello world プログラム($cargo build --release)で、
        gnu版   約700KB
        msvc版  約100KB

        (単独バイナリで700KBならGo言語に比べればマシなほうかもしれないが)

        ちなみに、main関数空っぽの場合、msvc版は数キロバイトの差しかないので、
        オーバヘッドが100KBくらいあることになる。

結論
よほどの理由がない限り、msvc版をインストールするべき。

ただし (オイ
ARMマイコンなのどのクロスコンパイルをするなどに特化した場合は、
gnu版でもmsvc版でも差がない可能性を否定できない。
というか試してない。
追記:
試したところ、ARMマイコン用のRustソースコードのコンパイル速度に違いはなかった。
なので、クロスコンパイル用途が主体なら軽量なgnu版でもいいかもしれない。

Rustのバイナリを小さくする方法
Windows上だと、Hello Worldで100KBくらい。
これを 151byteから2KBまで小さくする方法が以下の最後のほうのリンク先にある。
https://lifthrasiir.github.io/rustlog/why-is-a-rust-executable-large.html

151byte になるらしい。 邪道か。 未確認
http://mainisusuallyafunction.blogspot.jp/2015/01/151-byte-static-linux-binary-in-rust.html

以下を実際に試したら2KBくらいだった。
https://github.com/retep998/hello-rs/blob/master/windows/src/main.rs
    以下をgitで持ってくればできる。
    https://github.com/retep998/hello-rs

ベアメタルの組み込み用だとこういう使い方になるのだろう。

gnu版 Rustのインストール方法
最初はこれをインストールしたので、メモしておきます。(Windows10上)
インターネット接続が必要です。

(1) これをダウンロード。 保存先は多分どこでも可。
    https://static.rust-lang.org/rustup/dist/i686-pc-windows-gnu/rustup-init.exe
(2) 実行すると
rustup-init_start.png
    こうなるので 2) Customize installation を選択。
    (キーボードで2 を入力し、エンターを押す。)
(3) Default host triple? の質問に対して以下を入力してエンターする。
    (以下をコピペでもOK)
    32bitのパソコンなら
        i686-pc-windows-gnu
    64bitのパソコンなら
        x86_64-pc-windows-gnu
rustup-init_confirm.png
(4) 続いて Default toolchain? (stable/beta/nightly/none) には
    nightly と入力してエンター。
    (インストール後に、stableやbetaに切り替え可能)
(5) Modify PATH variable? (y/n) は y でエンター。
(6) 画面上に入力した内容が表示されるので、良ければ、 1を
    入力してエンターで、インストールが開始される。
    インストールには数分かかります。
(7) 以下のメッセージがでるのでウィンドウを閉じる。
rustup-init_end_message.png

(8) 環境変数 PATHにはRustの実行パスが追加されたので、
    MS-DOSコマンドプロンプトか
    PowerShell上
    でコンパイルが可能になっているはず。

    Rustツール群は
    C:/Users/[User name]/.cargo/bin
    に格納されているのでうまくいかない時は、PATH変数に上記が追加されているかを
    確認する。

(9) 動作確認
    適当なフォルダでコマンドラインを開いて
cargo new hello --bin
cargo run
と打ち込んで、 Hello World が表示されればOK。 nightly版とstable版を入れ替える方法 コマンドラインで、 stable版にしたいなら、
rustup default stable
nightly版にしたいなら、
rustup default nightly
現在の状態を確認したいなら、
rustup show
とする。
Default host: i686-pc-windows-gnu

installed toolchains
--------------------

stable-i686-pc-windows-gnu
nightly-i686-pc-windows-gnu (default)

active toolchain
----------------

nightly-i686-pc-windows-gnu (default)
(timeout reading rustc version)
上は nightlyとstableがインストールされていて、 今は nightlyがアクティブになっているという状態。 ちなみに、msvc版の時はこうなる
Default host: i686-pc-windows-msvc

installed toolchains
--------------------

stable-i686-pc-windows-msvc
nightly-2017-12-20-i686-pc-windows-msvc
nightly-i686-pc-windows-msvc (default)

active toolchain
----------------

nightly-i686-pc-windows-msvc (default)
rustc 1.25.0-nightly (6828cf901 2018-01-06)
なんかnightly版が2種類入ってる。 (注1) pythonやRubyをEXE化したものよりは断然小さいと思う。
posted by Copyright (C) avrin All Rights Reserved. at 22:38| Comment(0) | Rust言語 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。