【Rust日报】2022-08-30 Diesel 2.0.0 发布

Diesel 2.0.0 发布

Diesel 是一个安全的、可扩展的 ORM 和 Rust 查询构建器。其借助 Rust 的语言特性,在不牺牲性能的前提下,消除了运行时错误。

其支持的数据库有:

  • PostgreSQL
  • MySQL
  • SQLite

本版本是超过 135 人历时 3 年多开发的结果。自上一个 RC 版本以来,合并了以下细微更改:

  • 从 v0.3 开始支持日期/时间类型
  • 对 rustc 生成的错误消息的一些可选的修正
  • Selectable 这个 derive 的一些改进
  • 将 extensive join 的编译时间减少了约 4 倍的修复

详细内容请参考 CHANGELOG

Fearless cargo update

Fearless Development 是 Rust 的一个关键词,"If it compiles, it works"。

但是在 Rust 的整套开发流程中,有一个环节并不是让人 fearless,也就是 cargo update,即升级项目的依赖。

绝大多数情况下,cargo update 都没有什么后果,伴随着依赖的优化,通常还能带来一定的性能提升。但是在某些场景下,由于 API 的变化(函数签名,auto-trait 等),cargo update 会造成整个项目编译不通过的情况,此时要么选择回退版本,要么选择拥抱新的 breaking change ...... 无论如何都很棘手。

但是,借助 cargo-semver-check 这个工具,可以提早发现 cargo update 潜在的依赖问题,从而避免上述一系列问题,提升开发体验。感兴趣的可以参考其 Github 主页 和 原文。

使用 Rust 重写 blog 构建工具

Jonas Hietala 九年来,一直用 Hakyll 作为静态站点的生成工具,如今,他终于下定决心,打算转向自己用 Rust 亲手编写的自定义站点生成器,并解决以下几点问题:

  1. 越来越慢的速度。Hakyll 的编译速度实再不能令人满意;
  2. 外部依赖项。虽然站点生成器本身是用 Haskell 编写的,但除了众多 Haskell 库之外,其中还包含其他依赖项,管理和更新十分烦人,无法专心于博客内容;
  3. 设置问题。跟大量依赖项相关,作者的博客网站有时候会宕机,必须得花时间调试和修复。

作者原先很担心,例如模板引擎、高亮显示的功能无法在 Rust 中实现,但事实证明,每一个功能都有理想的工具辅助实现:

  • 用 pulldown-cmark 来解析 Markdown;
  • 用 syntect 实现语法高亮,能够支持 Sublime Text 语法;
  • 用 yaml-front-matter 解析帖子中的元数据;
  • 用 grass 作为纯 Rust 中的 Sass 编译器;
  • 用 axum 创建负责在本地托管站点的静态文件服务器;
  • 用 hotwatch 监控文件变更,这样就能在文件内容变化时更新页面;
  • 用 scraper 解析生成的 html。用于某些测试和特定转换;
  • 用 rust-s3 将生成的站点上传至 S3 存储端。

最终作者实现了一个不错的 blog 工具,可以参考 Github 仓库地址,项目的实现细节可以参考原文介绍

-- From 日报小组 RustPlumber