Rust(ラスト)とは、「安全性」「速度」「並行性」「実用性」にフォーカスしているプログラミング言語です。関数型/手続き型/オブジェクト指向型などのマルチパラダイム言語で、Mozillaにより開発されています。

オープンソースの言語/Rustとは

Rust(ラスト)とは、「安全性」「速度」「並行性」「実用性」にフォーカスしているプログラミング言語です。関数型/手続き型/オブジェクト指向型などのマルチパラダイム言語で、Mozillaにより開発されています。

目次

「Rust」基本情報
■概要
■基本説明
■動作環境
■経緯
■ユースケース

主な特徴
■マルチパラダイムプログラミング言語
・オブジェクト指向プログラミング
・関数型プログラミング
■オーナーシップ(所有権)システム
・所有権ルール
■低レイヤーシステム言語
■ライブラリ「クレート」
・クレートリポジトリサイト「crates.io」

言語機能
■メモリ管理
・自動管理
・メモリ安全性
・メモリ管理機能「スマートポインタ」
■コンパイラチェック
■並列処理
■エラー処理

Rustエコシステム
■コンパイラ「rustc」
■ビルドツール「Cargo」
■ツールチェーン管理ソフトウェア「rustup」

補足情報
■同様製品
■オフィシャルサイト
・オフィシャルサイト
・ライセンス情報
・ダウンロード
・導入事例

「Rust」基本情報

■概要

Rust(ラスト)とは、「安全性」「速度」「並行性」「実用性」にフォーカスしているプログラミング言語です。関数型/手続き型/オブジェクト指向型などのマルチパラダイム言語で、Mozillaにより開発されています。

■基本説明

Rustプログラミング言語は高速で信頼性の高いソフトウェアを開発できます。

「C++」に代わる低レイヤーまでを制御できるシステムプログラミングに適した言語を目指しています。

■動作環境

Rustは「Linux」「macOS」「Windows」で動作します。

■経緯

・2010年 初版リリース
・2015年 「Rust 1.0」リリース
・2016年/2017年/2018年 Stack Overflow Developer Survey「最も愛されたプログラミング言語」の第1位を獲得

■ユースケース

Rustは、低レイヤーから高レイヤーまでのシステムプログラミングに対応でき、大小さまざまな企業で多様なソフトウェア開発に利用されています。
・コマンドラインアプリケーション
・Webサーバ
・DevOpsツール
・組み込みデバイス
・オーディオ/ビデオ分析
・トランスコード
・暗号化通信
・バイオインフォマティクス
・検索エンジン
・IoTアプリケーション
・機械学習 など

主な特徴

■マルチパラダイムプログラミング言語

Rustは、言語実装手法においてのプログラミングパラダイムは特定の実装手法に限定されない非純粋なマルチパラダイムプログラミング言語であり、複数の実装手法をサポートしています。
・手続き型プログラミング---文法の表面的な記述
・オブジェクト指向プログラミング---型システムを用いたオブジェクト構造
・関数型プログラミング---ブロックコードのまとまりの意味論
・ジェネリックプログラミング---関数の入出力パラメータにジェネリック型を指定
・並行計算パラダイム---非同期機能を実現

基本的な制御フロー構文はC言語に似ていますが、ほぼすべて命令文が式(expression)で表現される特徴があるためML(Meta-Language)言語に似ている面もあります。

特定のプログラミングパラダイムのみを使用してソースコードを記述する必要はなく、複数の手法を取り込んだコーディングを行えます。

オブジェクト指向プログラミング

Rustは「構造体と列挙型はデータを持つ」「implブロックは構造体と列挙型のメソッドを提供する」などの特徴を持つオブジェクト指向言語です。実装の詳細をカプセル化できます。

Rustは有界パラメトリック多型と呼ばれる仕組みを持ちます。ジェネリックスを使用して、異なるタイプの可能性のあるタイプと特性境界を抽象化して、それらのタイプが提供しなければならないものに制約を課します。このため、Rustは、継承の代わりに形質オブジェクトを使用する別のアプローチを採用しています。

関数型プログラミング

Rustの設計において、既存の多くの言語と技術からインスピレーションを受けていますが、重要な影響の1つに関数型プログラミングがあります。

関数型プログラミングでは、「関数を引数に渡す」「関数を他の関数から戻す」「後で実行するために関数を変数に代入」など関数を値として使用します。

Rustは「パターンマッチング」「列挙型」などの仕組みなどに関数型プログラミングの影響が表れており、「クロージャ」や「イテレータ」などの機能を習得することで、慣用的で高速なRustコードを作成できます。

■オーナーシップ(所有権)システム

オーナーシップ(所有権)システムは、Rustの最もユニークな機能であり、「作成されたオブジェクトは、それを作成したスコープによって所有される」という仕組みです。

所有権ルール

所有権ルールとして、以下のルールが適用されます。
・Rustの各値には「所有者」と呼ばれる変数がある
・一度に所有できるオーナーは1人だけに限定される
・所有者が範囲外になると、その値は削除される

■低レイヤーシステム言語

Rustは、低レベルを制御するオプションを提供し、他言語が苦手とする低レイヤー用ユースケースを得意とします。
・メモリ管理
・データ表現
・並行処理の低レベルのおける動作
・他言語への埋め込み
・要求された空間/時間内での動作
・デバイスドライバ/OSの低レベルコード など

プログラマは、クラッシュやセキュリティホールの慣習的なリスクを回避して、Rustで低レイヤーの制御を行えます。さらに、スピードとメモリ使用の面においても、効率的で信頼性の高いコードを自然に導くように設計されています。

■ライブラリ「クレート」

Rustのライブラリは「クレート(Crate)」と呼ばれます。

