Install
$ curl -sSf https://static.rust-lang.org/rustup.sh | sh
確認
$ rustc --version
rustc 1.9.0 (e4e8b6668 2016-05-18)
$ cargo --version
cargo 0.10.0-nightly (10ddd7d 2016-04-08)
Editorの機能を使うためにソースコードもダウンロードします。
https://www.rust-lang.org/downloads.html
ここからsourceをクリックしてダウンロードします。
ダウンロードしたら解凍した後に適当な場所へ移動します。
$ mkdir -p /usr/local/src
$ mv ~/Downloads/rustc-1.9 /usr/local/src
Editor
個人的な好みでVisual Studio Code(以下VSC)を使います。
Golang,PythonもVSCで書いてますが拡張が使いやすいのでオススメです。
他のEditor使いたい場合は調べてください・・・!
ext installで拡張Rusty Codeのinstall
racerのinstall
$ cargo install racer
(3~5分かかります...)
RUST_SRC_PATHに先ほどダウンロードしたソースコードのPATHを指定します。
export RUST_SRC_PATH=/usr/local/src/rustc-1.9/src
動作確認します。
$ racer complete std::io::B
MATCH BufReader,48,11,/usr/local/src/rustc-1.9.0/src/libstd/io/buffered.rs,Struct,pub struct BufReader<R>
MATCH BufWriter,300,11,/usr/local/src/rustc-1.9.0/src/libstd/io/buffered.rs,Struct,pub struct BufWriter<W: Write>
MATCH BufRead,1200,10,/usr/local/src/rustc-1.9.0/src/libstd/io/mod.rs,Trait,pub trait BufRead: Read
MATCH Bytes,1528,11,/usr/local/src/rustc-1.9.0/src/libstd/io/mod.rs,Struct,pub struct Bytes<R>
rustfmtのinstall
$ cargo install rustfmt
(3~5分かかります...)
動作確認用にコード用意します。
$ cd /path/to/develop/rust
$ cargo new hello_world --bin
$ cd hello_world;code ./
(codeでVSC開く設定をしていない場合は普通に開いてください)
hello_world/srcに以下のコードが生成されているはずです。
fn main() {
println!("Hello, World!");
}
動作確認します。
$ cargo fmt
(何も出力されなければOK)
editorを開いたまま⌘ + ,で`setting.jsonを編集します。
{
//-------- Rust configuration
"rust.racerPath": "$HOME/.cargo/bin/racer",
"rust.rustLangSrcPath": "/usr/local/src/rustc-1.9.0/src",
"rust.rustfmtPath": "$HOME/.cargo/bin/rustfmt",
"rust.cargoPath": "/usr/local/bin/cargo",
"rust.cargoHomePath": null, // Path to Cargo home directory, mostly needed for racer. Needed only if using custom rust installation.
"rust.formatOnSave": false, // Turn on/off autoformatting file on save (EXPERIMENTAL)
"rust.checkOnSave": false, // Turn on/off `cargo check` project on save (EXPERIMENTAL)
"rust.checkWith": "build" // Specifies the linter to use. (EXPERIMENTAL)
}
ここまでで標準crateのautocompleteが聞くようになると思います。
コードに依存しているcrateもuser hogehoge::HOGEまで書けばautocomplete聞いているように感じます。
他のcrateを使用する場合
cargoというpackage managerを使用していきます。
cargo newをした場合、Cargo.tomlが生成されるのでこれを編集します。
[package]
name = "hello_world"
version = "0.1.0"
authors = [""]
// 追加
[dependencies]
time = "0.1.35"
regex = "0.1.71"
cargo buildして依存しているcrateをダウンロードします。
割と時間かかるのがネックですねー・・・
パッケージを使用して先ほどのコードを修正します。
extern crate regex;
extern crate time;
use regex::Regex;
fn main() {
let re = Regex::new(r"^\d{4}-\d{2}-\d{2}$").unwrap();
println!("Did you date match? {}", re.is_match("2016-05-28"));
let now = time::now();
println!("It is {} now.", now.rfc3339());
}
実行してみます。
$ cargo run
Compiling hello_world v0.1.0
Running `target/debug/hello_world`
Did you date match? true
It is 2016-05-28T22:45:16+09:00 now.
良さそうです。
まとめ
昔よりドキュメントなども整備されているので、始め時かなと思いました。