微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有一种方法可以优化用于SQL查询等迭代器的Rust过滤器?

如何解决有没有一种方法可以优化用于SQL查询等迭代器的Rust过滤器?

我注意到Rust迭代器在某种程度上类似于SQL查询。由于我不熟悉sql也不对其进行优化(尽管我确实确实对查询进行了大量优化),Rust或任何其他语言是否有办法优化迭代样式过滤器的编译时间?例如,

struct City {
    population: u64,name: String,}

fn heavy_computation_criteria(population: u64) -> bool {
    unimplemented!();
}

fn main() {
    let cities = vec![ ... ];
    let matches = cities
        .iter()
        .filter(|city| heavy_computation_criteria(city.population))
        .filter(|city| city.population > 1000)
        .map(|city| city.name);
}

类似于类似的东西

SELECT name FROM cities WHERE population > 1000 AND cities.heavy_computation_criteria(cities.population)

我想sql将首先通过填充而不是繁重的计算标准进行过滤。铁锈有这样的优化方法吗?

解决方法

我认为在某种程度上-是的。您可以想象,迭代器结构具有一个用于存储过滤器的字段,并且仅在栅栏点上(在您的示例中为map()上),它会计算过滤器。

由于过滤器是Rust中的闭包,因此语言运行时无法在编译之前对其进行评估。但是它可以进行一些启发式操作,例如,想到什么,在一个(很少)元素上评估每个存储的过滤器,以计算其成本。然后可以将它们从低成本重新排列为高成本。

请记住,我不知道这种方法是否可以提高速度。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。