このサイトでは、分析、カスタマイズされたコンテンツ、および広告に Cookie を使用します。このサイトを引き続き閲覧すると、Cookie の使用に同意するものと見なされます。
Hi, Developers,
straightapps.com ロゴ
投稿 May 18, 2021
トップページ > articles > 2021/5/18 プログラミング言語 Rust
line
プログラミング
line

プログラミング言語 Rust とは?

2021 年 4 月に、Google はプログラミング言語 Rust ( 「ラスト」と発音すれば良さそうです。 ) を使用して、Android OS の開発を行うと発表したようです。 OS のセキュリティを高めるための方法だそうですが、 この聞きなれない、というよりは聞いたことのない Rust という言語がどんなものなのか、 少し調べましたので、書いています。

なお、以下には独自の見解も含まれていますので、ご参考までにお願いします。

まずは Google が Rust を採用することを決めた理由として、サイバー戦争問題があるようです。 すでにマイクロソフトも採用を始めているようで、 簡単に言えば、メモリの安全性が高まって脆弱性が生まれにくくなり、OS 自体が安全になる、ということのようです。

現行使用されている開発言語 C/C++ では、メモリアクセス等の自由度が高い半面、 だんだん改良されているとはいえ、予期しないメモリ破壊などが起きてしまいます。 C/C++ プログラマの私としては、もちろん身に覚えのあることですから、十分理解できます。 ですがその自由度の高さから、離れられない言語であり、 Android のアプリ開発でさえ、(ほとんど意味がありませんが)C/C++ でのネイティブアプリ開発を試みています。

Google によれば Android OS の深刻なセキュリティー脆弱性 70% 近くがメモリー安全に関するバグに起因するらしいです。 Microsoft も脆弱性の 70% がメモリー安全に関するバグと言っているようですから、改善策が必要です。

なお、Google としても、既存の C/C++ のコードをすべて書き換えるのは非現実的として、 新規のコードの開発を Rust にするという方針のようです。 新規コードを Rust 縛りする、という感じではなさそうですので、置き換えは緩やかになると思えますし、 すべてのコードが Rust になるとは思えません。

では、一般プログラマも Rust の勉強を始めたほうがいいのかどうかを中心に、 どんな言語なのか、調べてみます。

プログラミング言語 Rust とは、 ウェブブラウザー Firefox でお馴染みのモジラ財団が支援するプログラミング言語だそうですが、運営は Rust 財団となっています。 日本語の公式サイトは、https://www.rust-lang.org/ja/です。 2021 年 5 月 18 日現在では、バージョンは 1.52.1 となっています。 ちなみに開発が始まったのは 2006年、安定版であるバージョン 1 がリリースされたのが 2015 年だそうです。

Rust の特徴は、プログラムに必要なメモリの確保や解放に関連するバグが生じない「メモリー安全」が保証されていることにあるそうです。 Java なども同様であると言えますが、あまりにも不自由でありオーバーヘッドが多くなるので、OS には不向きということですが、 確かに OS の処理速度が低下するのは面白くありません。 ユーザーとしても、いくら安全性が高くても、今より動作の遅い OS を選択したくはありません。

日本語公式サイトの右上にある、 「はじめる」ボタンをクリックすると、 お試し方法やインストール方法に続いて、Rust がどんなプロジェクトを作成し、 どんなコードになるのかが書かれています。 Microsoft の Visual Studio Code 等、いろいろなエディタで使えるようになっているようですが、 説明はコマンドライン・ベースで書かれています。

少し読み進めていっても、実際に操作しながらじゃないとわかりません。 プロジェクト関係の部分は読み飛ばして、 「小さいRustアプリケーション」 からが面白そうです。

Rust のサンプルコード

細かいところはもちろん違いますが、Java のイメージと同じですね。 C# については詳しくありませんが、似たような感じに思えます。

use で使うライブラリを指定して、 fn で関数を定義、 let で変数定義と代入、と、違和感ありません。 変数 message に String::from で文字列を変換しているのも、わかりにくさはありません。 唯一 mut がわかりませんが、stdout.lock と併用しているので、 排他アクセス制御の mutex の定義のようなものでしょうか。

実行例を見ると、妙なキャラクタが出力されていますが、 おそらく say ライブラリが "ラスタシアン" のセリフのように出力するものなのでしょう。

すぐに答えがありました。

出力されたキャラは非公式マスコットの「フェリス」でした。 ラスタシアンは、Rust プログラマのことを言うようです。

最後に再び言語仕様に戻っておきます。 Rust は ガベージ・コレクション ( 正しく破棄されなかったメモリ領域を探し、メモリの「ゴミ」が見つかったらそれを処分する、という機能です。 ) を使わず、プログラマは Rust の「所有権」という概念に基づいてメモリを管理することになっているようです。 Rust はメモリ確保と解放のタイミングをコンパイル時に決定して、メモリー安全をコンパイラが保証する、という仕組みだそうです。 このため、実行時にメモリ解放が判定される GC に比べてプログラムも高速に動作することになります。 いいですね。 コンパイルには多少時間がかかっても、アプリのパフォーマンスが良くなるなら、そのほうがいいですから。

▲ページ先頭へ
line
関連トピックス
line

VS2019 の Android 開発環境を整える

無償で開発に利用できる Visual Studio Community 2019 をインストールして、Android ネイティブアプリ開発環境を作成しています。



© 2017-2021 StraightApps.com 無断転載を禁じます。No reproduction without permission.