「Rust」の版間の差分
(→ツール: Rustfmtを翻訳して追加) |
Kusanaginoturugi (トーク | 投稿記録) (→rustup を使う: コマンドを修正) |
||
(2人の利用者による、間の36版が非表示) | |||
1行目: | 1行目: | ||
[[Category:プログラミング言語]] |
[[Category:プログラミング言語]] |
||
[[en:Rust]] |
[[en:Rust]] |
||
+ | [[pt:Rust]] |
||
[[ru:Rust]] |
[[ru:Rust]] |
||
+ | [[zh-hans:Rust]] |
||
− | [http://rust-lang.org/ Rust] は驚異的に高速で、セグメンテーション違反を滅多に起こさず、スレッドとメモリの安全性が保証された、システムプログラミング言語です。 |
||
+ | {{Related articles start}} |
||
+ | {{Related|Rust パッケージガイドライン}} |
||
+ | {{Related articles end}} |
||
+ | [[Wikipedia:ja:Rust (プログラミング言語)|Wikipedia]] より引用 |
||
+ | :[https://rust-lang.org Rust] は、パフォーマンス、型安全性、および並行性を重視する多パラダイム、汎用プログラミング言語です。ガベージコレクターなしでメモリ安全性を強制します。つまり、すべての参照が有効なメモリを指しています。メモリ安全性を強制し、データ競合を防ぐために、「借用チェッカ」(borrow checker) はコンパイル中にプログラム内のすべての参照のオブジェクト寿命を追跡します。Rust は、不変性、高階関数、代数的データ型を含む関数型プログラミングのアイデアの影響を受けています。システムプログラミングに人気があります。 |
||
− | == ラ |
+ | == コアランゲージ == |
=== Rust コアライブラリ === |
=== Rust コアライブラリ === |
||
− | [https://doc.rust-lang.org/core/ Rust Core Library] は何にも依存しない Rust 標準ライブラリの基礎となるライブラリです。LLVM と直接通じることで、ハードウェアに囚われないプラットフォームとして Rust を使うことができます。LLVM との緊密な統合により、Clang でコンパイルされた C アプリケーションよりも高い性能を発揮することができ、libcore で設計された Rust ソフトウェアは C よりも低レイヤーを扱うことができます。組み込み環境向けのソフトウェアを開発している場合、{{ic|#![no_std]}} で標準ライブラリを省くことでコアライブラリだけを使うことができ、バイナリサイズを小さく、高い性能を発揮させることが可能です。ただし、{{ic|#![no_std]}} を使用すると Rust コミュニティから |
+ | [https://doc.rust-lang.org/core/ Rust Core Library] は何にも依存しない Rust 標準ライブラリの基礎となるライブラリです。LLVM と直接通じることで、ハードウェアに囚われないプラットフォームとして Rust を使うことができます。LLVM との緊密な統合により、Clang でコンパイルされた C アプリケーションよりも高い性能を発揮することができ、libcore で設計された Rust ソフトウェアは C よりも低レイヤーを扱うことができます。{{ic|Option}}, {{ic|Result}}, および {{ic|Iterator}} など、基本的なプラットフォーム非依存型のみを含んでいます。組み込み環境向けのソフトウェアを開発している場合、{{ic|#![no_std]}} で標準ライブラリを省くことでコアライブラリだけを使うことができ、バイナリサイズを小さく、高い性能を発揮させることが可能です。ただし、{{ic|#![no_std]}} を使用すると、標準ライブラリを要求するライブラリが多数あるため、より広い Rust コミュニティから得られるソフトウェアサポートが限られます。 |
=== Rust 標準ライブラリ === |
=== Rust 標準ライブラリ === |
||
19行目: | 25行目: | ||
== インストール == |
== インストール == |
||
+ | |||
+ | Rust をインストールする主な方法は次の2つです。 |
||
+ | |||
+ | * ネイティブインストール。Rust で作成されたソフトウェアの実行またはインストールにのみ Rust を使用する場合に推奨されます。 |
||
+ | * Rustup のインストール。Rust で何かをプログラムする場合にお勧めします。 |
||
=== ネイティブのインストール方法 === |
=== ネイティブのインストール方法 === |
||
24行目: | 35行目: | ||
Rust の最新安定版を[[インストール]]するには、{{Pkg|rust}} パッケージを[[インストール]]してください。{{ic|rustc}} コンパイラと [[Cargo]] がインストールされます。 |
Rust の最新安定版を[[インストール]]するには、{{Pkg|rust}} パッケージを[[インストール]]してください。{{ic|rustc}} コンパイラと [[Cargo]] がインストールされます。 |
||
− | Rust コンパイラの開発 |
+ | Rust コンパイラの開発バージョンも利用できます。事前に構築された汎用バイナリの場合は {{AUR|rust-nightly-bin}}、システム ライブラリを使用してコンパイラを構築する場合は {{AUR|rust-git}} を使って下さい。 |
=== Rustup によるインストール方法 === |
=== Rustup によるインストール方法 === |
||
− | Rust でソフトウェアを開発するときに、公式に推奨されている Rust のインストール方法は [https://www.rustup.rs/ Rustup ツールチェインマネージャ] を使用する方法です (Rustup は Rust で書かれています) |
+ | Rust でソフトウェアを開発するときに、公式に推奨されている Rust のインストール方法は [https://www.rustup.rs/ Rustup ツールチェインマネージャ] を使用する方法です (Rustup は Rust で書かれています) |
ソフトウェアリポジトリに存在するスタンドアロンな Rust を使用しないで、Rustup ツールチェインマネージャを使用する利点として、複数のプラットフォーム (Windows, Mac, Android) やアーキテクチャ (x86, x86_64, arm) 用に複数のツールチェイン (stable, beta, nightly) をインストールすることができる点が挙げられます。 |
ソフトウェアリポジトリに存在するスタンドアロンな Rust を使用しないで、Rustup ツールチェインマネージャを使用する利点として、複数のプラットフォーム (Windows, Mac, Android) やアーキテクチャ (x86, x86_64, arm) 用に複数のツールチェイン (stable, beta, nightly) をインストールすることができる点が挙げられます。 |
||
− | |||
− | ==== 上流のインストールスクリプト ==== |
||
− | |||
− | {{ic|curl --proto '<nowiki>=</nowiki>https' --tlsv1.2 -sSf <nowiki>https://sh.rustup.rs</nowiki> -o rust.sh}} としてファイルをダウンロードします。そのあと、{{ic|less ./rust.sh}} でファイルの内容を確認した上で、{{ic|./rust.sh}} でスクリプトを実行してください。スクリプトはログインシェルの[[Bash#実行|設定ファイル]]の PATH のみ変更します。一度ログアウトしてからログインしなおすか {{ic|source $HOME/.cargo/env}} を実行する必要があります。rustup をアップデート {{ic|rustup self update}} を実行するだけです。 |
||
− | |||
− | {{Warning|[https://rustup.rs/ Rustup] のドキュメントに書かれている、{{ic|curl ''some-url'' | sh}} を実行するのは、セキュリティ上のリスクがあると考えられます。ダウンロード中に壊れさえするかもしれない、未知のソースコードを実行するからです。従って、実行する前に、手動でダウンロードし内容を確認することが推奨されます。}} |
||
− | |||
− | {{Note|{{ic|rustup}} コマンドを実行する前に PATH に {{ic|$HOME/.cargo/bin}} を追加してください。}} |
||
==== Arch Linux パッケージ ==== |
==== Arch Linux パッケージ ==== |
||
54行目: | 57行目: | ||
</nowiki>}} |
</nowiki>}} |
||
+ | ==== 上流のインストールスクリプト ==== |
||
− | ==== 使い方 ==== |
||
+ | ''Rustup'' は、[https://rustup.rs/rustup 公式 Web ページ]から手動でダウンロードしてインストールすることもできます。 |
||
− | {{ic|stable}}、{{ic|beta}}、{{ic|nightly}} や {{ic|1.23.0}} などのツールチェインを手動でインストールする必要があったり、また、他のツールチェインを使用したりテストするときには次のコマンドを入力します: |
||
+ | |||
+ | {{ic|curl --proto '<nowiki>=</nowiki>https' --tlsv1.2 -sSf <nowiki>https://sh.rustup.rs</nowiki> -o rust.sh}} としてファイルをダウンロードします。そのあと、{{ic|less ./rust.sh}} でファイルの内容を確認した上で、{{ic|./rust.sh}} でスクリプトを実行してください。スクリプトはログインシェルの[[Bash#実行|設定ファイル]]の PATH のみ変更します。一度ログアウトしてからログインしなおすか {{ic|source $HOME/.cargo/env}} を実行する必要があります。その後 rustup を更新するには {{ic|rustup self update}} を実行するだけです。 |
||
+ | |||
+ | このスクリプトは、デフォルトでデフォルトのツールチェーン ({{Pkg|rust}} パッケージで使用されるツールチェーン) をインストールしてアクティブ化するため、Rust の使用を開始するために手動でインストールする必要はありません。 |
||
+ | |||
+ | {{Warning|[https://rustup.rs/ Rustup] のドキュメントに書かれている、{{ic|curl ''some-url'' {{!}} sh}} を実行するのは、セキュリティ上のリスクがあると考えられます。ダウンロード中に壊させるかもしれない、未知のソースコードを実行するからです。従って、実行する前に、手動でダウンロードし内容を確認することが推奨されます。}} |
||
+ | |||
+ | {{Note|{{ic|rustup}} コマンドを実行する前に PATH に {{ic|$HOME/.cargo/bin}} を追加してください。}} |
||
+ | |||
+ | ==== 使用方法 ==== |
||
+ | |||
+ | ツールチェーン (例: {{ic|stable}}、{{ic|beta}}、{{ic|nightly}}、または {{ic|1.58.0}}) を手動でインストールする必要があるかもしれません。別のツールチェーンを使用/テストする場合にもこの作業が必要です。 |
||
$ rustup toolchain install ''toolchain'' |
$ rustup toolchain install ''toolchain'' |
||
− | + | Rust コマンドを {{ic|rustup run ''toolchain'' ''command''}} として実行できます。これらのコマンドを直接実行するには、ツールチェインをアクティベートする必要があります: |
|
+ | |||
− | $ rustup default toolchain |
||
+ | $ rustup default ''toolchain'' |
||
{{ic|rustc -V}} を使って rust のバージョンを確認してください: |
{{ic|rustc -V}} を使って rust のバージョンを確認してください: |
||
− | {{hc|$ rustc -V | |
+ | {{hc|$ rustc -V | |
− | rustc 1. |
+ | rustc 1.58.0 (02072b482 2022-01-11) |
+ | }} |
||
− | </nowiki>}} |
||
− | |||
− | {{Note|Rustup は {{Pkg|rust}} パッケージに含まれている Rust コマンドのうち、{{ic|rustfmt}} や {{ic|rls}} などいくつかをインストールしません。これにより、Rust メンテナが nightly チャンネルを {{ic|rustfmt}}/{{ic|rls}} が壊れていても提供できるようになります。これらをインストールするには、個別に {{ic|rustup component add rls}} および {{ic|rustup component add rustfmt}} を実行します。また、実行することで、{{ic|rustfmt}}/{{ic|rls}} が壊れる場合、nightly チャンネルの更新を保留するようになります。}} |
||
{{Note|Rust 自身にはリンカはないので、リンカが別途インストールされてなければなりません。リンカとして例えば {{Pkg|gcc}} をインストールすることができます。リンカがないと Rust は {{ic|error: linker `cc` not found.}} とエラーを出力します。}} |
{{Note|Rust 自身にはリンカはないので、リンカが別途インストールされてなければなりません。リンカとして例えば {{Pkg|gcc}} をインストールすることができます。リンカがないと Rust は {{ic|error: linker `cc` not found.}} とエラーを出力します。}} |
||
95行目: | 109行目: | ||
例えば、gnu コンパイラを使って Windows 用にコンパイルする stable チャンネルの rust をインストールしたい場合、以下を実行: |
例えば、gnu コンパイラを使って Windows 用にコンパイルする stable チャンネルの rust をインストールしたい場合、以下を実行: |
||
+ | $ rustup toolchain install stable-x86_64-pc-windows-gnu |
||
− | {{bc|<nowiki> |
||
− | $ rustup install stable-x86_64-pc-windows-gnu |
||
− | </nowiki>}} |
||
上記のコマンドでは、コンパイル先のアーキテクチャ用の rust とツールしかインストールされません。場合によってはクロスコンパイルするのに追加でツールが必要になる可能性があります。 |
上記のコマンドでは、コンパイル先のアーキテクチャ用の rust とツールしかインストールされません。場合によってはクロスコンパイルするのに追加でツールが必要になる可能性があります。 |
||
103行目: | 115行目: | ||
=== Windows === |
=== Windows === |
||
− | このセクションでは、{{ic|$ARCH}} がターゲットのアーキテクチャです ({{ic|x86_64}} または {{ic|i686}})。 |
+ | このセクションでは、{{ic|$ARCH}} がターゲットのアーキテクチャです ({{ic|x86_64}} または {{ic|i686}}) Rustup を使ったクロスコンパイルの方法を解説します。 |
+ | |||
+ | # {{Pkg|mingw-w64-gcc}} を [[インストール]] |
||
+ | # {{ic|rustup target add $ARCH-pc-windows-gnu}} を実行して、アーキテクチャ用の Rust 標準ライブラリをインストールします: |
||
+ | # 最後に、次のコードを {{ic|~/.cargo/config}} に追加して、MinGW-w64 gcc/ar のパスを cargo に指定します: |
||
− | # {{AUR|mingw64-w64-gcc-base}}{{Broken package link|パッケージが存在しません}} と {{Pkg|mingw-w64-gcc}} と {{Pkg|wine}} を[[インストール]]。 |
||
− | # rustup を使っている場合、{{ic|rustup install stable-$ARCH-pc-windows-gnu}} と {{ic|rustup target add $ARCH-pc-windows-gnu}} を実行することで rust と標準ライブラリをインストールできます。rustup を使っていない場合、rustlib ディレクトリ ({{AUR|rust-nightly-bin}} を使用する場合は {{ic|/usr/local/lib/rustlib}}、公式の {{Pkg|rust}} パッケージを使用する場合は {{ic|/usr/lib/rustlib}}) に Windows 用の Rust の標準ライブラリのコピーをインストールします。一番簡単な方法は、ターゲットとするアーキテクチャの Windows 用の Rust インストーラーをダウンロードして、Wine を使ってインストール ({{ic|wine start my-rust-installer.msi}}) してから rustlib ディレクトリにコピー {{ic|$INSTALL_DIR/bin/rustlib/$ARCH-pc-windows-gnu}} する方法です。 |
||
− | # 最後に、cargo の設定ファイルに以下を追加して MinGW-w64 の gcc/ar のパスを cargo に指定します: |
||
{{hc|~/.cargo/config|<nowiki> |
{{hc|~/.cargo/config|<nowiki> |
||
[target.$ARCH-pc-windows-gnu] |
[target.$ARCH-pc-windows-gnu] |
||
linker = "/usr/bin/$ARCH-w64-mingw32-gcc" |
linker = "/usr/bin/$ARCH-w64-mingw32-gcc" |
||
− | ar = "/usr/$ARCH-w64-mingw32 |
+ | ar = "/usr/bin/$ARCH-w64-mingw32-ar" |
</nowiki>}} |
</nowiki>}} |
||
cargo に {{ic|--target $ARCH-pc-windows-gnu}} と指定することで Windows 向けのクロスコンパイルができます: |
cargo に {{ic|--target $ARCH-pc-windows-gnu}} と指定することで Windows 向けのクロスコンパイルができます: |
||
+ | |||
− | {{bc|<nowiki> |
||
− | $ # Build |
+ | $ # Build |
− | $ cargo build --release --target "$ARCH-pc-windows-gnu" |
+ | $ cargo build --release --target "$ARCH-pc-windows-gnu" |
− | $ # Run unit tests under wine |
+ | $ # Run unit tests under wine |
− | $ cargo test --target "$ARCH-pc-windows-gnu" |
+ | $ cargo test --target "$ARCH-pc-windows-gnu" |
+ | |||
− | </nowiki>}} |
||
+ | 現在、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 |
||
+ | |||
+ | ここで、{{ic|CHANNEL}} は更新チャネル ({{ic|stable}}、{{ic|beta}}、または {{ic|nightly}}) です。 |
||
=== 非公式パッケージ === |
=== 非公式パッケージ === |
||
− | [[非公式ユーザーリポジトリ#archlinuxcn|非公式の archlinuxcn リポジトリ]]には i686, ARM, ARMv7, Windows 32, Windows 64 向けの rust-nightly と Rust 標準ライブラリが含まれています。パッケージをインストールすればクロスコンパイルができます。ただし、ARM のツールチェインは自分で用意する必要があります。32ビット版の Windows を対象にビルドする場合、実行するのに {{ic|libgcc_s_dw2-1.dll}} が必要になります。 |
+ | [[非公式ユーザーリポジトリ#archlinuxcn|非公式の archlinuxcn リポジトリ]]には i686, ARM, ARMv7, Windows 32, Windows 64 向けの rust-nightly と Rust 標準ライブラリが含まれています。パッケージをインストールすればクロスコンパイルができます。ただし、ARM のツールチェインは自分で用意する必要があります。32ビット版の Windows を対象にビルドする場合、実行するのに {{ic|libgcc_s_dw2-1.dll}} ({{Pkg|mingw-w64-gcc}} によって提供) が必要になります。 |
== Cargo == |
== Cargo == |
||
135行目: | 153行目: | ||
Cargo を使って新しいプロジェクトを作成するには: |
Cargo を使って新しいプロジェクトを作成するには: |
||
− | {{bc|$ cargo new hello_world --bin}} |
||
+ | $ cargo new hello_world |
||
− | {{Note|Cargo がプロジェクトをコンパイルするのに必要なメタデータを全て含めたマニフェストファイルである {{ic|Cargo.toml}} ファイルを Cargo は使用します: |
||
+ | |||
− | {{hc|head=Cargo.toml| |
||
+ | {{Note|Cargo は、プロジェクトのコンパイルに必要なすべてのメタデータを含むマニフェストとしてこの {{ic|Cargo.toml}} を使用します。 |
||
− | output=[package] |
||
+ | |||
+ | {{hc|Cargo.toml|output= |
||
+ | [package] |
||
name = "hello_world" |
name = "hello_world" |
||
version = "0.1.0" |
version = "0.1.0" |
||
+ | edition = "2021" |
||
− | authors = ["Your Name <you@example.com>"] |
||
+ | |||
+ | [dependencies] |
||
}} |
}} |
||
}} |
}} |
||
+ | |||
+ | === ネイティブ CPU プラットフォームに最適化 === |
||
+ | |||
+ | Cargo に CPU プラットフォームに最適なコードで常にコンパイルするように指示するには、{{ic|~/.cargo/config}} にフラグを追加します。生成されたバイナリは他のコンピュータで使用するために配布することはできません。また、将来 CPU を変更しようとすると、自分のシステムで失敗する可能性があります。 |
||
+ | |||
+ | インストールでデフォルトで使用されるターゲットプラットフォームを確認します。 |
||
+ | |||
+ | {{hc|$ rustup toolchain list| |
||
+ | stable-x86_64-unknown-linux-gnu (default) |
||
+ | }} |
||
+ | |||
+ | この例では、{{ic|x86_64-unknown-linux-gnu}} プラットフォームで {{ic|stable}} rust を使用しています。 |
||
+ | |||
+ | {{hc|~/.cargo/config|<nowiki> |
||
+ | [target.x86_64-unknown-linux-gnu] |
||
+ | rustflags = ["-C", "target-cpu=native"] |
||
+ | </nowiki>}} |
||
=== 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] |
||
163行目: | 209行目: | ||
=== ツール === |
=== ツール === |
||
+ | Rust プロジェクトの推奨ツールについては、https://www.rust-lang.org/tools を参照してください。 |
||
− | ==== RLS ==== |
||
+ | ==== rust-analyzer ==== |
||
− | [https://github.com/rust-lang/rls RLS] は Rust 用の [https://microsoft.github.io/language-server-protocol/ Language Server Protocol] を提供し, IDE やエディタなどのツールに Rust プログラムに関する情報を提供します。''goto definition'' シンボル検索、再フォーマット、コード補完などの機能をサポートし、名前の変更とリファクタリングを可能にします。 |
||
+ | [https://rust-analyzer.github.io/ rust-analyzer] は Rust の公式 Language Server Protocol 実装であり、[https://github.com/rust-lang/rls RLS] を置き換えました。 |
||
− | RLS は {{Pkg|rust}} パッケージに含まれています。rustup を使用して RLS をインストールするには |
||
+ | {{Pkg|rust-analyzer}} パッケージとして入手でき、最新の Git バージョンは {{AUR|rust-analyzer-git}} として入手できます。あるいは、{{Pkg|rustup}} がインストールされている場合は、次のコマンドで Rust-analyzer をインストールできます。 |
||
− | $ rustup component add rls rust-analysis rust-src |
||
− | + | $ rustup component add rust-analyzer |
|
− | |||
− | [https://rust-analyzer.github.io/ rust-analyzer] は RLS を置き換えることを意図した Rust 用の実験的な言語サーバプロトコル実装です。 |
||
− | |||
− | {{Pkg|rust-analyzer}} パッケージとして入手でき、最新の Git バージョンは {{AUR|rust-analyzer-git}} として入手できます。 |
||
rust-analyzer は標準ライブラリのソースコードを必要とします。これが存在しない場合、rust-analyzer は、rustup を使用して自動的にインストールを試みます。rustup を使用してソースコードを手動でインストールするには、次のコマンドを実行します。 |
rust-analyzer は標準ライブラリのソースコードを必要とします。これが存在しない場合、rust-analyzer は、rustup を使用して自動的にインストールを試みます。rustup を使用してソースコードを手動でインストールするには、次のコマンドを実行します。 |
||
$ rustup component add rust-src |
$ rustup component add rust-src |
||
− | |||
− | ==== Racer ==== |
||
− | |||
− | [https://github.com/phildawes/racer Racer] 自動補完エンジンは Rust の自動補完が必要な際に現在最も優れている選択肢です。ただし、Racer を使うには Rust のソースコードのコピーをインストールする必要があります。入手する方法は複数存在します: |
||
− | * rustup を使う: {{ic|rustup component add rust-src}}。 |
||
− | * AUR を使う: {{Aur|rust-src}}{{Broken package link|パッケージが存在しません}} または {{Aur|rust-nightly-src}}。AUR を使用する場合は {{ic|RUST_SRC_PATH}} 環境変数を設定してください。 |
||
− | ソースコードをインストールしたら、{{pkg|rust-racer}} パッケージをインストールするか、[[#Cargo|Cargo]] を使って Racer をインストールすることができます: |
||
− | |||
− | $ cargo install racer |
||
==== Clippy ==== |
==== Clippy ==== |
||
206行目: | 239行目: | ||
=== エディタ === |
=== エディタ === |
||
+ | ==== Emacs ==== |
||
− | {{Note|IDE やテキストエディタの対応状況については [https://areweideyet.com/ Are we (I)DE yet?] にも述べられています。}} |
||
+ | Emacs の Rust サポートは公式の [https://github.com/rust-lang/rust-mode rust-mode] プラグインで有効にできます。 |
||
− | ==== Atom ==== |
||
+ | ==== GNOME Builder ==== |
||
− | [[Atom]] はプラグインで Rust 言語をサポートします: [https://atom.io/packages/language-rust language-rust] と [https://atom.io/packages/linter-rust linter-rust]。 |
||
+ | |||
+ | GNOME Builder の Rust サポートは、Language Server Protocol を使って実現されています。デフォルトでは [[rust#rust-analyzer|rust-analyzer]] を使用します。Rust のソースと一緒にインストールするだけです。 |
||
+ | |||
+ | ==== Helix ==== |
||
+ | |||
+ | [[Helix]] エディタは Rust で書かれており、Rust 言語サーバープロトコルが含まれています。Helix は Neovim と Kakoune からインスピレーションを受けています。 |
||
+ | |||
+ | ==== Kate ==== |
||
+ | |||
+ | Kate の Rust サポートは、言語サーバープロトコルを使用して実現されます。デフォルトでは [[#rust-analyzer|rust-analyzer]] を使用します。必要なのは、Rust ソースと一緒にインストールすることだけです。 |
||
==== IntelliJ IDEA ==== |
==== IntelliJ IDEA ==== |
||
− | [ |
+ | [https://www.jetbrains.com/idea/IntelliJ IDEA] には [https://github.com/intellij-rust/intellij-rust Rust プラグイン] があります。このプラグインは CLion でも動作します。 |
+ | Rustup を使用する場合は、rustup を使ってソースをダウンロード ({{ic|rustup component add rust-src}}) して、ツールチェインのディレクトリとして {{ic|~/.rustup/toolchains/<your toolchain>/bin}} を選択してください。 |
||
− | ==== Visual Studio Code ==== |
||
+ | 公式 Arch Linux ソフトウェアリポジトリから Rust を使用する場合は、ツールチェーンの場所として {{ic|/usr/bin}} を選択し、stdlib ソースの場所として {{ic|/usr/lib/rustlib/src/rust/library/}} を選択します。 |
||
− | [[VSCode]] の Rust のサポートは [https://marketplace.visualstudio.com/items?itemName=kalitaalexey.vscode-rust Rust] 拡張をインストールすることで得られます。 |
||
− | ==== |
+ | ==== Jetbrains RustRover ==== |
+ | [https://www.jetbrains.com/idea/ Jetbrains] は Rust 専用の特別なエディターの開発にも取り組んでいますが、これは現在早期アクセスのみです。これは、公式 Web [https://www.jetbrains.com/rust/ ウェブサイト]または AUR の {{AUR|rustrover}} と {{AUR|rustrover-eap}} からダウンロードできます。 |
||
− | [[Vim]] による Rust のサポートは公式の [https://github.com/rust-lang/rust.vim rust.vim] プラグインで得ることができます。 |
||
− | ==== |
+ | ==== Visual Studio Code ==== |
− | + | Rust の [[Visual Studio Code]] サポートは、[https://marketplace.visualstudio.com/items?itemName=matklad.rust-analyzer matklad.rust-analyzer] 拡張機能を備えた [[#rust-analyzer|rust-analyzer]] を介して取得できます。 |
|
− | ==== |
+ | ==== Vim ==== |
+ | |||
− | |
||
+ | Rust の [[Vim]] サポートは、公式の [https://github.com/rust-lang/rust.vim rust.vim] プラグインを介して取得できます。このプラグインは、ファイルの検出、シンタックスハイライト、フォーマット、シンタックスチェックプラグイン [https://github.com/vim-syntastic/syntastic Syntastic] のサポートを提供します。[https://github.com/neoclide/coc.nvim coc] (https://github.com/neoclide/coc-rls coc.rls) や [https://github.com/ycm-core/YouCompleteMe YouCompleteMe] のように、多くの補完エンジンが Rust をサポートしています。 |
||
− | Kate support for Rust is installed by default by the {{Pkg|kate}} package, but also requires extra configurations. |
||
− | First, install the package {{Pkg|rust-racer}} |
||
− | Second, get the Rust source: |
||
− | * With rustup: {{ic|rustup component add rust-src}} |
||
− | * or From the AUR: {{Aur|rust-src-git}} or {{Aur|rust-nightly-src}}, in this case you must set the {{ic|RUST_SRC_PATH}} environment var. |
||
− | Third, configure Kate by clicking Settings -> Configure Kate, then navigate to Application -> Plugins, then tick the 'Rust code completion', then you will see Application -> Rust code completion in the left sidebar, navigation to it, and assign 'Rust source tree location' to {{ic|$HOME/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/src}} |
||
− | if you install the Rust source with rustup. |
||
== 参照 == |
== 参照 == |
||
253行目: | 290行目: | ||
* [https://rust.libhunt.com/ Awesome Rust: Rust ライブラリやリソースの精選集] |
* [https://rust.libhunt.com/ Awesome Rust: Rust ライブラリやリソースの精選集] |
||
* [[Wikipedia:ja:Rust (プログラミング言語)|Wikipedia の記事]] |
* [[Wikipedia:ja:Rust (プログラミング言語)|Wikipedia の記事]] |
||
+ | |||
+ | {{TranslationStatus|Rust|2024-05-07|806795}} |
2024年7月21日 (日) 22:58時点における最新版
関連記事
Wikipedia より引用
- Rust は、パフォーマンス、型安全性、および並行性を重視する多パラダイム、汎用プログラミング言語です。ガベージコレクターなしでメモリ安全性を強制します。つまり、すべての参照が有効なメモリを指しています。メモリ安全性を強制し、データ競合を防ぐために、「借用チェッカ」(borrow checker) はコンパイル中にプログラム内のすべての参照のオブジェクト寿命を追跡します。Rust は、不変性、高階関数、代数的データ型を含む関数型プログラミングのアイデアの影響を受けています。システムプログラミングに人気があります。
コアランゲージ
Rust コアライブラリ
Rust Core Library は何にも依存しない Rust 標準ライブラリの基礎となるライブラリです。LLVM と直接通じることで、ハードウェアに囚われないプラットフォームとして Rust を使うことができます。LLVM との緊密な統合により、Clang でコンパイルされた C アプリケーションよりも高い性能を発揮することができ、libcore で設計された Rust ソフトウェアは C よりも低レイヤーを扱うことができます。Option
, Result
, および Iterator
など、基本的なプラットフォーム非依存型のみを含んでいます。組み込み環境向けのソフトウェアを開発している場合、#![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) をインストールすることができる点が挙げられます。
Arch Linux パッケージ
rustup は公式リポジトリからインストールすることもできます。公式リポジトリからインストールした場合 rustup self update
は使用できないので注意してください。pacman で直接パッケージをアップデートする必要があります。
この方法だと、Rust のバイナリが ~/.cargo/bin
ではなく /usr/bin
にあり、PATH
に別のディレクトリを加えなくてよい利点があります。
ツールチェインをインストールするには、stable
か nightly
のどちらのバージョンを使用するか rustup に指定する必要があります:
$ rustup default stable
上流のインストールスクリプト
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 の使用を開始するために手動でインストールする必要はありません。
使用方法
ツールチェーン (例: stable
、beta
、nightly
、または 1.58.0
) を手動でインストールする必要があるかもしれません。別のツールチェーンを使用/テストする場合にもこの作業が必要です。
$ rustup toolchain install toolchain
Rust コマンドを rustup run toolchain command
として実行できます。これらのコマンドを直接実行するには、ツールチェインをアクティベートする必要があります:
$ rustup default toolchain
rustc -V
を使って rust のバージョンを確認してください:
$ rustc -V
rustc 1.58.0 (02072b482 2022-01-11)
インストールのテスト
以下のようなシンプルなプログラムをビルドして、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 toolchain install stable-x86_64-pc-windows-gnu
上記のコマンドでは、コンパイル先のアーキテクチャ用の rust とツールしかインストールされません。場合によってはクロスコンパイルするのに追加でツールが必要になる可能性があります。
Windows
このセクションでは、$ARCH
がターゲットのアーキテクチャです (x86_64
または i686
) Rustup を使ったクロスコンパイルの方法を解説します。
- mingw-w64-gcc を インストール
rustup target add $ARCH-pc-windows-gnu
を実行して、アーキテクチャ用の Rust 標準ライブラリをインストールします:- 最後に、次のコードを
~/.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
は更新チャネル (stable
、beta
、または 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 のパッケージマネージャである Cargo は rust パッケージに付属しています。ナイトリー版は AUR の cargo-nightly-binAUR でインストールできます。rustup を使用している場合、Cargo は既にインストールされています。
Cargo は Rust プロジェクトの依存関係を宣言することができるようにするツールであり、それによってビルドがいつでも通ることが保証されます。
使用方法
Cargo を使って新しいプロジェクトを作成するには:
$ cargo new hello_world
ネイティブ 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 は Rust の公式 Language Server Protocol 実装であり、RLS を置き換えました。
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/
を選択します。
Jetbrains RustRover
Jetbrains は Rust 専用の特別なエディターの開発にも取り組んでいますが、これは現在早期アクセスのみです。これは、公式 Web ウェブサイトまたは AUR の rustroverAUR と rustrover-eapAUR からダウンロードできます。
Visual Studio Code
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 をサポートしています。