fish 4.0 发布
fish 是一个使用 Rust 开发的面向 macOS 和 Linux 的交互式命令行工具。此次发布的 4.0 版本包含了大量的更新和优化。简单列举如下:
- 绑定符号与改进的按键组合支持
- 新的按键符号表示法:
bind
命令支持新的按键符号,如bind ctrl-right
,无需再使用复杂的转义序列。 - 增强的按键区分能力:fish 通过启用终端功能,如 xterm 的 “modifyOtherKey” 和 kitty 键盘协议,改善对按键的区分。在多数终端中可自动生效,少数终端存在问题,如 JetBrains IDEs、Wezterm 和 iTerm 中的部分问题,遇到异常可使用
set -Ua fish_features no-keyboard-protocols
禁用相关协议。 - 兼容性:新的按键符号为默认设置,对含控制字符的现有绑定仍采用旧的解释方式,以保证兼容性。
- 新的按键符号表示法:
- 命令行改进
- 终端集成优化:使用 OSC 133 序列标记提示符和命令输出,更好地与终端集成;在任何终端中为 vi 模式打印光标更改序列。
- 长命令行处理:能正确处理比屏幕长的命令行,使其可滚动显示。
- 命令行修改即时生效:使用
commandline
命令进行的修改会立即应用,方便自定义绑定脚本。 - Ctrl - r 历史分页器改进:支持使用
*
通配符语法搜索子字符串,且仅作用于当前命令。 - 默认主题调整:默认主题将命令颜色从 “蓝色” 改为终端的 “正常” 颜色,已使用默认主题的用户需通过
fish_config
重新加载获取新颜色。
- 缩写功能增强:现在可以设置缩写仅在作为特定命令的参数时有效,如
abbr --command git co checkout
,还可通过添加函数进一步精确匹配。 - 自安装构建方式:新增自安装二进制构建方式,编译出的
fish
二进制文件包含所有功能、手册页和 webconfig 工具。可创建静态链接二进制文件,方便在不同系统使用。cargo build
默认会创建,cargo install
可安装。官方已为 x86_64 和 aarch64 架构的 Linux 构建并发布在 GitHub 上。 - 忽略命令历史记录:通过定义
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 的扩展及性能情况,具体内容如下:
- 背景与动机:JSON 在流处理管道中广泛应用,其反序列化速度影响数据处理效率。在高规模 Flink 管道中,JSON 反序列化占用大量 CPU 时间。Arroyo 流处理引擎基于 Arrow 列存内存格式,需要将行式 JSON 数据高效转换为列存格式。
- arrow-json 解码性能:与 Flink SQL 中基于 Jackson 的反序列化器相比,arrow-json 速度提升明显,最高可达 2.3 倍。它在处理大型深度嵌套记录时表现出色,处理含大量空字段的枚举类结构时性能稍弱。
- 解码原理
- 批处理解码:Arrow 以批处理方式操作,将多个 JSON 文档转换为表示模式各列的数组,按列处理数据可提高效率。
- 借鉴优化思路:借鉴 simdjson 的双遍解码策略,第一遍识别结构令牌并存储位置,第二遍解析为树结构。arrow-json 在此基础上进行调整以处理多个 JSON 文档,其 API 支持流式处理。
- 解码过程:第一遍将 JSON 解析为扁平 “磁带” 数据结构,构建
tape
、bytes
、offsets
三个数据结构,通过状态机驱动解析过程;第二遍根据模式构建解码器树,利用 “磁带” 数据确定各列数据位置,一次性处理并构建 Arrow 数组。
- Arroyo 的扩展
- 原始 JSON 支持:JSON 与 Arrow 在类型和模式上存在差异,Arroyo 引入原始 JSON 类型,通过特定规则将任意 JSON 值转换为编码字符串存储,利用 “磁带” 解码方式实现高效转换。
- 无效数据处理:针对 JSON 数据可能出现的格式错误和模式不匹配问题,Arroyo 改进解码器。格式错误时回滚 “磁带” 状态;模式不匹配时,通过新增
validate_row
方法在解码前筛选有效行,可选择返回原始 JSON 用于记录错误信息。
- 性能优化方向:当前 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
社区学习交流平台订阅:
评论区
写评论还没有评论