Help us understand the problem. What is going on with this article?

Rustであれこれ

More than 1 year has passed since last update.

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした