过去几天我一直在与Rust合作建立一个新的库(与抽象代数相关),而且我正在努力学习该语言的一些最佳实践。例如,我实现了一个最长的公共子序列函数,对序列采用&[&T]
。我认为这是Rust惯例,因为它避免了复制数据(T
,这可能不容易复制,或者可能很大)。当我更改我的算法以使用更简单的&[T]
时,我需要在我的代码中的其他地方使用,我被迫放入Copy
类型约束,因为它需要复制T
而且不只是复制参考。
所以我的更高层次的问题是:在长时间运行的进程中,线程和结构之间传递数据的最佳实践是什么,例如响应需要大数据处理的查询的服务器?任何特异性都非常有用,因为我发现很少。您通常想通过引用传递参数吗?你是否一般想避免在Rust书中读到引用时返回引用?使用&[&T]
或&[T]
或Vec<T>
或Vec<&T>
更好吗?为什么?返回Box<T>
或T
会更好吗?我意识到这里的“更好”这个词是非常不明确的,但是希望你能理解我的意思 - 在定义函数和结构时,我应该考虑哪些陷阱,以避免以后意识到我的愚蠢并且不得不重构一切?
也许另一种说法是,我的大脑应该遵循什么样的“算法”来确定我应该使用引用与盒子对普通类型,以及切片与数组与向量的对应关系?我不愿意开始使用引用和Box<T>
返回各处,因为我认为这会让我产生一种“Rust in Rust”效果,这不是我想要的!