マジセミドライブ

ウェビナー関連のニュースやITサービス&ツールの最新情報を随時配信します。

OSS情報

2020.01.01

【OSS情報アーカイブ】Rust

【OSS情報アーカイブ】Rust

※当記事に記載されている情報は、古くなっている場合があります。オフィシャルサイトで最新情報をご確認ください。

「Rust」とは

「Rust」基本情報

■概要

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

■基本説明

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

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

■経緯

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

■ユースケース

Rustは、低レイヤーから高レイヤーまでのシステムプログラミングに対応でき、大小さまざまな企業で多様なソフトウェア開発に利用されています。

・コマンドラインアプリケーション
・Webサーバ
・DevOpsツール
・組み込みデバイス
・オーディオ/ビデオ分析
・トランスコード
・暗号化通信
・バイオインフォマティクス
・検索エンジン
・IoTアプリケーション
・機械学習 など

■オフィシャルサイト情報

オフィシャルサイト

→Rust

ライセンス情報

Rustのライセンスは「Apache License, Version 2.0」および「MIT license」です。

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

動作環境

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

ダウンロード

→Rust →Install Rust

導入事例

→Rust →Production

■同様製品

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

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

「Rust」の主な特徴

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

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」の言語機能

「Rust」の言語機能

■メモリ管理

メモリ自動管理

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

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

メモリ安全性

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

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

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

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

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

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

■コンパイラチェック

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

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

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

■並列処理

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

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

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

■エラー処理

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

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

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

「Rust」のエコシステム

「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)

 

参考元サイト

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

この記事のタグ一覧

おすすめの記事

【デジタル寺田の3分用語解説】「 2029年問題 」とは?📅

デジタル寺田の3分用語解説

2024.11.18

【デジタル寺田の3分用語解説】「 2029年問題 」とは?📅

「 2029年問題 」とは、高校でのデジタル教育改革により、新入社員と既存社員間でデジタルスキル格差が拡大する懸念を指します。企業は早急に対応が求められています。この格差は、企業競争力や業務効率にも、影響を及ぼす可能性があります。

【デジタル寺田の3分用語解説】「 経済産業省:コンテンツ制作のための 生成AI 利活用ガイドブック 」とは?📘

デジタル寺田の3分用語解説

2024.11.18

【デジタル寺田の3分用語解説】「 経済産業省:コンテンツ制作のための 生成AI 利活用ガイドブック 」とは?📘

経済産業省による「 生成AI 利活用ガイドブック 」は、企業やクリエイター向けに、安心して「生成AI」を利用するための、「指針」「実例」「注意点」を明示しています。「業務効率化」や「新しいアイデア創出」の支援を目的としています。

【デジタル寺田の3分用語解説】「 VMWare 問題 」とは?🖥️

デジタル寺田の3分用語解説

2024.11.18

【デジタル寺田の3分用語解説】「 VMWare 問題 」とは?🖥️

「 VMWare 」の仮想化技術は、「ITインフラの効率化」に大きく貢献する技術ですが、Broadcomによる買収後のライセンス変更が大きな問題として注目されています。柔軟で慎重な契約見直しが今後の鍵となります。