< 返回版块

长琴 发表于 2022-04-10 23:19

Tags:rust,日报,scylla-rust-driver,felix,diskonaut,seize,offensive-notion,wachy,move,nvim-compleet,bpaf

scylla-rust-driver:适用于 Rust 的异步 CQL 驱动程序

这是 ScyllaDB 的客户端驱动程序,用纯 Rust 编写,使用 Tokio 实现完全异步 API。尽管针对 ScyllaDB 进行了优化,但也与 Apache Cassandra 兼容。

例子:

let uri = "127.0.0.1:9042";

let session: Session = SessionBuilder::new().known_node(uri).build().await?;

if let Some(rows) = session.query("SELECT a, b, c FROM ks.t", &[]).await?.rows {
    for row in rows.into_typed::<(i32, i32, String)>() {
        let (a, b, c) = row?;
        println!("a, b, c: {}, {}, {}", a, b, c);
    }
}

对此,团队还专门写了一篇文章《为什么我们要将数据库驱动程序移植到异步 Rust》,他们想把所有的数据库驱动底层都用 Rust。

文章链接:https://thenewstack.io/why-were-porting-our-database-drivers-to-async-rust/

文档:https://rust-driver.docs.scylladb.com/stable/index.html

GitHub:https://github.com/scylladb/scylla-rust-driver

felix:tui文件管理器

有类似 vim 的键映射。受到 vifm 的启发,同时关注:

  • 简单快速
  • 容易配置如何打开文件

508bcf001da66e418e46a809872f3c44.gif

GitHub:https://github.com/kyoheiu/felix

diskonaut:终端磁盘导航

工作原理:给定硬盘驱动器上的路径(也可以是根路径,例如 /),diskonaut 会扫描它并将其元数据索引到内存,以便浏览其内容(即使在仍在扫描时)。完成后,可以在子文件夹中导航,获取占用磁盘中文件的树状图表示,甚至可以删除文件或文件夹,diskonaut 将跟踪在此会话中释放了多少空间。

e203fcda017e94134b98838787969062.gif

GitHub:https://github.com/imsnif/diskonaut

seize:为并发数据结构提供快速、高效且可靠的内存回收

并发数据结构面临着决定何时可以安全地释放内存的问题。尽管某个对象可能已在逻辑上被删除,但之前加载该对象的其他线程可能仍在访问它,因此立即释放该对象并不安全。多年来,已经设计了许多算法来解决这个问题。但是,大多数传统的内存回收方案在性能、效率和稳健性之间进行权衡。例如,基于 epoch 的回收快速且轻量级,但缺乏鲁棒性,因为停滞的线程可以阻止回收所有已停用的对象。Hazard pointers 是另一种流行的方案,可跟踪单个指针,使其高效且鲁棒,但通常要慢得多。

另一个通常不被考虑的问题是工作负载平衡。在大多数回收方案中,停用对象的线程是回收对象的线程。这会导致读取为主(read-dominated)的工作负载中的回收不平衡;当只有一小部分线程正在写入时,并行性会降低。这在使用由 Tokio 等异步运行时提供的 M:N 线程模型时尤其普遍。

Seize 基于 hyaline 回收方案,该方案使用引用计数来确定何时可以安全地释放内存。但是,引用计数器仅用于已停用的对象,从而避免了传统引用计数方案带来的高开销,其中每次内存访问都需要修改共享内存。性能通常与基于 epoch 的方案相当或优于基于 epoch 的方案,而内存效率与 Hazard pointers 相似。回收是自然平衡的,因为最后一次引用对象的线程是释放它的线程。还跟踪了 Epoch 以防止线程停滞,使回收真正无锁。

Seize 与所有支持单字原子操作(如 FAA 和 CAS)的现代硬件兼容。

文档:https://docs.rs/seize/latest/seize/

GitHub:https://github.com/ibraheemdev/seize

OffensiveNotion:C2平台

