Rust チュートリアル
Rustを使い始める
サーチ…
備考
Rustは安全性、スピード、並行性を考慮して設計されたシステムプログラミング言語です。 Rustには、データ競合や一般的なバグを回避するためのコンパイル時の機能と安全性チェックが数多くあり、実行時のオーバーヘッドが最小からゼロまであります。
バージョン
安定
バージョン | 発売日 |
---|---|
1.17.0 | 2017-04-27 |
1.16.0 | 2017-03-16 |
1.15.1 | 2017-02-09 |
1.15.0 | 2017-02-02 |
1.14.0 | 2016-12-22 |
1.13.0 | 2016-11-10 |
1.12.1 | 2016-10-20 |
1.12.0 | 2016-09-30 |
1.11.0 | 2016-08-18 |
1.10.0 | 2016-07-07 |
1.9.0 | 2016年5月26日 |
1.8.0 | 2016-04-14 |
1.7.0 | 2016-03-03 |
1.6.0 | 2016-01-21 |
1.5.0 | 2015-12-10 |
1.4.0 | 2015-10-29 |
1.3.0 | 2015-09-17 |
1.2.0 | 2015-08-07 |
1.1.0 | 2015-06-25 |
1.0.0 | 2015-05-15 |
ベータ
バージョン | 発売予定日 |
---|---|
1.18.0 | 2017-06-08 |
printlnの高度な使い方!
println!
(そしてその兄弟、 print!
)は、他の多くの言語で見られるprintf
ファミリーと同様に、動的なデータを含むテキストを生成し、印刷するための便利なメカニズムを提供します。最初の引数はフォーマット文字列で、他の引数をテキストとしてどのように出力するかを指定します。書式文字列には、置換が行われることを指定するためのプレースホルダ( {}
囲まれた)が含まれている場合があります。
// No substitution -- the simplest kind of format string
println!("Hello World");
// Output: Hello World
// The first {} is substituted with a textual representation of
// the first argument following the format string. The second {}
// is substituted with the second argument, and so on.
println!("{} {} {}", "Hello", true, 42);
// Output: Hello true 42
この時点で、あなたは質問しているかもしれません:どのようにprintln!
ブール値true
を文字列 "true"として出力することを知っていますか? {}
は、実際には、 Display
特性を使用して値をテキストに変換する必要があることをフォーマッタに指示します。この特性は、ほとんどのプリミティブなRustタイプ(文字列、数値、ブール値など)に対して実装されており、「ユーザ向け出力」を目的としています。したがって、42という数字は、内部でどのように格納されるかというバイナリではなく、42として10進数で表示されます。
たとえば、Slices( [i32]
)、ベクトル( Vec<i32>
)、またはオプション( Option<&str>
)のような、 Display
実装していないタイプを印刷するにはどうすればよいですか?これらのテキストには、ユーザが直面している明確なテキスト表現はありません。このような値の印刷を容易にするため、RustにはDebug
特性と対応する{:?}
プレースホルダもあります。ドキュメントから: " Debug
は、プログラマー向きのデバッグコンテキストで出力をフォーマットする必要があります。"いくつかの例を見てみましょう:
println!("{:?}", vec!["a", "b", "c"]);
// Output: ["a", "b", "c"]
println!("{:?}", Some("fantastic"));
// Output: Some("fantastic")
println!("{:?}", "Hello");
// Output: "Hello"
// Notice the quotation marks around "Hello" that indicate
// that a string was printed.
Debug
には、組み込みのきれいな印刷メカニズムがあります。これはコロンの後に#
修飾子を使用して有効にすることができます:
println!("{:#?}", vec![Some("Hello"), None, Some("World")]);
// Output: [
// Some(
// "Hello"
// ),
// None,
// Some(
// "World"
// )
// ]
書式文字列を使用すると、かなり複雑な置換を表現できます。
// You can specify the position of arguments using numerical indexes.
println!("{1} {0}", "World", "Hello");
// Output: Hello World
// You can use named arguments with format
println!("{greeting} {who}!", greeting="Hello", who="World");
// Output: Hello World
// You can mix Debug and Display prints:
println!("{greeting} {1:?}, {0}", "and welcome", Some(42), greeting="Hello");
// Output: Hello Some(42), and welcome
println!
また、実行時にクラッシュするのではなく、動作しないものを実行しようとしている場合は、友人も警告します。
// This does not compile, since we don't use the second argument.
println!("{}", "Hello World", "ignored");
// This does not compile, since we don't give the second argument.
println!("{} {}", "Hello");
// This does not compile, since Option type does not implement Display
println!("{}", Some(42));
彼らの中核となるRust印刷マクロは、 format!
取り巻くラッパーformat!
マクロを使用すると、異なるデータ値のテキスト表現をつなぎ合わせて文字列を構築できます。したがって、上のすべての例では、 println!
format!
書式設定された文字列を印刷するのではなく格納します。
let x: String = format!("{} {}", "Hello", 42);
assert_eq!(x, "Hello 42");
マクロなしのコンソール出力
// use Write trait that contains write() function
use std::io::Write;
fn main() {
std::io::stdout().write(b"Hello, world!\n").unwrap();
}
std::io::Write
特性は、バイトストリームを受け入れるオブジェクト用に設計されています。この場合、標準出力へのハンドルはstd::io::stdout()
取得されます。Write::write()
は、バイト文字列リテラル(b"<string>"
)で作成されたバイトスライス(&[u8]
Write::write()
受け入れます。Write::write()
は、書き込まれたバイト数(成功時)またはエラー値(失敗時)のいずれかを含むResult<usize, IoError>
返します。Result::unwrap()
の呼び出しは、呼び出しが成功すると予想されることを示し(Result<usize, IoError> -> usize
)、値は破棄されます。
最小の例
従来のHello WorldプログラムをRustにhello.rs
は、次のソースコードを含むhello.rs
というテキストファイルを作成します。
fn main() {
println!("Hello World!");
}
これは、 main
という新しい関数を定義します。この関数は、パラメータを取らず、データも返しません。これは実行時にプログラムの実行を開始する場所です。その中にはprintln!
これは、コンソールにテキストを印刷するマクロです。
バイナリアプリケーションを生成するには、ソースファイルの名前を渡してRustコンパイラを呼び出します。
$ rustc hello.rs
生成された実行ファイルは、メインソースモジュールと同じ名前になります。そのため、LinuxまたはMacOSシステムでプログラムを実行するには、次のコマンドを実行します。
$ ./hello Hello World!
Windowsシステムでは、次のコマンドを実行します。
C:\Rust> hello.exe Hello World!
入門
インストール
Rustプログラミング言語を使って何かできるようになる前に、Windowsのために、あるいはUNIXのようなシステム上で端末を使って、 $
を入力する必要があります。
$ curl https://sh.rustup.rs -sSf | sh
これにより、必要なファイルが検索され、現在使用しているシステムに関係なく、Rustの最新バージョンが設定されます。詳細については、 プロジェクトページを参照してください 。
注:一部のLinuxディストリビューション(例えば、 Arch Linux )は、パッケージとしてrustup
を提供しますが、代わりにインストールすることができます。多くのUnixライクなシステムが提供するもののおよびrustc
とcargo
別々のパッケージとして、まだ使用することをお勧めしますrustup
それははるかに簡単に複数のリリースチャネルを管理し、クロスコンパイルを行うことが可能ので、代わりに。
錆コンパイラ
UNIXの場合はターミナルで、Windowsの場合はコマンドプロンプトで次のコマンドを実行することで、 Rustが実際に正常にインストールされたかどうかを確認できます。
$ rustc --version
このコマンドが成功すると、私たちのコンピュータにインストールされているRustのコンパイラのバージョンが目の前に表示されます。
貨物
RustはRustパッケージとプロジェクトを管理するためのビルドツールであるCargoを使用しています。これもあなたのコンピュータにも存在することを確認するには、コンソール・コンソールの中で、実行中のシステムに応じて、ターミナルまたはコマンド・プロンプトを参照して次のコマンドを実行します。
$ cargo --version
Rustコンパイラと同等のコマンドと同じように、これはCargoの現在のバージョンを返して表示します。
あなたの最初の貨物のプロジェクトを作成するには、に向かうかもしれ貨物 。
あるいは、 Minimalの例に示すように、 rustc
を使用してプログラムを直接コンパイルすることもできます。