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

8
5
0

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
  3. You can use dark theme
What you can do with signing up
8
5