1. 程式人生 > >Rocket - config - Configs

Rocket - config - Configs

可能 介紹 依賴 找到 獲取 conda 鏈表 keep tor

https://mp.weixin.qq.com/s/z2gUYuYQAHQCa_5HZcBszw

介紹各個配置項的組織方式。 參考鏈接: https://docs.qq.com/sheet/DUUVQdGp3RHlzVGZm https://docs.qq.com/sheet/DUXZsZWpsbHV1SUdR 1. Parameters的chain方法 chain方法用於實現find方法,即查找邏輯: ?技術分享圖片? 其使用鏈式查找的方法,逐個查找各個配置,直到查到所查的key。 chain方法所屬對象(this)、三個參數,標識著配置鏈表的不同位置、要查找的key: a. pname:要查找的Key;
b. site: 整個配置鏈表; c. this:當前正在查找的配置項; d. tail: 配置鏈表中this配置項之後的配置項; 2. PartialParameters的chain方法 PartialParameters中chain方法的實現如下: ?技術分享圖片? 其函數成員f使用的參數,就是當前的查找上下文。如下: a. site: 整個配置鏈表; b. this:當前正在查找的配置項; c. tail: 配置鏈表中this配置項之後的配置項; 3. Config的第二個構造方法 ?技術分享圖片? 第二個構造方法(secondary constructor),根據傳入的參數f,生成一個PartialParameters,然後作為參數調用第一個構造方法(primary constructor)。
4. 實例 ?技術分享圖片? BaseSubsystemConfig繼承自Config類,實例化時調用Config的第二個構造方法。 這裏的(site, here, up)是形式參數,實際調用時的參數在PartialParameters類中傳入,為(site, this, tail)。意義如下: a. site/site: 整個配置鏈表; b. this/here:當前正在查找的配置項; c. tail/up: 配置鏈表中this配置項之後的配置項; 5. 配置項之間的依賴關系 某一個配置項可能依賴於其他配置項的值,如BaseSubsystemConfig中的PgLevels依賴於XLen:
?技術分享圖片? 獲取所依賴配置值的方式就是通過site進行查找,也就是在整個配置鏈表中進行查找。 6. 配置項之間的覆蓋關系 1) 因為查找是鏈式的,所以如果兩個配置項含有同一個key,那麽排在前面的key的值就會被使用。 如DefaultRV32Config: ?技術分享圖片? WithRV32中也定義了XLen這個配置項,他排在BaseSubsystemConfig中的XLen之前。所以針對DefaultRV32Config的實例使用site(XLen)時,獲取到的是32,而不是64。 ?技術分享圖片? 2) 排在前面的配置項也可以使用排在後面的配置項的值,並對其進行更改。 同樣如DefaultRV32Config。 ?技術分享圖片? WithRV32中的配置項RocketTilesKey,使用up(RocketTilesKey, site)查找配置鏈表中後續配置項中的RocketTilesKey,並對其進行修改。 這裏是可以查找到的,因為DefaultConfig中也定義了RocketTilesKey這個配置項。 7. Config的子類們 如下鏈接整理並列出了所有Config的子類: 參考鏈接:https://docs.qq.com/sheet/DUXZsZWpsbHV1SUdR ?技術分享圖片?

Rocket - config - Configs