信州大学のkstmと言うサークルに所属している@wanimaru47です。
本記事は信州大学 kstm Advent Calendar 2017 4日目です。
Rustであれこれ
この記事では、Rustであれこれしてみたメモしたものです。
ネットを漁ればいくらでも出てくるネタなので、新規性なくてすいません。
大学の講義のTA(Teaching Assistant)をやっている関係で、学部生と同じ課題を取り組むことになりました。そこで、学部生とは違う言語で課題をクリアしようというのが動機です。講義内容は、ゲームAIを実装するような中規模?!開発を目的としています。学部生の良い対戦?練習?相手になれるよう、ただいま絶賛開発途中なので、その過程で調べたことをまとめようと思います。
Socket通信
まず、ゲームAIを実装するに当たって重要なのは、他のAIと対戦できるようなネットワークです。幸いにもすでにサーバ側は、講義の担当教員によって実装されています。そのサーバに接続するために、Socket通信を使用して接続します。
あれこれ言うより、まずはコードをご覧ください。
use std::net::TcpStream;
use std::io::{BufReader, BufRead};
use std::io::{BufWriter, Write};
// サーバ接続
let mut stream: TcpStream::connect("127.0.0.1:8888").unwrap()
// 受信
let mut reader = BufReader::new(stream);
let mut message = String::new();
reader.read_line(&mut message).expect("Could not read!");
// 送信
let mut writer = BufWriter::new(stream);
writer.write(b"message").unwrap();
let _ = writer.flush();
Rustでは、入出力を行う場合にBufRead
やBufWrite
を使うといいでしょう。これはネットワークでも一緒です。
意外にやってみると簡単に通信できて驚いています。
クレートとモジュール
クレートとモジールは、中規模以上の開発をする上で必ず必要になってくる知識でしょう。ここでは、struct
と絡めて解説をしていきます。
まず、クレートとはモジュールを束ねるものです。モジュール群です。
たとえば、以下のようにmain.rs
にextern carete hoge;
を追加します。これにより、hoge
クレートを使うことができます。hoge
クレートは同じディレクトリにあるlib.rs
を参照し、モジュールを使用可能にします。
extern crate hoge;
use hoge::fuga::Fuga;
use hoge::piyo;
fn main() {
let fuga = Fuga::new();
piyo::piyo_test();
piyo::piyo_print();
}
mod huga {
struct Fuga {
...
}
impl Fuga {
fn new() -> Fuga {
Fuga{...}
}
}
}
mod piyo {
fn piyo_test() {
...
}
fn piyo_print() {
...
}
}
また、lib.rs
だけでモジュールを記述するのは大変なので、モジュールごとファイルやディレクトリへ分割することができます。
今回はここまで
正直、Rustは入門レベルなので(記事の内容が薄くてすいません)、学習や開発を進めて行く中で、これ系の記事をまた書くかもしれませ。今回はアドベントカレンダーと言う機会を使って記事を書いてみました。