首先我們先看看cargo.toml文件
[package]
name = "xactor"
version = "0.7.3"
authors = ["sunli <scott_s829@163.com>"]
description = "Xactor is a rust actors framework based on async-std"
edition = "2018"
publish = true
license = "MIT"
documentation = "https://docs.rs/xactor/"
homepage = "https://github.com/sunli829/xactor"
repository = "https://github.com/sunli829/xactor"
keywords = ["actor", "futures", "async", "xactor", "async-std"]
categories = ["network-programming", "asynchronous"]
readme = "README.md"
[dependencies]
futures = "0.3.4"
async-trait = "0.1.24"
async-std = { version = "1.5.0", features = ["attributes"], optional = true }
tokio = { version = "0.2", features = ["rt-threaded", "macros", "blocking", "time"], optional = true }
once_cell = "1.3.1"
anyhow = "1.0.26"
xactor-derive = { path = "xactor-derive", version = "0.7.0"}
fnv = "1.0.6"
slab = "0.4.2"
[workspace]
members = [
"xactor-derive"
]
[features]
runtime-tokio = ["tokio"]
runtime-async-std = ["async-std"]
default = ["runtime-async-std"]
package 部分
首先感謝 作者 sunli 同學(xué)的無私貢獻(xiàn)囊颅。
然后其他無視 嘿嘿
dependencies 部分
futures
Zero-cost asynchronous programming in Rust
零成本異步編程
async-trait
異步特性
async-std
異步的std
tokio
A runtime for writing reliable, asynchronous, and slim applications with the Rust programming language. 異步運(yùn)行時(shí)
once_cell
OnceCell可以存儲(chǔ)任意的非復(fù)制類型瞳浦,最多可以分配給一次就斤,并提供對(duì)存儲(chǔ)內(nèi)容的直接訪問呢撞。
anyhow
這個(gè)庫提供anyhow::Error溪厘,這是一種基于trait對(duì)象的錯(cuò)誤類型狮鸭,用于在Rust應(yīng)用程序中輕松地進(jìn)行慣用錯(cuò)誤處理合搅。
fnv
FNV哈希函數(shù)是一個(gè)自定義哈希器實(shí)現(xiàn),對(duì)于較小的哈希鍵更有效歧蕉。
Rust FAQ指出灾部,雖然默認(rèn)的Hasher實(shí)現(xiàn)SipHash在很多情況下都很好,但它明顯比其他短鍵的算法慢惯退,比如當(dāng)你有一個(gè)整數(shù)到其他值的映射時(shí)赌髓。在這種情況下,F(xiàn)NV顯然更快。
它的缺點(diǎn)是锁蠕,它在較大的輸入上執(zhí)行得很差夷野,并且沒有提供防止碰撞攻擊的保護(hù),在碰撞攻擊中荣倾,惡意的用戶可以設(shè)計(jì)特定的密鑰來減慢碰撞器的速度悯搔。因此,配置您的程序以確保您使用的是小散列鍵舌仍,并確保您的程序不會(huì)暴露給惡意輸入(包括作為一個(gè)網(wǎng)絡(luò)服務(wù)器)是很重要的妒貌。
Rust編譯器本身使用FNV,因?yàn)樗粨?dān)心拒絕服務(wù)攻擊抡笼,并且可以假設(shè)它的輸入很小——這是FNV的一個(gè)完美用例苏揣。
slab
無視這個(gè)吧。
xactor-derive
我們基本上都了解這些庫干啥用的了推姻。
xactor起源
features部分
[features]
runtime-tokio = ["tokio"]
runtime-async-std = ["async-std"]
default = ["runtime-async-std"]
其實(shí)就是使用哪個(gè)運(yùn)行時(shí)平匈。
基本上就是這樣了。那么接著我們開始去看入口文件 /src/lib.rs
只復(fù)制粘貼核心代碼藏古,其他說明沒有復(fù)制增炭。
#![allow(clippy::type_complexity)] //lint的過濾
mod actor;
mod addr;
mod broker;
mod caller;
mod context;
mod runtime;
mod service;
mod supervisor;
/// Alias of anyhow::Result
pub type Result<T> = anyhow::Result<T>;
/// Alias of anyhow::Error
pub type Error = anyhow::Error;
pub use actor::{Actor, Handler, Message, StreamHandler};
pub use addr::Addr;
pub use broker::Broker;
pub use caller::{Caller, Sender};
pub use context::Context;
pub use runtime::{block_on, sleep, spawn, timeout};
pub use service::{LocalService, Service};
pub use supervisor::Supervisor;
pub use xactor_derive::{main, message};
上面我看到第一行
![allow(clippy::type_complexity)]
真心看不懂,搜了一下拧晕。需要先看看 clippy
哦 原來過濾檢查語法用的隙姿。
然后就是引用 mod 和 pub 出去對(duì)應(yīng)的一些type。
下班 下班 喝酒喝酒