「Rust」の版間の差分

提供: ArchWiki
ナビゲーションに移動 検索に移動
(→‎sccache: 同期)
189行目: 189行目:
   
 
=== sccache ===
 
=== sccache ===
[https://github.com/mozilla/sccache sccache] を使うと中間生成物をキャッシュすることで、前回のコンパイル時から変化しない部分の再コンパイル時間を省きます。{{Pkg|sccache}} パッケージで[[インストール]]できます。
 
   
  +
[https://github.com/mozilla/sccache sccache] ({{Pkg|sccache}} パッケージ) を使用すると、コンパイル時間を大幅に短縮できます。これにより、コンパイラ成果物のローカルキャッシュが維持され、最後にコンパイルされてから変更されていないコードを再コンパイルする必要がなくなります。
Cargo で利用するには以下の方法があります。
 
  +
{{ic|RUSTC_WRAPPER}} [[環境変数]]を設定することで一時的に sccache を利用できます:
 
  +
sccache を有効にするには、{{ic|RUSTC_WRAPPER}} [[環境変数]] を使用します:
RUSTC_WRAPPER=sccache cargo build
 
  +
  +
$ export RUSTC_WRAPPER=sccache
  +
$ cargo build
  +
  +
もしくは
  +
  +
$ RUSTC_WRAPPER=sccache cargo build
   
 
常に利用するようにするには、{{ic|~/.cargo/config}} に以下の設定を加えます:
 
常に利用するようにするには、{{ic|~/.cargo/config}} に以下の設定を加えます:
  +
 
{{hc|~/.cargo/config|<nowiki>
 
{{hc|~/.cargo/config|<nowiki>
 
[build]
 
[build]

2024年4月27日 (土) 05:03時点における版

関連記事

Wikipedia より引用

Rust は、Mozilla Research がスポンサーとなっている、汎用的なマルチパラダイム・コンパイル型プログラミング言語である。Rust は、"安全で、並行処理が可能で、実用的な言語" として設計されており、純粋関数型、命令型-手続き型、オブジェクト指向型のスタイルをサポートしている。Rust の目標は、高度に並行かつ高度に安全なシステムを作成し、大規模なプログラミングを行うのに適した言語となることです。そのため、安全性、メモリレイアウトの制御、並行処理に重点を置いた機能セットになっています。Rust の性能は、慣用的な C++ の性能に匹敵します。

ライブラリ

Rust コアライブラリ

Rust Core Library は何にも依存しない Rust 標準ライブラリの基礎となるライブラリです。LLVM と直接通じることで、ハードウェアに囚われないプラットフォームとして Rust を使うことができます。LLVM との緊密な統合により、Clang でコンパイルされた C アプリケーションよりも高い性能を発揮することができ、libcore で設計された Rust ソフトウェアは C よりも低レイヤーを扱うことができます。組み込み環境向けのソフトウェアを開発している場合、#![no_std] で標準ライブラリを省くことでコアライブラリだけを使うことができ、バイナリサイズを小さく、高い性能を発揮させることが可能です。ただし、#![no_std] を使用すると Rust コミュニティから取得することができる膨大なソフトウェアに制限がかかるため、大抵のライブラリは標準ライブラリを必要としています。

Rust 標準ライブラリ

Rust Standard Library は移植性の高い Rust ソフトウェアによって構成された便利な高水準の抽象ライブラリです。Vec, Iterator, Option, Result, String 型や、基本的なメソッド、大量の標準マクロ、I/O やマルチスレッドのサポート、Box によるヒープメモリ確保などの便利な機能、その他、コアライブラリに存在しない高度な機能が多数存在します。

リリースサイクル

Rust は Firefox のリリースサイクルと同じように6週間ごとに定期的にリリースされます。新しいリリースが出るたびに、コアライブラリや標準ライブラリは改善され、対応プラットフォームが新しく増えたりパフォーマンスが向上したり、あるいは新しい機能の安定化が行われます。

インストール

Rust をインストールする主な方法は次の2つです。

  • ネイティブインストール。Rust で作成されたソフトウェアの実行またはインストールにのみ Rust を使用する場合に推奨されます。
  • Rustup のインストール。Rust で何かをプログラムする場合にお勧めします。

ネイティブのインストール方法

Rust の最新安定版をインストールするには、rust パッケージをインストールしてください。rustc コンパイラと Cargo がインストールされます。

Rust コンパイラの開発バージョンも利用できます。事前に構築された汎用バイナリの場合は rust-nightly-binAUR、システム ライブラリを使用してコンパイラを構築する場合は rust-gitAUR を使って下さい。

Rustup によるインストール方法

Rust でソフトウェアを開発するときに、公式に推奨されている Rust のインストール方法は Rustup ツールチェインマネージャ を使用する方法です (Rustup は Rust で書かれています)

ソフトウェアリポジトリに存在するスタンドアロンな Rust を使用しないで、Rustup ツールチェインマネージャを使用する利点として、複数のプラットフォーム (Windows, Mac, Android) やアーキテクチャ (x86, x86_64, arm) 用に複数のツールチェイン (stable, beta, nightly) をインストールすることができる点が挙げられます。

上流のインストールスクリプト

Rustup は、の公式 Web ページ から手動でダウンロードしてインストールすることもできます。

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs -o rust.sh としてファイルをダウンロードします。そのあと、less ./rust.sh でファイルの内容を確認した上で、./rust.sh でスクリプトを実行してください。スクリプトはログインシェルの設定ファイルの PATH のみ変更します。一度ログアウトしてからログインしなおすか source $HOME/.cargo/env を実行する必要があります。その後 rustup を更新するには rustup self update を実行するだけです。

このスクリプトは、デフォルトでデフォルトのツールチェーン (rust パッケージで使用されるツールチェーン) をインストールしてアクティブ化するため、Rust の使用を開始するために手動でインストールする必要はありません。

警告: Rustup のドキュメントに書かれている、curl some-url を実行するのは、セキュリティ上のリスクがあると考えられます。ダウンロード中に壊させるかもしれない、未知のソースコードを実行するからです。従って、実行する前に、手動でダウンロードし内容を確認することが推奨されます。
ノート: rustup コマンドを実行する前に PATH に $HOME/.cargo/bin を追加してください。

Arch Linux パッケージ

rustup公式リポジトリからインストールすることもできます。公式リポジトリからインストールした場合 rustup self update は使用できないので注意してください。pacman で直接パッケージをアップデートする必要があります。

この方法だと、Rust のバイナリが ~/.cargo/bin ではなく /usr/bin にあり、PATH に別のディレクトリを加えなくてよい利点があります。

ノート: 既定では、rustup パッケージをインストールしても、ツールチェインはインストールされません。かわりに、/usr/bin/rustup コマンドから /usr/bin/rustc/usr/bin/cargo など一般的なバイナリにシンボリックリンクが張られます。次に述べるように、Rust コマンドを動作させるには、利用者が手動でツールチェインをインストールする必要があります。

ツールチェインをインストールするには、stablenightly のどちらのバージョンを使用するか rustup に指定する必要があります:

$ rustup default stable

使い方

stablebetanightly1.23.0 などのツールチェインを手動でインストールする必要があったり、また、他のツールチェインを使用したりテストするときには次のコマンドを入力します:

$ rustup toolchain install toolchain

すると、Rust コマンドを rustup run toolchain command として実行できます。これらのコマンドを直接実行するには、ツールチェインをアクティベートする必要があります:

$ rustup default toolchain

rustc -V を使って rust のバージョンを確認してください:

$ rustc -V 
rustc 1.26.0 (a77568041 2018-05-07)
ノート: Rustup は rust パッケージに含まれている Rust コマンドのうち、rustfmtrls などいくつかをインストールしません。これにより、Rust メンテナが nightly チャンネルを rustfmt/rls が壊れていても提供できるようになります。これらをインストールするには、個別に rustup component add rls および rustup component add rustfmt を実行します。また、実行することで、rustfmt/rls が壊れる場合、nightly チャンネルの更新を保留するようになります。
ノート: Rust 自身にはリンカはないので、リンカが別途インストールされてなければなりません。リンカとして例えば gcc をインストールすることができます。リンカがないと Rust は error: linker `cc` not found. とエラーを出力します。

インストールのテスト

以下のようなシンプルなプログラムをビルドして、Rust が正しくインストールされていることを確認してください:

~/hello.rs
 fn main() {
     println!("Hello, World!");
 }

rustc でコンパイルして実行することができます:

$ rustc hello.rs && ./hello
Hello, World!

クロスコンパイル

rustup を使う

rustup を使うことで簡単にクロスコンパイルができます。rustup は多数のクロスコンパイルターゲットに対応しています。対応しているプラットフォームの完全なリストは rustup target list を実行することで確認できます。

例えば、gnu コンパイラを使って Windows 用にコンパイルする stable チャンネルの rust をインストールしたい場合、以下を実行:

$ rustup install stable-x86_64-pc-windows-gnu

上記のコマンドでは、コンパイル先のアーキテクチャ用の rust とツールしかインストールされません。場合によってはクロスコンパイルするのに追加でツールが必要になる可能性があります。

Windows

このセクションでは、$ARCH がターゲットのアーキテクチャです (x86_64 または i686) Rustup を使ったクロスコンパイルの方法を解説します。

  1. mingw-w64-gccインストール
  2. rustup target add $ARCH-pc-windows-gnu を実行して、アーキテクチャ用の Rust 標準ライブラリをインストールします:
  3. 最後に、次のコードを ~/.cargo/config に追加して、MinGW-w64 gcc/ar のパスを cargo に指定します:
~/.cargo/config
[target.$ARCH-pc-windows-gnu]
linker = "/usr/bin/$ARCH-w64-mingw32-gcc"
ar = "/usr/bin/$ARCH-w64-mingw32-ar"

cargo に --target $ARCH-pc-windows-gnu と指定することで Windows 向けのクロスコンパイルができます:

$ # Build
$ cargo build --release --target "$ARCH-pc-windows-gnu"
$ # Run unit tests under wine
$ cargo test --target "$ARCH-pc-windows-gnu"

現在、MinGW 6 を使用して実行可能ファイルをビルドしていますが、rustup によってインストールされたツールチェーンが壊れています。それを修正するには、次を実行してください

for lib in crt2.o dllcrt2.o libmsvcrt.a; do cp -v /usr/x86_64-w64-mingw32/lib/$lib $HOME/.rustup/toolchains/$CHANNEL-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-pc-windows-gnu/lib/; done

ここで、CHANNEL は更新チャネル (stablebeta、または nightly) です。

非公式パッケージ

非公式の archlinuxcn リポジトリには i686, ARM, ARMv7, Windows 32, Windows 64 向けの rust-nightly と Rust 標準ライブラリが含まれています。パッケージをインストールすればクロスコンパイルができます。ただし、ARM のツールチェインは自分で用意する必要があります。32ビット版の Windows を対象にビルドする場合、実行するのに libgcc_s_dw2-1.dll (mingw-w64-gcc によって提供) が必要になります。

Cargo

Rust のパッケージマネージャである Cargorust パッケージに付属しています。ナイトリー版は AUR の cargo-nightly-binAUR でインストールできます。rustup を使用している場合、Cargo は既にインストールされています。

Cargo は Rust プロジェクトの依存関係を宣言することができるようにするツールであり、それによってビルドがいつでも通ることが保証されます。

使用方法

Cargo を使って新しいプロジェクトを作成するには:

$ cargo new hello_world 
ノート: Cargo は、プロジェクトのコンパイルに必要なすべてのメタデータを含むマニフェストとしてこの Cargo.toml を使用します。
Cargo.toml
[package]
name = "hello_world"
version = "0.1.0"
edition = "2021"

[dependencies]

ネイティブ CPU プラットフォームに最適化

Cargo に CPU プラットフォームに最適なコードで常にコンパイルするように指示するには、~/.cargo/config にフラグを追加します。生成されたバイナリは他のコンピュータで使用するために配布することはできません。また、将来 CPU を変更しようとすると、自分のシステムで失敗する可能性があります。

インストールでデフォルトで使用されるターゲットプラットフォームを確認します。

$ rustup toolchain list
stable-x86_64-unknown-linux-gnu (default)

この例では、x86_64-unknown-linux-gnu プラットフォームで stable rust を使用しています。

~/.cargo/config
[target.x86_64-unknown-linux-gnu]
rustflags = ["-C", "target-cpu=native"]

sccache

sccache (sccache パッケージ) を使用すると、コンパイル時間を大幅に短縮できます。これにより、コンパイラ成果物のローカルキャッシュが維持され、最後にコンパイルされてから変更されていないコードを再コンパイルする必要がなくなります。

sccache を有効にするには、RUSTC_WRAPPER 環境変数 を使用します:

$ export RUSTC_WRAPPER=sccache
$ cargo build

もしくは

$ RUSTC_WRAPPER=sccache cargo build

常に利用するようにするには、~/.cargo/config に以下の設定を加えます:

~/.cargo/config
[build]
rustc-wrapper = "sccache"

IDE のサポート

ツール

Rust プロジェクトの推奨ツールについては、https://www.rust-lang.org/tools を参照してください。

rust-analyzer

rust-analyzer は RLS を置き換えることを意図した Rust 用の実験的な言語サーバプロトコル実装です。

rust-analyzer パッケージとして入手でき、最新の Git バージョンは rust-analyzer-gitAUR として入手できます。あるいは、rustup がインストールされている場合は、次のコマンドで Rust-analyzer をインストールできます。

$ rustup component add rust-analyzer

rust-analyzer は標準ライブラリのソースコードを必要とします。これが存在しない場合、rust-analyzer は、rustup を使用して自動的にインストールを試みます。rustup を使用してソースコードを手動でインストールするには、次のコマンドを実行します。

$ rustup component add rust-src

Clippy

Clippy は Rust のナイトリービルドに存在するコンパイラプラグイン機能を利用して、様々なエラーや慣習的な警告を検出する文法チェックを行います。安定版の Rust コンパイラでコンパイルするときに clippy を使うことはできません。Clippy は cargo でインストールできます:

$ cargo install clippy

Rustfmt

Rustfmt は公式のスタイルガイドラインに従って Rust コードをフォーマットするツールです。

Rustfmt は rust パッケージに含まれています。rustup を使用してインストールするには

$ rustup component add rustfmt

エディタ

Emacs

Emacs の Rust サポートは公式の rust-mode プラグインで有効にできます。

GNOME Builder

GNOME Builder の Rust サポートは、Language Server Protocol を使って実現されています。デフォルトでは rust-analyzer を使用します。Rust のソースと一緒にインストールするだけです。

Helix

Helix エディタは Rust で書かれており、Rust 言語サーバープロトコルが含まれています。Helix は Neovim と Kakoune からインスピレーションを受けています。

Kate

Kate の Rust サポートは、言語サーバープロトコルを使用して実現されます。デフォルトでは rust-analyzer を使用します。必要なのは、Rust ソースと一緒にインストールすることだけです。

IntelliJ IDEA

IDEA には Rust プラグイン があります。このプラグインは CLion でも動作します。

Rustup を使用する場合は、rustup を使ってソースをダウンロード (rustup component add rust-src) して、ツールチェインのディレクトリとして ~/.rustup/toolchains/<your toolchain>/bin を選択してください。

公式 Arch Linux ソフトウェアリポジトリから Rust を使用する場合は、ツールチェーンの場所として /usr/bin を選択し、stdlib ソースの場所として /usr/lib/rustlib/src/rust/library/ を選択します。

Visual Studio Code

VSCode の Rust のサポートは Rust 拡張をインストールすることで得られます。

Rust の Visual Studio Code サポートは、matklad.rust-analyzer 拡張機能を備えた rust-analyzer を介して取得できます。

Vim

Rust の Vim サポートは、公式の rust.vim プラグインを介して取得できます。このプラグインは、ファイルの検出、シンタックスハイライト、フォーマット、シンタックスチェックプラグイン Syntastic のサポートを提供します。coc (https://github.com/neoclide/coc-rls coc.rls) や YouCompleteMe のように、多くの補完エンジンが Rust をサポートしています。

参照