ITPub博客

首页 > 数据库 > 数据库开发技术 > 【Rust 日报】2022-11-27 用Rust重写ESLint

【Rust 日报】2022-11-27 用Rust重写ESLint

原创 数据库开发技术 作者:Rust语言中文社区 时间:2022-11-27 23:44:37 0 删除 编辑

用Rust重写ESLint

ESLint 是一个 JS 和 TS 语言的静态分析工具。作者打算重写,期望在其中更多地使用 WebAssembly 和 Rust 来提高性能。

网址:https://tomaszs2.medium.com/nicholas-c-zakas-announced-the-end-of-eslint-code-line-f72c18211666

GitHub:https://github.com/eslint/eslint/discussions/16557

Bevy 0.8到0.9迁移指南

一个手动展示将场景从 bevy 0.8 迁移到 0.9 所需的步骤。

示例代码:https://github.com/PhaestusFox/BevyBasics

视频地址:https://www.youtube.com/watch?v=M3ctrGAa2yw

Anki:卡片记忆工具

Anki 桌面版源代码。

官网:https://apps.ankiweb.net/

GitHub:https://github.com/ankitects/anki

faer-rs:线性代数库

faer 是一个用 Rust 实现的低级别线性代数例程的 crates 集合。目标是为线性代数提供一个功能齐全的库,重点关注可移植性、正确性和性能。看一个矩阵乘法的对比 Benchmark:

    

n faer faer(par) ndarray nalgebra eigen
32 1.2µs 1.2µs 1.1µs 1.9µs 1.2µs
64 8.1µs 8.1µs 7.8µs 10.8µs 5.1µs
96 28µs 11.1µs 26.1µs 34.1µs 10µs
128 65.9µs 16.5µs 35.2µs 79.2µs 32.5µs
192 218.5µs 53.4µs 53.8µs 257.6µs 52.2µs
256 513.8µs 123µs 154.6µs 603.3µs 143.5µs
384 1.7ms 375.5µs 426.2µs 2ms 328.5µs
512 4.1ms 853.5µs 1.3ms 4.7ms 1ms
640 8ms 1.6ms 2.3ms 9.3ms 1.9ms
768 14ms 2.9ms 3.6ms 16.1ms 3.2ms
896 22.2ms 4.7ms 6.5ms 25.9ms 5.8ms
1024 34.1ms 7.1ms 8.9ms 39.1ms 8.1ms

还有一些矩阵运算的 Benchmark 可以进一步阅读 GitHub。

GitHub:https://github.com/sarah-ek/faer-rs

slice-rbtree

一个 #[no_std] 红黑树,打包在单个字节切片中。允许不反序列化整个树来访问树节点。当内存中有一棵巨大的树,但一次只想与几个值交互时会很有用。

一共有两个核心类型:RBTree 和 RBForest,以前者为例:

use slice_rbtree::tree::{tree_size, RBTree, TreeParams};
// RBTree 要求输入切片有一个合适大小(每个节点的大小在编译时是可知的)
let size = tree_size(
TreeParams {
k_size: 50,
v_size: 50,
},
10,
);
let mut buffer = vec![0; size];

let mut movie_reviews: RBTree<String, String, 50, 50> =
RBTree::init_slice(&mut buffer).unwrap();

// 插入一些数据
movie_reviews.insert("Office Space".to_string(), "Deals with real issues in the workplace.".to_string());
movie_reviews.insert("Pulp Fiction".to_string(), "Masterpiece.".to_string());
movie_reviews.insert("The Godfather".to_string(), "Very enjoyable.".to_string());
movie_reviews.insert("The Blues Brothers".to_string(), "Eye lyked it a lot.".to_string());

// 检查指定节点
if !movie_reviews.contains_key("Les Misérables") {
println!(
"We've got {} reviews, but Les Misérables ain't one.",
movie_reviews.len()
);
}

// 删除节点
movie_reviews.remove("The Blues Brothers");

// 查找key相关值
let to_find = ["Up!".to_string(), "Office Space".to_string()];
for movie in &to_find {
match movie_reviews.get(movie) {
Some(review) => println!("{movie}: {review}"),
None => println!("{movie} is unreviewed."),
}
}

// 遍历
for (movie, review) in movie_reviews.pairs() {
println!("{movie}: \"{review}\"");
}

与 BTreeMap 的 Benchmark:

BTreeMap RBTree
Deserialize 10 elements 472 ns 13 ns
Deserialize 1280 elements 109'000 ns 13 ns
Access one element in the tree of 10 elements 10 ns 23 ns
Access one element in the tree of 1280 elements 19 ns 33 ns
Insert one element in the tree of 10 elements 78 ns 147 ns
Insert one element in the tree of 1280 elements 106 ns 239 ns

GitHub:https://github.com/solcery/slice-rbtree

Rust Web API模板

一个旨在说明如何使用 Rocket,Diesel 和 rocket_opapi 的项目。

GitHub:https://github.com/DilecPadovani/rocket_diesel_demo


From 日报小组 长琴

社区学习交流平台订阅:

  • Rustcc 论坛:支持 rss

  • 微信公众号:Rust 语言中文社区


                                                                                                    

                                                                                                    

                                                                                                    

原文作者:Rust语言中文社区;如有侵权,请联系管理员删除。

请登录后发表评论 登录
全部评论

注册时间:2020-06-11

  • 博文量
    1769
  • 访问量
    718516