【问题标题】:What is the idiomatic way to implement a trait for a large number of arrays in stable Rust?在稳定的 Rust 中为大量数组实现特征的惯用方法是什么?
【发布时间】:2019-07-30 06:59:34
【问题描述】:

鉴于我的特征 T 和一大组 std/core 数组(不是切片),我怎样才能使这些数组的 T 实现可用于其他板条箱在稳定的 Rust 上?

通过四处搜索,似乎我唯一的选择(不回避这个问题)是:

  1. 等待 rfc 2000 稳定实现的 rust 版本:https://github.com/rust-lang/rust/issues/44580
  2. 为每个数组手动实现特征。

选项 1 不可接受。选项 2 导致编译时间非常长(尤其是当数组集超过 5000 种类型时)。将每个实现隐藏在其自己的功能后面,即功能impl-t-for-array-N 有条件地在T 的实现中为数组[U;N] 编译,从而大大减少了编译时间。 (编译时间从几十分钟到几秒钟)。但是,处理数千个特征造成的延迟仍然很明显。

使用功能和手动实现是处理稳定生锈问题的最惯用方法,还是我缺少更惯用的方法?

【问题讨论】:

  • 可能是 X/Y 问题。为什么首先需要支持这么多数组?
  • 不得不为 5000 个不同的数组提供一个特征的实现听起来很糟糕。通常最多有 32 个元素,而且我还看到一些 crate 只做 2 的幂([T; 64]、[T; 128]、[T; 256] 等)。当然,切片类型总是存在的。
  • 为什么等待 rfc 2000 是不可接受的,我们都在等待。

标签: arrays rust


【解决方案1】:

在稳定的 rust 上使用特性和手动实现是处理这个问题的最惯用的方法

是的。例如,检查Debug trait 及其来源——你可以看到 rust 使用特殊的宏来为长度 的数组实现它

【讨论】:

    猜你喜欢
    • 2022-08-18
    • 1970-01-01
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 2016-03-30
    • 1970-01-01
    • 2018-09-17
    相关资源
    最近更新 更多