lazy_staticを使用してランタイムでRustの定数を初期化する

lazy_staticを使用してRustの定数を初期化する

遅延初期化を使用して定数でない静的変数を定義する

Christian Lue氏による写真

プログラミングにおいて、コンパイル時に定数を初期化することは良い慣行であることは知られています。初期化のオーバーヘッドを減らすだけでなく、コンパイラが定数の値を事前に知っているため、コードを賢く最適化することが容易になります。

ただし、ランタイムでのみ利用可能な非定数の操作を実行するか、データを取得する必要があるため、すべての定数をコンパイル時に初期化することは不可能な場合があります。例えば、プログラムで数値 √7 を繰り返し使用する場合を考えてみましょう。毎回計算する代わりに、次のように定数を定義する方が良いでしょう:

const ROOT_OF_SEVEN: f64 = 7_f64.sqrt();

しかし、このコードは無効です。Rustコンパイラは次のエラーを返します:

cannot call non-const fn `f64::<impl f64>::sqrt` in constantscalls in constants are limited to constant functions, tuple structs and tuple variants

環境変数で定数を初期化しようとする場合も同様です:

const LANG: String = env::var("LANG").unwrap();

Rustコンパイラからのメッセージ:

cannot call non-const fn `std::env::var::<&str>` in constantscalls in constants are limited to constant functions, tuple structs and tuple variants

ご覧のように、コンパイル時に初期化することが有用な特定の定数は、非定数の操作を必要とします。ここでRustのlazy_staticクレートが役立ちます。 lazy_staticを使用すると、値が実際にランタイムで最初に使用されたときにのみ設定されるグローバルな静的変数を定義できます。遅延静的変数は、使用される最初の時点でのみ初期化する必要があり、これは一度だけの操作なので、ランタイムでの初期化オーバーヘッドは無視できます。

この記事では、Rustのlazy_staticクレートを使用してグローバル定数を遅延初期化する方法と、いくつかの使用例について説明します。

lazy_staticの使用

lazy_staticクレートを使用するには、単純にプロジェクトの依存関係に追加します。

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

人工知能

ファイデムのチーフ・プロダクト・オフィサー、アルパー・テキン-インタビューシリーズ

アルパー・テキンは、FindemというAI人材の獲得と管理プラットフォームの最高製品責任者(CPO)ですFindemのTalent Data Clou...

人工知能

「ElaiのCEO&共同創業者、Vitalii Romanchenkoについてのインタビューシリーズ」

ヴィタリー・ロマンチェンコは、ElaiのCEO兼共同創設者であり、マイク、カメラ、俳優、スタジオの必要なく、個人が一流のビデ...

人工知能

「クリス・サレンス氏、CentralReachのCEO - インタビューシリーズ」

クリス・サレンズはCentralReachの最高経営責任者であり、同社を率いて、自閉症や関連する障害を持つ人々のために優れたクラ...

人工知能

「シフトのCEOであるクリス・ナーゲル – インタビューシリーズ」

クリスはSiftの最高経営責任者です彼は、Ping Identityを含むベンチャー支援および公開SaaS企業のシニアリーダーシップポジシ...

人工知能

「トリントの創設者兼CEO、ジェフ・コフマンへのインタビューシリーズ」

ジェフ・コーフマンは、ABC、CBS、CBCニュースで30年のキャリアを持った後、Trintの創設者兼CEOとなりましたジェフは手作業の...

データサイエンス

「Seerの最高データオフィサーであるDr. Serafim Batzoglouによるインタビューシリーズ」

セラフィム・バツォグルはSeerのチーフデータオフィサーですSeerに加わる前は、セラフィムはInsitroのチーフデータオフィサー...