特征包括:

  • 📡 基于 Notion notetaking app 构建的全功能 C2 平台。
  • 🚧 轻松设置:设置 Notion 开发人员 API 帐户,将 Agent 放到目标处执行。
  • 🖥️ 在 Rust 中内置的跨平台代理,使用相同的代码库为 Linux、Windows 和 macOS 编译。包括一个 Python 设置/控制器脚本以简化过程。
  • ☢️ 一系列功能,包括端口扫描、权限提升、异步命令执行、文件下载和 shell 代码注入,所有这些都可以通过 Notion 页面的舒适控制!
  • 📜 随时记录!Agent 会标识特殊语法来运行命令,可随时使用 Notion 页面的其余部分来记录操作。
  • 🤝 协作设计!允许多个人编辑和查看笔记。监听页面可以处理多个代理,可以邀请红队朋友访问页面。这是一个团队服务器!
  • 📱移动 C2!从您的移动设备上使用 Notion 应用程序,可以从任何地方向代理发出命令。
  • 🕵️ 隐身!C2 在本机上通过 Notion API 通信。C2 流量看起来像是有人正在将 Notion 用于其预期目的。

GitHub:https://github.com/mttaggart/OffensiveNotion

wachy:适用于 Linux 的动态跟踪探查器

wachy 是一个基于 eBPF 的性能 debug UI 工具。需满足:

  • Linux 4.6 或更高版本的内核
  • 跟踪的二进制文件应采用编译语言,并具有调试符号

f088e78bd16b9063c51ca63692cecb1c.png

介绍:https://www.rubrik.com/blog/technology/22/1/introducing-wachy-a-new-approach-to-performance-debugging

主页:https://rubrikinc.github.io/wachy/

GitHub:https://github.com/rubrikinc/wachy

move语言

Move 是一个新的可编程平台,用于区块链和其他安全性和正确性至关重要的应用。它是一种可执行的字节码语言,旨在提供安全和可验证的面向事务的计算。该语言具有强大的类型系统,具有线性资源类型,运行时检查和形式验证。

GitHub:https://github.com/diem/move

nvim-compleet:nvim自动补全

nvim 自动补全框架。需要 Neovim 0.7+,由于 Rust 代码必须编译,因此还需要 rustup 工具链(rust从1.58+,make,ar)才能使用。

f5643dbb9a8d6fd81c5019f6674fceca.gif

GitHub:https://github.com/noib3/nvim-compleet

bpaf:命令行解析器

通过从针对灵活性和编译时间优化的组件组成解析器来解析命令行参数。

use bpaf::*;

#[derive(Clone, Debug)]
struct Opts {
    speed: f64,
    distance: f64,
}

fn opts() -> Opts {
    let speed = short('k')
        .long("speed")           // give it a name
        .help("speed in KPH")    // and help message
        .argument("SPEED")       // it's an argument with metavar
        .from_str()              // that is parsed from string as f64
        .map(|s: f64| s / 0.62); // and converted to mph

    let distance = short('d')
        .long("distance")
        .help("distance in miles")
        .argument("DISTANCE")
        .from_str();

    // combine parsers `speed` and `distance` parsers into a parser for Opts
    let parser = construct!(Opts { speed, distance });

    // define help message, attach it to parser, and run the results
    Info::default().descr("Accept speed and distance, print them").for_parser(parser).run()
}

fn main() {
    let opts = opts();
    println!("Options: {opts:?}");
}

GitHub:https://github.com/pacak/bpaf

Rust全栈教程

用于 Rust 的 WebAssembly 工具已经取得了很大的改进,并且在过去两年中已经非常成熟。借助 Trunk 等工具,以及能够使用 yewdioxus 等各种框架编写前端代码,构建和打包步骤现在变得更加简单。现在很多 crate 也支持 wasm,基本的如 chrono 或更高级别的库如 plotters

此外,Rust 服务器端的可用选项有所增加。随着像 tower 这样的项目为客户端 / 服务器提供可重用的构建块,像 axum 这样的 Web 服务器出现了,它允许快速组合 Web 应用程序而无需太多模板。

在本教程中,作者将使用 Rust 作为前后端的默认配置,这适用于使用 WASM/JS 进行渲染和路由的典型单页应用。服务器选择了 axum,前端选择了 yew,其他选择也应该类似。

文章:https://robert.kra.hn/posts/2022-04-03_rust-web-wasm/

GitHub:https://github.com/rksm/axum-yew-setup


From 日报小组 长琴

社区学习交流平台订阅:

评论区

写评论

还没有评论

1 共 0 条评论, 1 页