LoginSignup
5

More than 5 years have passed since last update.

Rustであれこれ

Posted at

信州大学の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では、入出力を行う場合にBufReadBufWriteを使うといいでしょう。これはネットワークでも一緒です。

RustのファイルI/OにはBufReader, BufWriterを使いましょう、という話

意外にやってみると簡単に通信できて驚いています。

クレートとモジュール

クレートとモジールは、中規模以上の開発をする上で必ず必要になってくる知識でしょう。ここでは、structと絡めて解説をしていきます。

Crates and Modules - The Rust Programming Language

まず、クレートとはモジュールを束ねるものです。モジュール群です。
たとえば、以下のようにmain.rsextern carete hoge;を追加します。これにより、hogeクレートを使うことができます。hogeクレートは同じディレクトリにあるlib.rsを参照し、モジュールを使用可能にします。

main.rs
extern crate hoge;

use hoge::fuga::Fuga;
use hoge::piyo;

fn main() {
    let fuga = Fuga::new();
    piyo::piyo_test();
    piyo::piyo_print();
}
lib.rs
mod huga {
    struct Fuga {
        ...
    }

    impl Fuga {
        fn new() -> Fuga {
            Fuga{...}
        }
    }
}

mod piyo {
    fn piyo_test() {
        ...
    }

    fn piyo_print() {
        ...
    }
}

また、lib.rsだけでモジュールを記述するのは大変なので、モジュールごとファイルやディレクトリへ分割することができます。

今回はここまで

正直、Rustは入門レベルなので(記事の内容が薄くてすいません)、学習や開発を進めて行く中で、これ系の記事をまた書くかもしれませ。今回はアドベントカレンダーと言う機会を使って記事を書いてみました。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
5