考虑以下功能,您会期望哪些性能差异?
pub fn foo<'a>(data: Request) -> Response<'a> {
//
}
vs。
pub fn foo(data: Request) -> Response<'static> {
//
}
生命周期为Response
的{{1}}会在程序生命周期内将每个'static
保留在内存中吗?
Response
与'a
相比会保留多长时间?
答案 0 :(得分:8)
这两个函数将生成相同的机器代码。生命周期在编译期间被删除。如果您的程序签出,则没有任何进一步的意义。
尤其是,将生命周期视为“它在内存中保存了这么长时间”是错误的。终生都与“这种生命持续足够长的时间”有关。这是一个微妙的区别,但是要记住的关键是生命周期是描述性的,而不是描述性的。赋予生命一生并不意味着它可以存活一段时间。要么由于其他原因(例如,可以用'static
引用全局变量)在必要的时间内存活,要么该程序无法编译。
第二,您的摘要中的生存期根本没有立即生效。它们只是Response
结构的参数。由该结构决定如何处理生命周期。它是否在内部保留对此生命的引用?它只是转发到用于将响应与某个连接相关联的PhantomData
吗?
第三,给定定义函数的方式(仅将生命周期参数用于返回类型),实现的要求没有差异。由于此处的生存期是由调用方选择的,因此无论如何,该函数必须准备满足'static
的生存期。所有这些所做的就是使调用者的使用更加烦人。
总而言之: