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

人工知能

「Kognitosの創設者兼CEO、ビニー・ギル- インタビューシリーズ」

ビニー・ギルは、複数の役職と企業を横断する多様で幅広い業務経験を持っていますビニーは現在、Kognitosの創設者兼CEOであり...

人工知能

ジョナサン・ダムブロット、Cranium AIのCEO兼共同創設者- インタビューシリーズ

ジョナサン・ダムブロットは、Cranium AIのCEO兼共同創業者ですCranium AIは、サイバーセキュリティおよびデータサイエンスチ...

人工知能

ムーバブルインクのCEO兼共同創設者であるヴィヴェク・シャルマ氏についてのインタビュー・シリーズ

ビヴェクは2010年にムーバブルインクを共同設立し、急速な成長を遂げながら、600人以上の従業員を擁し、世界有数の革新的なブ...

人工知能

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

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

機械学習

「機械学習 vs AI vs ディープラーニング vs ニューラルネットワーク:違いは何ですか?」

テクノロジーの急速な進化は、ビジネスが効率化のために洗練されたアルゴリズムにますます頼ることで、私たちの日常生活を形...

データサイエンス

アステラソフトウェアのCOO、ジェイ・ミシュラ - インタビューシリーズ

ジェイ・ミシュラは、急速に成長しているエンタープライズ向けデータソリューションの提供企業であるAstera Softwareの最高執...