Comprehensive Rust(繁体中文)明如何使用 Rust 在 bare-metal (嵌入式系統) 上台開發。課程 內容包含微控制器和處理器。 • 並行:這個全天課程著重於 Rust 中的並行問題。我們將探討傳統並行 (使用執行緒和互斥鎖進行先 占式排程) 以及 async/await 並行 (使用 future 進行合作多工處理)。 非課程目標 Rust 是大型的程式語言,無法在幾天內就介紹完畢。因此,本課程不包含下列內容: 「編譯期的記憶體安全性」- 在編譯期間就能避免各類記憶體錯誤 – 不會產生未初始化的變數。 – 不會導致重複釋放記憶體。 – 不會使用已釋放的記憶體。 – 不會產生 NULL 指標。 – 不會產生忘記鎖定的互斥鎖。 – 執行緒之間不會發生資料競爭。 – 不會發生疊代器無效的情形。 • 「不會出現未定義的執行階段行為 (undefined runtime behavior)」- Rust 陳述式的行為一律會 *counter.lock() += 2; println!("count: {}", counter.lock()); } • 如果在中斷處理常式使用了鎖,請務必小心避免死結。 • spin 也具備排號自旋鎖互斥實作項目;std::sync 中 RwLock、Barrier 和 Once 的同等項 目;以及用於延遲初始化的 Lazy。 • once_cell Crate 也具備一些實用型別,適合用於晚期初始化,與0 码力 | 358 页 | 1.41 MB | 11 月前3
Hello 算法 1.2.0 繁体中文 C# 版加法雜湊:對輸入的每個字元的 ASCII 碼進行相加,將得到的總和作為雜湊值。 ‧ 乘法雜湊:利用乘法的不相關性,每輪乘以一個常數,將各個字元的 ASCII 碼累積到雜湊值中。 ‧ 互斥或雜湊:將輸入資料的每個元素透過互斥或操作累積到一個雜湊值中。 ‧ 旋轉雜湊:將每個字元的 ASCII 碼累積到一個雜湊值中,每次累積之前都會對雜湊值進行旋轉操作。 // === File: simple_hash 1000000007; foreach (char c in key) { hash = (31 * hash + c) % MODULUS; } return (int)hash; } /* 互斥或雜湊 */ int XorHash(string key) { int hash = 0; const int MODULUS = 1000000007; foreach (char c in 消除週期性模式,提升雜湊演 算法的穩健性。 6.3.3 常見雜湊演算法 不難發現,以上介紹的簡單雜湊演算法都比較“脆弱”,遠遠沒有達到雜湊演算法的設計目標。例如,由於加 法和互斥或滿足交換律,因此加法雜湊和互斥或雜湊無法區分內容相同但順序不同的字串,這可能會加劇雜 湊衝突,並引起一些安全問題。 第 6 章 雜湊表 www.hello‑algo.com 132 在實際中,我們通常會用一些標準雜湊演算法,例如0 码力 | 379 页 | 18.79 MB | 10 月前3
Hello 算法 1.2.0 繁体中文 Dart 版加法雜湊:對輸入的每個字元的 ASCII 碼進行相加,將得到的總和作為雜湊值。 ‧ 乘法雜湊:利用乘法的不相關性,每輪乘以一個常數,將各個字元的 ASCII 碼累積到雜湊值中。 ‧ 互斥或雜湊:將輸入資料的每個元素透過互斥或操作累積到一個雜湊值中。 ‧ 旋轉雜湊:將每個字元的 ASCII 碼累積到一個雜湊值中,每次累積之前都會對雜湊值進行旋轉操作。 // === File: simple_hash 0; i < key.length; i++) { hash = (31 * hash + key.codeUnitAt(i)) % MODULUS; } return hash; } /* 互斥或雜湊 */ int xorHash(String key) { int hash = 0; final int MODULUS = 1000000007; for (int i = 0; i 消除週期性模式,提升雜湊演 算法的穩健性。 6.3.3 常見雜湊演算法 不難發現,以上介紹的簡單雜湊演算法都比較“脆弱”,遠遠沒有達到雜湊演算法的設計目標。例如,由於加 法和互斥或滿足交換律,因此加法雜湊和互斥或雜湊無法區分內容相同但順序不同的字串,這可能會加劇雜 湊衝突,並引起一些安全問題。 第 6 章 雜湊表 www.hello‑algo.com 132 在實際中,我們通常會用一些標準雜湊演算法,例如0 码力 | 378 页 | 18.77 MB | 10 月前3
Hello 算法 1.2.0 繁体中文 Go 版加法雜湊:對輸入的每個字元的 ASCII 碼進行相加,將得到的總和作為雜湊值。 ‧ 乘法雜湊:利用乘法的不相關性,每輪乘以一個常數,將各個字元的 ASCII 碼累積到雜湊值中。 ‧ 互斥或雜湊:將輸入資料的每個元素透過互斥或操作累積到一個雜湊值中。 ‧ 旋轉雜湊:將每個字元的 ASCII 碼累積到一個雜湊值中,每次累積之前都會對雜湊值進行旋轉操作。 // === File: simple_hash for _, b := range []byte(key) { hash = (31*hash + int64(b)) % modulus } return int(hash) } /* 互斥或雜湊 */ func xorHash(key string) int { hash := 0 modulus := 1000000007 for _, b := range []byte(key) 消除週期性模式,提升雜湊演 算法的穩健性。 6.3.3 常見雜湊演算法 不難發現,以上介紹的簡單雜湊演算法都比較“脆弱”,遠遠沒有達到雜湊演算法的設計目標。例如,由於加 法和互斥或滿足交換律,因此加法雜湊和互斥或雜湊無法區分內容相同但順序不同的字串,這可能會加劇雜 湊衝突,並引起一些安全問題。 在實際中,我們通常會用一些標準雜湊演算法,例如 MD5、SHA‑1、SHA‑2 和 SHA‑30 码力 | 385 页 | 18.80 MB | 10 月前3
Hello 算法 1.2.0 繁体中文 Kotlin 版加法雜湊:對輸入的每個字元的 ASCII 碼進行相加,將得到的總和作為雜湊值。 ‧ 乘法雜湊:利用乘法的不相關性,每輪乘以一個常數,將各個字元的 ASCII 碼累積到雜湊值中。 ‧ 互斥或雜湊:將輸入資料的每個元素透過互斥或操作累積到一個雜湊值中。 ‧ 旋轉雜湊:將每個字元的 ASCII 碼累積到一個雜湊值中,每次累積之前都會對雜湊值進行旋轉操作。 // === File: simple_hash for (c in key.toCharArray()) { hash = (31 * hash + c.code) % MODULUS } return hash.toInt() } /* 互斥或雜湊 */ fun xorHash(key: String): Int { var hash = 0 val MODULUS = 1000000007 第 6 章 雜湊表 www.hello‑algo www.hello‑algo.com 131 6.3.3 常見雜湊演算法 不難發現,以上介紹的簡單雜湊演算法都比較“脆弱”,遠遠沒有達到雜湊演算法的設計目標。例如,由於加 法和互斥或滿足交換律,因此加法雜湊和互斥或雜湊無法區分內容相同但順序不同的字串,這可能會加劇雜 湊衝突,並引起一些安全問題。 在實際中,我們通常會用一些標準雜湊演算法,例如 MD5、SHA‑1、SHA‑2 和 SHA‑30 码力 | 382 页 | 18.79 MB | 10 月前3
Hello 算法 1.2.0 繁体中文 Java 版加法雜湊:對輸入的每個字元的 ASCII 碼進行相加,將得到的總和作為雜湊值。 ‧ 乘法雜湊:利用乘法的不相關性,每輪乘以一個常數,將各個字元的 ASCII 碼累積到雜湊值中。 ‧ 互斥或雜湊:將輸入資料的每個元素透過互斥或操作累積到一個雜湊值中。 ‧ 旋轉雜湊:將每個字元的 ASCII 碼累積到一個雜湊值中,每次累積之前都會對雜湊值進行旋轉操作。 // === File: simple_hash (char c : key.toCharArray()) { hash = (31 * hash + (int) c) % MODULUS; } return (int) hash; } /* 互斥或雜湊 */ int xorHash(String key) { int hash = 0; final int MODULUS = 1000000007; for (char c : key 消除週期性模式,提升雜湊演 算法的穩健性。 6.3.3 常見雜湊演算法 不難發現,以上介紹的簡單雜湊演算法都比較“脆弱”,遠遠沒有達到雜湊演算法的設計目標。例如,由於加 法和互斥或滿足交換律,因此加法雜湊和互斥或雜湊無法區分內容相同但順序不同的字串,這可能會加劇雜 湊衝突,並引起一些安全問題。 第 6 章 雜湊表 www.hello‑algo.com 131 在實際中,我們通常會用一些標準雜湊演算法,例如0 码力 | 379 页 | 18.79 MB | 10 月前3
Hello 算法 1.2.0 繁体中文 JavaScript 版加法雜湊:對輸入的每個字元的 ASCII 碼進行相加,將得到的總和作為雜湊值。 ‧ 乘法雜湊:利用乘法的不相關性,每輪乘以一個常數,將各個字元的 ASCII 碼累積到雜湊值中。 ‧ 互斥或雜湊:將輸入資料的每個元素透過互斥或操作累積到一個雜湊值中。 ‧ 旋轉雜湊:將每個字元的 ASCII 碼累積到一個雜湊值中,每次累積之前都會對雜湊值進行旋轉操作。 // === File: simple_hash 1000000007; for (const c of key) { hash = (31 * hash + c.charCodeAt(0)) % MODULUS; } return hash; } /* 互斥或雜湊 */ function xorHash(key) { let hash = 0; const MODULUS = 1000000007; for (const c of key) { 消除週期性模式,提升雜湊演 算法的穩健性。 6.3.3 常見雜湊演算法 不難發現,以上介紹的簡單雜湊演算法都比較“脆弱”,遠遠沒有達到雜湊演算法的設計目標。例如,由於加 法和互斥或滿足交換律,因此加法雜湊和互斥或雜湊無法區分內容相同但順序不同的字串,這可能會加劇雜 湊衝突,並引起一些安全問題。 在實際中,我們通常會用一些標準雜湊演算法,例如 MD5、SHA‑1、SHA‑2 和 SHA‑30 码力 | 379 页 | 18.78 MB | 10 月前3
Hello 算法 1.2.0 繁体中文 TypeScript 版加法雜湊:對輸入的每個字元的 ASCII 碼進行相加,將得到的總和作為雜湊值。 ‧ 乘法雜湊:利用乘法的不相關性,每輪乘以一個常數,將各個字元的 ASCII 碼累積到雜湊值中。 ‧ 互斥或雜湊:將輸入資料的每個元素透過互斥或操作累積到一個雜湊值中。 ‧ 旋轉雜湊:將每個字元的 ASCII 碼累積到一個雜湊值中,每次累積之前都會對雜湊值進行旋轉操作。 // === File: simple_hash 1000000007; for (const c of key) { hash = (31 * hash + c.charCodeAt(0)) % MODULUS; } return hash; } /* 互斥或雜湊 */ function xorHash(key: string): number { let hash = 0; const MODULUS = 1000000007; for (const 消除週期性模式,提升雜湊演 算法的穩健性。 6.3.3 常見雜湊演算法 不難發現,以上介紹的簡單雜湊演算法都比較“脆弱”,遠遠沒有達到雜湊演算法的設計目標。例如,由於加 法和互斥或滿足交換律,因此加法雜湊和互斥或雜湊無法區分內容相同但順序不同的字串,這可能會加劇雜 湊衝突,並引起一些安全問題。 在實際中,我們通常會用一些標準雜湊演算法,例如 MD5、SHA‑1、SHA‑2 和 SHA‑30 码力 | 384 页 | 18.80 MB | 10 月前3
Hello 算法 1.2.0 繁体中文 Swift 版加法雜湊:對輸入的每個字元的 ASCII 碼進行相加,將得到的總和作為雜湊值。 ‧ 乘法雜湊:利用乘法的不相關性,每輪乘以一個常數,將各個字元的 ASCII 碼累積到雜湊值中。 ‧ 互斥或雜湊:將輸入資料的每個元素透過互斥或操作累積到一個雜湊值中。 ‧ 旋轉雜湊:將每個字元的 ASCII 碼累積到一個雜湊值中,每次累積之前都會對雜湊值進行旋轉操作。 第 6 章 雜湊表 www.hello‑algo scalar in c.unicodeScalars { hash = (31 * hash + Int(scalar.value)) % MODULUS } } return hash } /* 互斥或雜湊 */ func xorHash(key: String) -> Int { var hash = 0 let MODULUS = 1_000_000_007 for c in key 消除週期性模式,提升雜湊演 算法的穩健性。 6.3.3 常見雜湊演算法 不難發現,以上介紹的簡單雜湊演算法都比較“脆弱”,遠遠沒有達到雜湊演算法的設計目標。例如,由於加 法和互斥或滿足交換律,因此加法雜湊和互斥或雜湊無法區分內容相同但順序不同的字串,這可能會加劇雜 湊衝突,並引起一些安全問題。 在實際中,我們通常會用一些標準雜湊演算法,例如 MD5、SHA‑1、SHA‑2 和 SHA‑30 码力 | 379 页 | 18.79 MB | 10 月前3
Hello 算法 1.2.0 繁体中文 Ruby 版加法雜湊:對輸入的每個字元的 ASCII 碼進行相加,將得到的總和作為雜湊值。 ‧ 乘法雜湊:利用乘法的不相關性,每輪乘以一個常數,將各個字元的 ASCII 碼累積到雜湊值中。 ‧ 互斥或雜湊:將輸入資料的每個元素透過互斥或操作累積到一個雜湊值中。 ‧ 旋轉雜湊:將每個字元的 ASCII 碼累積到一個雜湊值中,每次累積之前都會對雜湊值進行旋轉操作。 # === File: simple_hash each_char { |c| hash = 31 * hash + c.ord } hash % modulus 第 6 章 雜湊表 www.hello‑algo.com 128 end ### 互斥或雜湊 ### def xor_hash(key) hash = 0 modulus = 1_000_000_007 key.each_char { |c| hash ^= c.ord } 能消除週期性模式,提升雜湊演 算法的穩健性。 6.3.3 常見雜湊演算法 不難發現,以上介紹的簡單雜湊演算法都比較“脆弱”,遠遠沒有達到雜湊演算法的設計目標。例如,由於加 法和互斥或滿足交換律,因此加法雜湊和互斥或雜湊無法區分內容相同但順序不同的字串,這可能會加劇雜 湊衝突,並引起一些安全問題。 在實際中,我們通常會用一些標準雜湊演算法,例如 MD5、SHA‑1、SHA‑2 和 SHA‑30 码力 | 372 页 | 18.75 MB | 10 月前3
共 14 条
- 1
- 2













