Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Configの実装

ここではフレームワーク全体の設定を管理するConfigファイルを実装します。

今までの同様にに core.rs ファイルと同じ階層に config.rs ファイルを追加し、lib.rsmod.rs に名前を追加しておきます。

use std::sync::atomic::{AtomicBool, AtomicUsize, Ordering};
/// Variableや関数たちにidを付けるための値
pub static NEXT_ID: AtomicUsize = AtomicUsize::new(0);

/// 微分するかしないかというフラグ
/// 推論するときなど、微分する必要がないときに切り替える
pub static GRAD_CONFIG: AtomicBool = AtomicBool::new(true);

/// idを生成する関数。構造体のコンストラクタを作成する際に、呼び出して、idを付ける
pub fn id_generator() -> usize {
    NEXT_ID.fetch_add(1, Ordering::SeqCst)
}

pub fn set_grad_true() {
    GRAD_CONFIG.store(true, Ordering::SeqCst);
}

pub fn set_grad_false() {
    GRAD_CONFIG.store(false, Ordering::SeqCst);
}

pub fn get_grad_status() -> bool {
    GRAD_CONFIG.load(Ordering::SeqCst)
}

はじめに id に関する設定を行います。微分の実装(複雑な関数)で実装した id を扱う NEXT_IDid_generator() をここに移します。また高階微分を行うかというフラグ GRAD_CONFIG の設定もここで行います。このフラグの状態、または変更する関数を実装します。

高階微分に関しては補足のところで解説します。

TODO:高階微分補足の場所で説明