カテゴリとして以下の3タイプに分かれています。
・コアライブラリ
・標準ライブラリ
・外部ライブラリ

クレートリポジトリサイト「crates.io」

「crates.io」には、さまざまなクレートが登録されています。

→crates.io(The Rust community’s crate registry)

言語機能

■メモリ管理

自動管理

Rustのメモリ管理では、GC(ガベージコレクション)は存在せず、メモリ管理は自動で行われます。

メモリ管理の自動化が徹底されているため、「明示的なメモリ解放」などは、ほぼ不要となっています。

メモリ安全性

Rustでは、強力な型システムとリソース管理の仕組みにより、メモリセーフな安全性が保証されています。メモリは、コンパイル時にコンパイラがチェックする一連の規則を持つ所有権システムによって管理されます。

「ヌルポインタ」「不正なメモリ域を指すポインタ」「初期化されてない変数へのアクセス」は許容されません。コンパイル時に安全にチェックされ、コンパイルエラーになります。

データ値は、フォームの固定されたセットを通してのみ初期化することができ、そのすべてが既に入力が初期化されている必要があります。

メモリ管理機能「スマートポインタ」

「ポインタ」とは、メモリ内のアドレスが含まれている変数のための一般的な概念です。このポインタは「データ参照用」として利用されます。

一方、Rustの「スマートポインタ」は、標準ライブラリで定義されています。データ参照用として動作するのに加えて、追加のメタデータと機能を持つデータ構造であり、「ポイントが指すデータを所有」しています。

■コンパイラチェック

Rustコンパイラのチェックは、コンパイル時の安全性検査を行い、並行性バグを含む不具合箇所のチェックを行い、すべてのデータ競合を排除します。

コンパイル基盤としてMIRとLLVMを用いており、実行時速度性能はC言語と同等程度とされています。

Rustコンパイラは、機能追加やリファクタリングによる安定性保証をサポートするゲートキーパーとして機能します。開発チームは、Rustコンパイラを通した開発を行うことで、バグ追跡時間を減少でき、開発生産性を向上できます。

■並列処理

プログラムの異なる部分が独立して実行される「並行プログラミング」、および、プログラムの異なる部分が同時に実行される「並列プログラミング」は、多くのコンピュータが複数プロセッサを利用するにつれてますます重要になってきています。

Rustにおいて「並列プログラミングを安全かつ効率的に処理すること」は、Rustの主要目標の1つであり、並列処理を導入することは比較的低リスクの操作となります。

Rustは、状況や要件に適した方法で問題をモデル化するためのさまざまなツールを提供しています。

■エラー処理

Rustは、エラーについて、「回復可能なエラー(Result)」と「回復不可能なエラー(panic)」の2つのカテゴリに分類します。

「回復可能なエラー(Result)」の例としては、「ファイルが見つからない」などがあり、問題をユーザーに報告して操作を再試行してもらうことでエラー回復を試みます。

「回復不可能なエラー(panic)」の場合は、実行を停止する処理になります。

Rustエコシステム

■コンパイラ「rustc」

「rustc」は、Rustで記述されたRustソースコードをコンパイルするコンパイラです。

コンパイルの成果物として「中間コード」「実行ファイル」「静的ライブラリ」「動的ライブラリ」を出力します。

クロスコンパイルが可能で、AndroidやiOSで動作するライブラリをホストマシンで出力できます。

■ビルドツール「Cargo」

「Cargo」はRust製ソフトウェアプロジェクトのCUIビルドツールです。

プロジェクトの「ビルド(コンパイル)」「依存ライブラリのダウンロード」「テスト」「ドキュメント生成」などをサポートします。

規定のファイル構成(ディレクトリ+設定ファイル+ソースファイル)のプロジェクトディレクトリで利用されます。

→Rust →The Cargo Book

■ツールチェーン管理ソフトウェア「rustup」

ツールチェーン管理ソフトウェア「rustup」は、コンパイラ「rustc」やビルドツール「Cargo」などのツールチェーンをインターネットを経由してホストマシンにダウンロード/インストール/マネジメントする機能を提供します。

その他「ソフトウェアバージョン管理」「コンパイルターゲット切り替え」などの機能も提供します。

→rustup.rs(The Rust toolchain installer)

補足情報

■同様製品

同様な機能を提供する製品として、次のようなものがあります。

オープンソース製品:「C++」「Elixir」「Erlang」「OCaml」「F#」など。

■オフィシャルサイト

オフィシャルサイト

→Rust(プログラミング言語 Rust)

ライセンス情報

Rustのライセンスは「主に、MITライセンス、Apacheライセンス(バージョン2.0)、部分的にBSDライクなライセンス」です。

詳細について、こちらを参照ください。
→Rust →著作権

ダウンロード

→Rust →Rustのインストール

導入事例

→Rust →Rustの友人ー Rustをプロダクトに利用している企業・プロジェクト等 ー

 

参考元サイト

※定期的にメンテナンスを実施しておりますが、一部情報が古い場合がございます。ご了承ください。

Rust最新TOPICS

【OSS】プログラミング言語「Rust 1.24」リリース---コードリフォーマットツール「rustfmt」、インクリメンタルコンパイル機能(2018年02月20日 11:03)

MozillaのRust開発チームは、2月15日、 プログラミング言語「Rust 1.24」をリリースした。 【Rustとは】 マルチパラダイム言語 https://www.ossnews.jp/oss_info/Rust 【1.24のポイント】 ・Rustコードリフォーマットツール「rustfmt」(プレビュー版)を導入 ・インクリメンタルコンパイル機能がデフォルトで有効 ...

Rust最新CLOSEUPコラム

  • オープソース書籍(サイド)
  • OSSNEWSに広告を掲載しませんか?

facebook

twitter