Polars 发布 1.0 版本
Polars 是一个基于列存储、多线程的查询引擎,使用 Rust 实现,主要接口是 Python,但也支持 NodeJS、R、SQL 和 Rust,其 1.0 版本正式发布,并提供了升级指南和完整的变更日志。
目前,Polars 已成为一个重要的数据建模工具,拥有 27.5K GitHub 星标和每月超过 700 万次下载。 本次更新,引入了 GPU 加速和新的流处理引擎,提升了性能和内存效率。 未来还计划开发 Polars Cloud、扩展 SQL 支持、非等值连接等功能。
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 页
评论区
写评论还没有评论