Pebble Coding

ソフトウェアエンジニアによるIT技術、数学の備忘録

macOS環境でrustを学習する

以下の日本語ドキュメントで学習します。

プログラミング言語Rust

インストール

~$ curl -sSf https://static.rust-lang.org/rustup.sh | sh

rustコンパイラのバージョン確認

~$ rustc --version
rustc 1.11.0 (9b21dcd6a 2016-08-15)

vimシンタックスハイライト設定

Bundle 'rust-lang/rust.vim'

3つのサンプルの解説を読む

「3.Rustを学ぶ」の3つの短いサンプルソースの解説を読んでみると、大体の感じがつかめます。

現時点(2016-08-21)では
「3.1. 数当てゲーム」
「3.2. 食事する哲学者」
「3.3. 他言語と共存する」
の最初の2つだけが日本語化されています。 3つ目は英語ですが、最初の2つをやった後なら苦労せず分かります。

rustの雑感

3つのサンプルをやってみた感想はこんな感じです。

  • rustは「安全性」、「速度」、「並行性」にフォーカスしたシステムプログラミング言語である。
  • テストコードも含めると、Win+mingw(32bit/64bit),Win+MSVC(64bit),macOS(32bit/64bit),Linux(32bit/64bit)環境に対応。 テストコードを含めないと、iOS(arm)やAndroidなども対応している。
  • 基本的にコマンドラインベース。
  • パッケージ管理はcargoコマンドを使うのが標準。rubyで言うRakeのようなもの。
  • 文の終わりがセミコロン。シンタックスがいろいろな言語の寄せ集めのように感じる。メソッド名の命名規約がC/C++っぽくものすごく省略してある。例えば比較関数がcmpとか。
  • 言語仕様によりスコープを抜けるとロックが解除されたりする。atomicなリファレンスカウンタをプログラマがUP/DOWNすることにより、オブジェクトの寿命を決められる。ガーベージコレクタ方式ではない。
  • rustからC言語C言語からrustを呼び出したりできる。ruby,python,javascriptから呼び出すことも可能。
  • rustは数値計算とマルチスレッド処理に優れている。
  • map,collectがあったり、最後に評価した値は戻り値になるのはrubyっぽい。
  • rustでライブラリを作った場合はC言語で作ったのと同じ形式であり、ダイナミックライブラリになる。 拡張子はLinuxなら.so,Windowsなら.dll,macOSなら.dylibとなるので、どの言語からも呼び出し可能な形式となる。
  • 「3.3. 他言語と共存する」のサンプルはmacOS環境で試す場合と.soファイルではなく.dylibファイルを指定すると動作する。
  • rustではメモリアロケーションをほとんどスタックメモリで行うことで高速性を確保している。クロージャーもスタック上に取る。
  • C/C++でマルチスレッドプログラミングの知識がある人なら、rustを使うモチベーションがどの程度あるかについては疑問が残る。モダンな言語らしく、パッケージマネージャーがついているのが一つの強みではある。
  • C/C++と比較してrustを使うメリットは、C/C++のように動作未定義やバッファオーバーフローのような脆弱性が組み込まれる可能性が低いことが挙げられる。 OpenSSLのような頻繁に脆弱性が見つかるライブラリよりrust製のライブラリを使いたいという気になる。