我不小心一个方案

一篇俏皮的博客文章谈到“意外地”造出一种类似 Scheme 的语言,引发了关于什么才真正算 Scheme 的讨论,涉及 Greenspun 定律以及 JavaScript 原本想做成浏览器内 Scheme、却受市场与语法决策限制的起源。评论者还为不熟悉网络俚语的读者解释了这个没有动词、基于梗的标题,同时分享了学习和使用多种 Lisp 方言(如 Common Lisp、Scheme、Clojure、Janet 和 Racket)的资源、轶事和看法。整条讨论凸显了 Lisp 家族语言的概念力量与文化怪癖,从宏系统和垃圾回收到为了好玩而编写编译器和解释器的快乐(以及偶尔的痛苦)都涵盖其中。

标题、梗图与刻意的蹩脚语法

  • 很多评论都在问“我不小心一个方案”里缺少的动词是什么。
  • 其他人将其解释为一个古老的互联网梗(“I accidentally [缺失动词] X”),并把它与类似的梗联系起来(“one does not simply…”,LOLcat 风格)。
  • 一些把英语作为第二语言的人觉得这种用法令人困惑或恼火;另一些人则认为这表明了一种俏皮、非正式的语气,是有意的文字游戏,而不是错误。
  • 也有人从语言学角度拆解它(省略动词、把副词当动词开的玩笑、花园路径效应)。

什么才算 Scheme,以及 JavaScript 的关系

  • 争论集中在 JavaScript 是“一个 Scheme”、“受 Scheme 影响”,还是根本不是 Scheme。
  • 一方认为 Scheme 的定义很明确(通过它的报告),所以早期 JS 不符合。
  • 其他人指出,受尊敬的语言设计者曾把 JS 称为 Scheme,并认为分类学是模糊的,某种程度上也有些空洞。
  • 历史轶事:JS 最初打算做成浏览器里的 Scheme,后来被管理层和市场营销改动;有人把它描述为“穿着 Java 衣服的 Lisp”。
  • 还提到了 Greenspun 定律:复杂系统/DSL 往往会随着时间推移“意外地变成一个 Scheme”。

S-Types 和 S-Expressions

  • 一位评论者回忆起研究实习中那些晦涩的 “S-types”:本质上是作为数据交换格式的、规范良好的 S-expression。
  • 另一位把这与密码系统的标准化 S-expression 语法(SPKI/SDSI)联系起来;并惊讶于该规范竟然被重新启用。

学习与使用 Lisp

  • 大家对学习一门 Lisp 表现出强烈热情;许多人说 Lisp 程序员看起来玩得更开心。
  • 推荐如下:
    • Common Lisp:速度快、成熟、工具链强大。
    • Clojure:工作机会多;能教会不可变性和优雅组合;有人称赞题库网站。
    • Racket:被认为尤其有趣。
    • Janet:轻量、可嵌入;社区很有趣,但缺少传统的 cons cells,因此在一些人看来不那么“像 Lisp”。
  • 多人推荐 SICP 及其讲座。
  • 也有人建议通过“自己写一个 Lisp”项目(比如 MAL)来学习,但另一些人提醒说,在孤立环境里发明自己的方言,可能会限制你对主流 Lisp 文化和概念的理解。

实现细节、GC 与数据结构

  • 讨论涉及 REPL、基于镜像的开发以及重启机制,这些被视为 Lisp “有趣体验”的核心部分。
  • 有些人不喜欢 Common Lisp 的镜像/分发模型;另一些人则通过以源码为中心的工作流来绕开它。
  • Janet 对数组/元组的偏重引发了链表与数组性能的讨论;有人认为链表很少是正确答案,另一些人则强调问题相关的权衡。
  • 还简短讨论了垃圾回收器:一位评论者总体上反对 GC,另一些人提到对替代 GC(例如 Whiffle)的兴趣,以及在其他项目中测试 GC 的经历。

链接文章的写作风格

  • 多人称赞这篇文章的文风俏皮、信息密集,而且“装腔作势得很好”。
  • 有人指出,这种风格作为博客文章很令人愉快,但如果用在技术文档里就很糟糕。