< 返回版块

Yuan YQ 发表于 2025-02-28 14:30

fish 4.0 发布

fish 是一个使用 Rust 开发的面向 macOS 和 Linux 的交互式命令行工具。此次发布的 4.0 版本包含了大量的更新和优化。简单列举如下:

  1. 绑定符号与改进的按键组合支持
    • 新的按键符号表示法bind命令支持新的按键符号,如bind ctrl-right ,无需再使用复杂的转义序列。
    • 增强的按键区分能力:fish 通过启用终端功能,如 xterm 的 “modifyOtherKey” 和 kitty 键盘协议,改善对按键的区分。在多数终端中可自动生效,少数终端存在问题,如 JetBrains IDEs、Wezterm 和 iTerm 中的部分问题,遇到异常可使用 set -Ua fish_features no-keyboard-protocols 禁用相关协议。
    • 兼容性:新的按键符号为默认设置,对含控制字符的现有绑定仍采用旧的解释方式,以保证兼容性。
  2. 命令行改进
    • 终端集成优化:使用 OSC 133 序列标记提示符和命令输出,更好地与终端集成;在任何终端中为 vi 模式打印光标更改序列。
    • 长命令行处理:能正确处理比屏幕长的命令行,使其可滚动显示。
    • 命令行修改即时生效:使用 commandline 命令进行的修改会立即应用,方便自定义绑定脚本。
    • Ctrl - r 历史分页器改进:支持使用*通配符语法搜索子字符串,且仅作用于当前命令。
    • 默认主题调整:默认主题将命令颜色从 “蓝色” 改为终端的 “正常” 颜色,已使用默认主题的用户需通过 fish_config 重新加载获取新颜色。
  3. 缩写功能增强:现在可以设置缩写仅在作为特定命令的参数时有效,如 abbr --command git co checkout ,还可通过添加函数进一步精确匹配。
  4. 自安装构建方式:新增自安装二进制构建方式,编译出的fish二进制文件包含所有功能、手册页和 webconfig 工具。可创建静态链接二进制文件,方便在不同系统使用。cargo build 默认会创建,cargo install 可安装。官方已为 x86_64 和 aarch64 架构的 Linux 构建并发布在 GitHub 上。
  5. 忽略命令历史记录:通过定义 fish_should_add_to_history 函数,可选择不将特定命令添加到历史记录中,这些命令会作为临时最后一条记录保留,直到运行其他命令才会消失,与处理以空格开头的命令类似。

Github 仓库:https://github.com/fish-shell/fish-shell

官网:https://fishshell.com/

JSON 反序列化工具 arrow-rs 为何如此之快?

文章围绕 arrow-rs 库中 arrow-json 的高效列存 JSON 解码展开,详细介绍其工作原理、Arroyo 的扩展及性能情况,具体内容如下:

  1. 背景与动机:JSON 在流处理管道中广泛应用,其反序列化速度影响数据处理效率。在高规模 Flink 管道中,JSON 反序列化占用大量 CPU 时间。Arroyo 流处理引擎基于 Arrow 列存内存格式,需要将行式 JSON 数据高效转换为列存格式。
  2. arrow-json 解码性能:与 Flink SQL 中基于 Jackson 的反序列化器相比,arrow-json 速度提升明显,最高可达 2.3 倍。它在处理大型深度嵌套记录时表现出色,处理含大量空字段的枚举类结构时性能稍弱。
  3. 解码原理
    • 批处理解码:Arrow 以批处理方式操作,将多个 JSON 文档转换为表示模式各列的数组,按列处理数据可提高效率。
    • 借鉴优化思路:借鉴 simdjson 的双遍解码策略,第一遍识别结构令牌并存储位置,第二遍解析为树结构。arrow-json 在此基础上进行调整以处理多个 JSON 文档,其 API 支持流式处理。
    • 解码过程:第一遍将 JSON 解析为扁平 “磁带” 数据结构,构建 tapebytesoffsets 三个数据结构,通过状态机驱动解析过程;第二遍根据模式构建解码器树,利用 “磁带” 数据确定各列数据位置,一次性处理并构建 Arrow 数组。
  4. Arroyo 的扩展
    • 原始 JSON 支持:JSON 与 Arrow 在类型和模式上存在差异,Arroyo 引入原始 JSON 类型,通过特定规则将任意 JSON 值转换为编码字符串存储,利用 “磁带” 解码方式实现高效转换。
    • 无效数据处理:针对 JSON 数据可能出现的格式错误和模式不匹配问题,Arroyo 改进解码器。格式错误时回滚 “磁带” 状态;模式不匹配时,通过新增 validate_row 方法在解码前筛选有效行,可选择返回原始 JSON 用于记录错误信息。
  5. 性能优化方向:当前 arrow-json 仍有性能提升空间,如对更多操作进行 SIMD 优化、直接使用输入数据减少字符串缓冲区构建开销,但可能增加内存使用;在处理含大量空字段数据时,可优化填充空值的性能损耗。

原文地址:https://www.arroyo.dev/blog/fast-arrow-json-decoding

Torii 用于 Rust 应用的身份验证框架

Torii 是一个功能强大的适用于 Rust 应用程序的身份验证框架,它让你能够完全掌控用户数据。与 Auth0、Clerk 或 WorkOS 等将用户信息存储在其云端的托管解决方案不同,Torii 使你能够拥有并管理自己的身份验证堆栈,同时通过灵活的插件系统提供现代化的身份验证功能。

使用 Torii,你可以兼得两全其美之利 —— 既拥有无密码登录、社交 OAuth 和通行密钥等强大的身份验证功能,又能完全掌控数据主权,并且可以将用户数据存储在你选择的任何地方。

Github 仓库:https://github.com/cmackenzie1/torii-rs

--

From 日报小组 Yuan YQ

社区学习交流平台订阅:

评论区

写评论

还没有评论

1 共 0 条评论, 1 页