内容提要
作者分享了近期技术体验:对Matt Damon的喜爱,Nushell Shell的“一切皆数据”设计理念,用Fennel配置Neovim的尝试,以及对Clojure社区严谨风格的思考。文章还包含一些生活琐事。
延伸解读
Nushell 的“一切皆数据”设计
Nushell 将命令输出视为结构化数据,如 ls 返回表格,可通过管道进行筛选和操作,如 `ls | where size > 1kB`。这种设计简化了脚本编写,但改变了传统 Shell 的重定向和文件描述符概念,需要用户适应。对于习惯 POSIX 命令的用户,可能需要时间调整,但处理外部数据(如 JSON)时更直观。
Fennel 与 Neovim 配置的转换
作者使用 antifennel 将 Lua 配置转换为 Fennel,并通过 nfnl 插件实时编译回 Lua,以保持启动速度。这种转换看似循环,但体现了 Lisp 爱好者对统一语言风格的追求。Fennel 作为 Lua 的 Lisp 方言,可无损互译,但 Neovim 本身不支持直接执行 Fennel,需借助插件或运行时转译。
Clojure 社区的严谨与封闭
Clojure 项目不接受 Pull Requests,需签署贡献者协议,且不开放 Issues,而是使用官方论坛。这种封闭性源于对代码质量的谨慎,避免技术债务。作者认为这种态度值得赞赏,尽管可能限制社区参与,但保证了代码的长期可维护性。
Q&A
Nushell 的核心设计理念是什么?
Nushell 的核心设计理念是“一切皆数据”,即命令的输出不是纯文本,而是结构化数据(如表),可以通过管道进行筛选和处理。
如何用 Nushell 筛选出大于 1kB 的文件并只显示文件名?
可以使用 `ls | where size > 1kB | get name` 命令,其中 `where` 用于过滤,`get name` 用于提取文件名。
作者为什么从 Git Bash 转向 Nushell?
作者在 Windows 上使用 Git Bash 时遇到了一些问题,比如终端会不受控制地输入不明字符、命令行历史丢失、Ctrl+R 无法搜索历史命令等,在 HPCesia 的推荐下尝试了 Nushell,用后觉得回不去了。
Fennel 和 Lua 之间是什么关系?
Fennel 是一种 Lisp 方言,可以编译成 Lua 代码,并且与 Lua 相互翻译没有损失。antifennel 工具可以将 Lua 代码转译成 Fennel。
作者如何用 Fennel 配置 Neovim 并保证启动速度?
作者使用 nfnl 插件将 .fnl 文件实时翻译成 .lua 文件,这样既可以用 Fennel 写配置,又避免了运行时转译带来的性能损失。
作者对 Clojure 社区的严谨风格有何看法?
作者赞赏 Clojure 社区的严谨和克制,比如不接受生成的代码、谨慎添加新代码,认为这种态度值得尊敬,虽然可能带来一定的封闭性,但社群团结热情,值得延续。
作者为什么取消了对 Clojurust 的 Star?
作者发现 Clojurust 的仓库中 Claude 写了 384 条 commit,而作者只写了 39 条,认为大量代码由 AI 生成,不符合 Clojure 社区严谨的风格,因此不敢使用并取消了 Star。
作者在碎碎念中提到了哪些生活琐事?
作者提到在 Bilibili 搜 Paramore 的《All We Know》找不到相关视频,以及在看《生活大爆炸》时对 Sheldon 说 Ubuntu 是 Linux-based System 的吐槽,还有对高中班主任朋友圈中学生电脑上终端显示的吐槽。