## Ruby 的哲学:超越循环
本文探讨了 Ruby 与 Python 等语言之间的一个根本区别:迭代(或循环)的处理方式。作者最初被 Ruby 的 `for` 循环语法从 Python 中吸引过来,但很快发现这不是“Ruby 的方式”。Ruby 强调*消息传递*,而不是传统的函数调用。你不是*告诉*某个东西去循环,而是*请求*一个对象执行一个动作,比如使用 `.times` 迭代特定次数。
这源于 Ruby 从 Smalltalk 那里获得的灵感,在 Smalltalk 中,一切都是消息。方法不是直接*调用*的,而是*发送*消息。这允许了令人难以置信的灵活性——甚至对象能够重新定义它们对消息的响应方式,从而可能“谎报”它们的行为。
至关重要的是,这种范式将重点转移到对象自主性和“协议优先于语法”的方法上。通过实现像 `.each` 这样的方法,对象获得了响应更广泛的迭代消息的能力,从而遵守既定的协议。作者总结说,理解这种消息传递哲学是编写真正地道的 Ruby 的关键,超越了简单地复制来自其他语言的熟悉模式,并拥抱 Ruby 独特的风格。
## Baker:快速、灵活的项目脚手架工具
Baker 是一个用 Rust 编写的命令行工具,用于快速搭建具有可定制模板的新项目。它以其语言无关的方法脱颖而出,支持用于自动化任务的钩子,无论项目的语言如何。安装可以通过 Scoop、Homebrew 或可下载的二进制文件轻松完成。
模板使用 `baker.yaml`(或 JSON)定义,以配置设置、提示和文件生成。Baker 利用 MiniJinja 模板引擎,允许动态内容、条件文件创建以及文件名和内容中的变量替换。它支持结构化数据输入(JSON/YAML),并通过 JSON Schema 进行验证,并提供灵活的问题类型,包括单个输入、布尔值、多项选择和复杂的 JSON/YAML 编辑器。
主要功能包括用于自定义逻辑的预/后钩子、特定于平台的配置以及用于条件提示的强大 `ask_if` 属性。答案可以交互式地提供,通过文件提供,或通过管道输入以进行 CI/CD 集成。Baker 优先考虑安全性,具有钩子执行警告,并提供轻量级、跨平台体验。它是一个比 Kickstart 和 Cookiecutter 等工具更强大、更灵活的替代方案。
## 对 Next.js 15 & React 服务器组件的批评
本文详细描述了一位开发者在使用 Next.js 的 App Router 和 React 服务器组件 (RSC) 时遇到的挫败感,认为它们的基本设计选择存在缺陷,尽管最初很有前景。作者和许多其他 Web 开发人员认为该系统过于复杂且不直观。
RSC 将组件分为“服务器”和“客户端”类型,旨在实现高效的数据获取和渲染。然而,令人困惑的命名约定和限制——例如难以轻松执行乐观更新——导致代码混乱和不必要的复杂性。导航感觉缓慢,因为即使客户端已经拥有数据,每个页面都会重新获取数据。
作者成功地将一个项目从 Next.js 迁移到 TanStack Start,强调了简化的开发体验、改进的性能和更好的类型安全性。他们提倡使用 Astro 或 Fresh 等替代框架来构建静态网站,并使用 TanStack Start 来构建动态 Web 应用程序。虽然称赞了 `next/metadata` 和 `next/og`,但作者最终认为 Next.js 缺乏对开发者的尊重,并鼓励探索 Vite 生态系统中更注重开发者体验的工具。他们总结说,个人将优先考虑重视开发者体验的工具。