< 返回版块

rust 日报 babpstep 发表于 2024-07-03 00:05

Tags:polars,melisearch,generic

Polars 发布 1.0 版本

Polars 是一个基于列存储、多线程的查询引擎,使用 Rust 实现,主要接口是 Python,但也支持 NodeJS、R、SQL 和 Rust,其 1.0 版本正式发布,并提供了升级指南和完整的变更日志。

目前,Polars 已成为一个重要的数据建模工具,拥有 27.5K GitHub 星标和每月超过 700 万次下载。 本次更新,引入了 GPU 加速和新的流处理引擎,提升了性能和内存效率。 未来还计划开发 Polars Cloud、扩展 SQL 支持、非等值连接等功能。

changelog

升级指南

Meilisearch 发布 1.9 版本

Meilisearch 发布了 1.9 版本,带来了一些搜索上的优化,主要包含:

  • 排名分数阈值:可以排除低排名分数的搜索结果,提高搜索结果的相关性。
  • 按属性分组:在搜索时定义一个独特属性,只返回具有该属性值的一个文档。
  • 频率匹配策略:优先显示包含最不常见查询词的结果。
  • 相似文档 API:引入了一个新的 AI 搜索功能,可以搜索与现有文档相似的文档。

这些更新旨在提升搜索的准确性和效率。

更新日志

Rust 中使用泛型函数的小技巧

每次调用泛型函数时,编译器会为每种类型组合生成一个实现,这可能会产生大量代码。

通过将大部分代码移到一个内部函数中,只生成一次大块代码,而多次生成较小的类型转换代码。

Rust 标准库中就大量采用了这种技巧,例如:

#[stable(feature = "rust1", since = "1.0.0")]
pub fn with_extension<S: AsRef<OsStr>>(&self, extension: S) -> PathBuf {
    self._with_extension(extension.as_ref())
}

fn _with_extension(&self, extension: &OsStr) -> PathBuf {
    let self_len = self.as_os_str().len();
    let self_bytes = self.as_os_str().as_encoded_bytes();

    let (new_capacity, slice_to_copy) = match self.extension() {
        None => {
            // Enough capacity for the extension and the dot
            let capacity = self_len + extension.len() + 1;
            let whole_path = self_bytes.iter();
            (capacity, whole_path)
        }
        Some(previous_extension) => {
            let capacity = self_len + extension.len() - previous_extension.len();
            let path_till_dot = self_bytes[..self_len - previous_extension.len()].iter();
            (capacity, path_till_dot)
        }
    };

    let mut new_path = PathBuf::with_capacity(new_capacity);
    new_path.as_mut_vec().extend(slice_to_copy);
    new_path.set_extension(extension);
    new_path
}

原文链接

-- From 日报小组 RustPlumber

社区学习交流平台订阅:

评论区

写评论

还没有评论

1 共 0 条评论, 1 页