<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Rust &#8211; 開発記録</title>
	<atom:link href="https://www.kthksgy.com/category/rust/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.kthksgy.com</link>
	<description>開発メモです。現在レイアウトが一部崩れている箇所があります。</description>
	<lastBuildDate>Mon, 09 Nov 2020 09:50:16 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.2.2</generator>
	<item>
		<title>RustでHello, World!</title>
		<link>https://www.kthksgy.com/rust/rust-hello-world/</link>
					<comments>https://www.kthksgy.com/rust/rust-hello-world/#respond</comments>
		
		<dc:creator><![CDATA[kthksgy]]></dc:creator>
		<pubDate>Wed, 05 Feb 2020 09:49:22 +0000</pubDate>
				<category><![CDATA[Rust]]></category>
		<guid isPermaLink="false">https://www.kthksgy.com/?p=20</guid>

					<description><![CDATA[最近、このウェブサイトを公開しているレンタルサーバーが頻繁にダウンしていて困っている私です。理由は分かっていて、とにかく安くて制限が無い所を選んだのが敗因です。安物買いの銭失いとはこの事ですね。 ポエム 無制限という概念&#8230;]]></description>
										<content:encoded><![CDATA[<p>最近、このウェブサイトを公開しているレンタルサーバーが頻繁にダウンしていて困っている私です。理由は分かっていて、とにかく安くて制限が無い所を選んだのが敗因です。安物買いの銭失いとはこの事ですね。</p>
<h2>ポエム</h2>
<p>無制限という概念は、実際の利用がどれくらいの規模になるか全く分からない時に大変役に立ちます。が、本当の無制限はこの世に存在しません。特に安価なサービスの場合は。</p>
<p>次に契約するなら対価に相応しい量のリソースが提供される所にしようと思いますが、やっぱりランニングコストは安く済ませたい物で、そうなるとサーバー上で動かすシステムは省コストである必要があります。</p>
<p>さて、私が主に使うPythonは恐らく「手軽だけど効率的ではない言語」です。上記のような限られたリソース下で使うには不向きだと思います。私の状況がPythonで真に効率を考え限界を突き詰めても尚困るかはとりあえず置いておくとして、こういうケースで「効率的な言語」が扱えると個人的にテンションが上がります。なので、「手軽な言語」だけでなくこのような場合のための「効率的な言語」も何か1つお気に入りを見つけたいと思っていました。</p>
<p>そんなある日、Discordの<a class="wp-editor-md-post-content-link" href="https://blog.discordapp.com/why-discord-is-switching-from-go-to-rust-a190bbca2b1f">何故DiscordはGoからRustへ切り替えたのか？</a>という記事で、(ちょっと古い)GoからRustへ切り替えたら劇的にパフォーマンスが改善したというのを見て少しRustについて調べる事に。</p>
<p>前々からRustは名前を聞いた事が有る程度で触った事が無かったので、興味が湧いたついでに触る事にしました。</p>
<h2>Rustとは</h2>
<p>Rustは安全性、速度、並行性の3つにフォーカスした比較的新しい言語で、2016年から2019年までのStack Overflow Developer Surveyで「最も愛された言語」に選ばれる程の人気を誇っています。</p>
<p>具体的には以下のような言語のようです。</p>
<ul>
<li>C/C++と同じくらい速い</li>
<li>C/C++よりも扱いやすい</li>
<li>新しい</li>
</ul>
<p>後発で良い所取りをしていて尚且つC/C++並みに実行時のロスが少ない所が、私が求める「効率的な言語」っぽく見えて惹かれました。</p>
<h2>環境</h2>
<p>以下の環境で行いました。</p>
<ul>
<li>Windows 10 Pro (v1809, b17763.973)</li>
<li>MSYS2 MinGW 64bit</li>
<li>Intel(R) Core(TM) i9-9900K @ 3.60GHz</li>
</ul>
<h2>インストール</h2>
<p><a class="wp-editor-md-post-content-link" href="https://www.rust-lang.org/tools/install">Install Rust &#8211; Rust Programming Language</a>から、<code>rustup-init.exe</code>をダウンロードします。</p>
<p>ユーザー環境にインストールされるようなので、管理権限は必要ありません。</p>
<h3>PATHを通す</h3>
<p><code>~/.cargo/bin</code>にRustのコンパイラ等があるのでここにパスを通します。Bash起動時に自動でPATHが通るように<code>~/.bashrc</code>に書くと便利です。</p>
<pre><code class="language-bash line-numbers"># (Bash)
<span class="katex math inline">export PATH=~/.cargo/bin/:</span>PATH
</code></pre>
<h3>確認</h3>
<p>インストールが終わったら実行可能になったか確認しましょう。</p>
<pre><code class="language-bash line-numbers"># (Bash)
<span class="katex math inline">rustc -V
rustc 1.41.0 (5e1a79984 2020-01-27)</span> cargo -V
cargo 1.41.0 (626f0f40e 2019-12-03)
</code></pre>
<h2>Hello, World!</h2>
<p>ハローワールドします。プロジェクトのルートディレクトリとなるディレクトリを作成して、その中に<code>hello_world.rs</code>を作成してください。今回はルートディレクトリとして<code>rust-test</code>ディレクトリを作成しました。</p>
<p>以下がディレクトリツリーです。</p>
<pre><code class="language-clean line-numbers">rust-test/ (ルートディレクトリ)
|-- hello_world.rs
</code></pre>
<p>以降はルートディレクトリの表記を省略します。</p>
<pre><code class="language-rust line-numbers">/* hello_world.rs */

fn main() {
    println!("Hello, World!");
}
</code></pre>
<p><code>rustc</code>でコンパイルします。Windowsなので、<code>hello_world.exe</code>が生成されます。</p>
<pre><code class="language-bash line-numbers"># (Bash)
$ rustc hello_world.rs
</code></pre>
<p>実行します。</p>
<pre><code class="language-bash line-numbers"># (Bash)
$ ./hello_world.exe
Hello, World!
</code></pre>
<h2>Cargoの導入</h2>
<p>CargoはRustのビルドシステム兼パッケージマネージャで、コードのビルド、依存するライブラリのダウンロード、ライブラリのビルドの3つを管理してくれます。</p>
<p>Cargoではソースファイルは<code>src/</code>に配置する事になっているので、先ほどコンパイルして生成された<code>hello_world.exe</code>を削除して、<code>hello_world.rs</code>を<code>src/main.rs</code>に移動します。</p>
<p><code>hello_world.rs</code>をリネームする必要がある理由は、Cargoでビルドを行う際には実行可能ファイルなら<code>src/main.rs</code>が、ライブラリなら<code>src/lib.rs</code>がコードのメインファイルとして認識されているからです。</p>
<pre><code class="language-clean line-numbers">src/
|-- main.rs
</code></pre>
<h3>設定ファイルを作る</h3>
<p>Cargoの設定ファイル<code>Cargo.toml</code>を作成します。</p>
<pre><code class="language-toml line-numbers">[package]

name = "my_first_rust_app"
version = "0.0.1"
authors = [ "sugaok &lt;https://github.com/sugaok&gt;" ]
</code></pre>
<p>TOMLの記法はINIに似ています。これに、アプリケーション名<code>name</code>、バージョン情報<code>version</code>、作者一覧<code>authors</code>を記述します。</p>
<h3>Cargoでビルドする</h3>
<p>設定ファイルも作成したのでビルドしてみます。先ほどは<code>rustc</code>でコンパイルしましたが、今度は<code>cargo build</code>でビルドを行います。</p>
<pre><code class="language-bash line-numbers"># (Bash)
$ cargo build
   Compiling hello_world v0.0.1 (...\rust-test)
    Finished dev [unoptimized + debuginfo] target(s) in 0.48s
</code></pre>
<p>すると、実行可能ファイルとして<code>target/debug/my_first_rust_app.exe</code>が生成されます。これをそのまま実行しても良いのですが、Cargoは<code>cargo run</code>で実行する事が出来ます。</p>
<pre><code class="language-bash line-numbers"># (Bash)
$ cargo run
    Finished dev [unoptimized + debuginfo] target(s) in 0.01s
     Running `target\debug\my_first_rust_app.exe`
Hello, World!
</code></pre>
<h3>リリースビルド</h3>
<p>プロジェクトが完成して、配布する段階では、<code>cargo build</code>ではなく<code>cargo build --release</code>を行います。こうすると、最適化をかけてプロジェクトをコンパイル出来ます。</p>
<p>最適化するとプログラムを実行する速度が速くなりますが代わりにコンパイル時間が長くなるため、開発時はとりあえず実行出来る形に、リリース時は実行が速くなるように、2つの設定が使い分けられるようになっています。</p>
<h3>Cargoで簡単にプロジェクトを作る</h3>
<p>Reactの<code>create-react-app</code>やDjangoの<code>django-admin startproject</code>のように、CargoではCargoプロジェクトを作るためのコマンドが用意されています。</p>
<pre><code class="language-bash line-numbers"># (Bash)
$ cargo new hello_world --bin
     Created binary (application) `hello_world` package
</code></pre>
<p>このコマンドだけで、今回行ったプロジェクトのルートディレクトリの作成から<code>Cargo.toml</code>の作成まで全て終わります。</p>
<p>デフォルトで<code>src/main.rs</code>に既にHello, World!が書いてあるので、この後すぐに<code>cargo build</code>と<code>cargo run</code>をしてもHello, World!する事が出来ます。</p>
<h2>まとめ</h2>
<p>今回は、RustでとりあえずHello, World!しました。久しぶりにコンパイルという作業を明示的に行いましたが、個人的にはコンパイルを事前に行う言語の方がいかにもプログラミングな感じで好きです。手軽さではPythonの方が上ですが。</p>
<p>Rust自体は、後発らしくパッケージマネージャやテスト機能が標準で付いていたりと、始めるにあたっては特に苦労せず簡単でした。</p>
<p>実行速度に関してはまだ違いが出るようなプログラムを作っていないので分かりませんが、Rustの記法等はスッキリしていて好きです。</p>
<p>Rustには初学者には難しいオブジェクト指向でも関数型言語でもない新たな概念があるようなので、そちらにもこれから少しずつ慣れていけたら良いと思います。</p>
<h2>参考</h2>
<ul>
<li><a class="wp-editor-md-post-content-link" href="https://doc.rust-jp.rs/the-rust-programming-language-ja/1.6/book/getting-started.html">はじめる &#8211; プログラミング言語Rust</a></li>
<li><a class="wp-editor-md-post-content-link" href="https://insights.stackoverflow.com/survey/2019">Stack Overflow Developer Survey 2019</a></li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://www.kthksgy.com/rust/rust-hello-world/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
