我正在研究Netty 4.0.0.Alpha5代码,以了解如何处理线程.我还在http://netty.io/wiki/new-and-noteworthy-in-4.0.html#wiki-h2-34上阅读了Netty 4新线程模型的介绍.
据我了解,目标是:
所以,我想知道我的解释是否正确.如果我是对的,那么出现以下问题:
我只是想了解为什么事情就是这样,并获得有关Netty 4设计意图的一些信息.
为什么Send在特征实现中忽略自动特征的特征边界?(游乐场(1))
trait IsSend {
fn is_send(&self);
}
impl<T: Send> IsSend for T {
fn is_send(&self) {}
}
fn main() -> Result<(), Box<dyn std::error::Error>> {
let i = std::rc::Rc::new(43);
i.is_send(); // (!!) no compiler error although Rc<...> is not Send
Ok(())
}
Run Code Online (Sandbox Code Playgroud)
例如,使用绑定到自定义特征(X)的特征可以工作:(Playground(2))
trait X {}
trait IsSend {
fn is_send(&self);
}
impl<T: X> IsSend for T {
fn is_send(&self) {}
}
fn main() -> Result<(), Box<dyn std::error::Error>> {
let i = std::rc::Rc::new(43);
i.is_send(); // …Run Code Online (Sandbox Code Playgroud) 假设我要覆盖(替换)packageBin任务的默认设置.所以我天真地写了一个像这样的AutoPlugin:
object TestPlugin extends AutoPlugin {
override def trigger = allRequirements
override val projectSettings: Seq[Def.Setting[_]] = Seq(
packageBin in Compile <<= (packageBin in Compile).map { a =>
println("project/compile::packageBin")
a
}
)
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用(至少不适用于SBT 0.13.5和0.13.6-M1),我的版本packageBin从未调用过.如果我将以下行放在项目的build.sbt文件中,那么它可以工作.
packageBin in Compile <<= (packageBin in Compile).map { a => println("project/compile::packageBin"); a }
Run Code Online (Sandbox Code Playgroud)
是否有可能从AutoPlugin或经典插件中实现这一点,如果是这样,怎么样?