100日後にRustをちょっと知ってる人になる: [Day 67]lib.rs
Day 67 のテーマ
Day 66 では、クレートをいろいろなカテゴリ別におすすめのもの分類して紹介していくれている Blessed.rs の紹介を行いました。その、Bleesed.rs の中でも紹介はされていたのですが、今日は少し lib.rs について見てみたいと思います。
lib.rs
Blessed.rs では次の様に lib.rs のことが紹介されています。
lib.rsはより自動化されたアプローチ(ダウンロード数でクレートを並べる)をとり、また優れた検索機能を備えています。
Blessed.rs では、サイトオーナーの Nico Burns が中心となってクレートの評価と分類が行われていました。一方で、lib.rs はクレートのダウンロード数から自動的に人気なものだと判別し公開しているようです。Blessed.rs で紹介されていないクレートなども lib.rs でいち早く見つけることができるかもしれないですね。
lib.rs では次の様なセクションでクレートを表示することができます。
- カテゴリー (Categories)
- Blessed.rs のように目的・機能別にクレートを表示
- 新着やトレンド (New and Trending)
- 新規リリースされたり、当月中に注目を集めたクレートを表示
- 人気 (Popular)
- ダウンロード数順でクレートを表示
それらとは別に統計情報が確認できます。
これを見ると、2015 年に Rust 1.0 がリリースされてからのクレートのダウンロード数の推移が確認できます。かなりの勢いで Rust の普及が進んできていることがわかります。年率で 1.9 倍で増えてきていということなので、2023 - 2024 年あたりでは Rust をとりまく世界で何か起こりそうな気がしますね。
lib.rs でのカテゴリー
さて、それでは Blessed.rs 同様に lib.rs でもどのようなカテゴリー分類がされているかを確認しておきたく思います。
-
Rustパターン
- Rust でのプログラミングに特有の状況に対する解決策
-
ネットワークプログラミング
- FTP、HTTP、SSHなどの上位ネットワークプロトコルや、TCP、UDPなどの下位ネットワークプロトコルを扱うクレート
-
データ構造
- 特定の目的のためにデータを整理する特定の方法
-
開発ツール
- テスト、デバッグ、Lint、パフォーマンスプロファイリング、オートコンプリート、フォーマットなど、開発者向けの機能を提供するクレート
-
デバッギング
- ロギング、トレース、アサーションなど、コードで何が起こっているかを把握するのに役立つクレート
-
ビルドユーティリティ
- ビルドスクリプトやその他のビルドステップ用のユーティリティ
-
テスト
- コードの正しさを検証するためのクレート
-
FFI
- 他の言語とのインターフェイスを改善するために役立ちます。これには、バインディングジェネレータや便利な言語構成が含まれます
-
プロファイリング
- コードのパフォーマンスを把握
-
手続き型マクロ
- 手続き的なマクロを書くためのクレート
-
Cargo プラグイン
- Cargoの機能を拡張するサブコマンド
-
アルゴリズム
- ハッシュ、ソート、検索などのコアアルゴリズム
-
暗号技術
- データの安全性を確保するためのアルゴリズム
-
データエンコード
- あるデータフォーマットから別のデータフォーマットへのエンコードやデコードを実施
-
テキスト処理
- テキスト形式で表現された人間の言葉の複雑さを扱うためのクレート
-
非同期処理
- futures、promise、waiting、eventingなどの技術を使用して、メインプログラムの流れとは別にイベントを処理
-
並行処理
- 同時並行計算を実装
-
パーサーの実装
- 特定のフォーマットや言語向けに実装されたパーサー
-
オペレーティングシステム
- オペレーティングシステム固有のAPIへのバインディング
-
Unix API
- Linux や *BSD システムを含む、Unix 固有の API へのバインディング
-
Windows API
- Microsoft Windows 固有のAPIへのバインディング
-
macOSとiOSのAPI
- macOS または iOS/iPadOS の API、およびその他の Apple 固有の技術とのインターフェイス
-
サイエンス
- 数学、物理学、化学、生物学、機械学習、地球科学、その他の科学分野の問題解決に関するクレート
-
数学
- 数学の問題解決に関連するクレート
-
機械学習
- 人工知能、ニューラルネットワーク、ディープラーニング、推薦システム、統計学
-
ロボティクス
- ロボティクスに関連するクレートです。ロボット、ドローン、自律型マシンのファームウェアを構築
-
パーサツーリング
- あらゆるファイル形式のパーサーを作成・生成するためのユーティリティ・ライブラリ
-
Web プログラミング
- Web用アプリケーションを作成するためのクレート
-
HTTP クライアント
- HTTP ネットワークリクエストを行うためのクレート
-
HTTP サーバー
- HTTPでデータを提供するためのクレート
-
WebSocket
- WebSocketプロトコルで通信するためのクレート
-
ハードウェアサポート
- 特定の CPU やその他のハードウェアの機能に対応するためのクレート
-
WebAssembly
- WebAssembly をターゲットとするときに使用するクレート、または WebAssembly を操作するためのクレート
-
組込み開発
- 主に組込み機器やOSを持たない機器に有効なクレート
-
ファイルシステム
- ファイルやファイルシステムを扱うためのクレート
-
圧縮
- データをより小さくするためのアルゴリズム
-
コマンドラインインタフェース
- 引数パーサ、ラインエディット、出力のカラーリングやフォーマットなど、コマンドラインインターフェイスの作成を支援
-
コマンドラインユーティリティ
- コマンドラインから実行するアプリケーション
-
メモリ管理
- メモリ割り当て、メモリマッピング、ガベージコレクション、参照カウント、または外部メモリマネージャへのインタフェースを支援す
-
日付と時間
- 4次元を扱う固有の複雑さを管理するためのクレート
-
データベースインターフェース
- データベース管理システムとのインターフェイス
-
データベース実装
- Rust で実装されたデータベース管理システム。大量のデータを効率的に保存し、クエリすることが可能
-
値の書式設定
- アプリケーションがユーザーに表示する値を様々な言語や地域に表示を適合したフォーマットするためのクレートです。
-
テンプレートエンジン
- テンプレートとデータを組み合わせて、結果文書を作成するために設計されたクレートで、通常はテキストの処理に重点が置かれています。
-
コンフィギュレーション
- アプリケーションのコンフィギュレーション管理を容易にするためのクレート
-
GUI
- グラフィカルユーザーインターフェースの作成を支援するクレート
-
マルチメディア
- オーディオ、ビデオ、画像処理またはレンダリングエンジンを提供
-
画像
- 画像を処理したり、グラフィックを生成するクレート
-
オーディオ
- オーディオを記録、出力、処理
-
ビデオ
- 映像を記録、出力、処理
-
レンダリング
2Dまたは3Dグラフィックスのリアルタイムまたはオフラインでのレンダリング -
グラフィックス API
- ハードウェアやオペレーティングシステムのレンダリング機能に直接アクセスするためのクレート
-
Gfxデータフォーマット
- 3D モデルやアニメーションシートなど、2D や 3D レンダリングに関連するデータフォーマットの読み込みとパース処理
-
レンダリングエンジン
- 画面への描画のためのハイレベルなソリューション
-
標準ライブラリ不要
- Rust の標準ライブラリ無しで動作するクレート
-
可視化
- プロットやグラフなどのデータの見方
-
認証
- 認証を支援するクレート
-
キャッシング
- 計算結果を再利用するために、過去の計算結果を保存するクレート
-
ゲーム開発
- ゲーム制作を支援するクレート
-
ゲーム
- Rust で書かれたゲームや、既存のゲーム用のツールや MOD
-
テキストエディター
- テキストを編集するためのアプリケーション
-
国際化
- 様々な言語や地域に適応したソフトウェアを開発するためのクレート (ローカライゼーションソフトを含む)
-
プログラミング言語
- プログラミング言語のためのツール:コンパイラ、インタプリタ、トランスパイラ、仮想マシン
-
電子メール
- 電子メールの送受信、書式設定、解析に役立つクレート
-
エミュレータ
- あるコンピュータを別のコンピュータのように動作させるもので、多くの場合、ホストコンピュータでネイティブに利用できないソフトウェアを実行できるようにするもの
-
シミュレーション
- ネットワークプロトコルのシミュレーションなど、ある活動のモデル化またはモデル構築に使用するクレート
-
アクセシビリティ
- 様々な人が使いやすくなるための支援
Day 67 のまとめ
Blessed.rs と lib.rs を見れば、サードパーティ製のクレートでどういう時にどのようなものを使えばいいか、ということが Rust 初学者であっても勘が身につきそうなきがします。今後いろいろなクレートの学習をしてみたいと思っています。
Discussion