News Hacker|极客洞察

20 8 小时前 github.com
🤯Nibble:3k 行 C 的单遍 LLVM 前端、无 AST 无 malloc
没 AST 没 malloc,就算把语言设计讲清了?

🎯 讨论背景

这是一个 Hacker News 的 Show HN 项目,Nibble 看起来是一个用 C 实现的小型语言/编译器前端,直接面向 LLVM IR(LLVM 的中间表示)。评论者关注的重点不是“又一个 demo”,而是它用很少的代码完成了单遍编译、没有 AST(抽象语法树)和 malloc(C 语言动态内存分配函数)等常见结构。语言本身似乎有 `defer` 之类的特性,源码文件名 main.n 也暗示它有独立语法和专用扩展名。与此同时,项目页面用了动画 readme、logo 和 shader 视觉效果,带来了很强的展示感,也引发了对可读性和无障碍的讨论。

📌 讨论焦点

编译器实现极简化

评论者最震惊的是它的实现路径:一个用 C 写的单遍 LLVM frontend,规模只有约 3k 行,却没有 AST,也没有常规的 malloc 驱动内存分配。这种写法在编译器项目里很少见,所以很多人直接把它形容为“wild”或“impressive”。还有人特别想继续追问 IR 能扩展到什么程度,看看这种极简架构能否支撑更复杂的语言功能。

[来源1] [来源2]

语言语义与文档不足

也有人觉得项目很酷,但缺少对语言本身的解释。有人看了两个 main.n 文件后,仍然不清楚 `defer` 怎么工作,内存管理机制也像个谜。还有评论指出仓库实际上可能只有约 1000 行,这与“3k 行”的印象不一致,更让人希望看到更完整的语言说明和实现边界。

[来源1]

视觉设计与品牌

不少评论纯粹是在夸外观和品牌设计。logo 被认为非常抓眼,甚至让人有种“脑子被轻轻挠到”的感觉。主页上的极简风格和 Kishimisu 的 shader 视觉效果也被点名表扬,说明这个项目不仅技术上吸睛,展示层面也很用心。

[来源1] [来源2]

动画可读性与无障碍

有评论提醒,readme 里的动画元素可能会影响部分人的阅读体验,尤其是对 sensory processing issues 敏感的用户。问题点不在于动画本身,而在于文字周围持续运动会让人难以专注。后续回复则提到主流浏览器可以“hide distracting elements”,但也有人追问这类感官处理问题具体指什么。

[来源1] [来源2] [来源3]

完成度与交付感

另一类反应是对“真的做出来并发布了”这件事的认可。有人把它视为少见的好 side project,强调这种项目不是停在 README 里的概念,而是已经交付成品。这个评价和技术惊叹相呼应,强调的是完成度而不只是想法。

[来源1]

命名含义困惑

也有人对项目名本身感到疑惑,猜它是在影射 snake clone 或 half-byte。这个问题说明名字可能带双关意味,但对没看上下文的人来说并不直观。它更多激起好奇,而不是立即传达项目用途。

[来源1]

📚 术语解释

LLVM frontend: 把源码转换成 LLVM IR 的编译前端,常用于快速构建语言原型或编译器。

AST: Abstract Syntax Tree,抽象语法树;传统编译器常用来表示程序结构的中间数据结构。

IR: Intermediate Representation,中间表示;编译器内部用于分析、优化和生成目标代码的表示层。

malloc: C 语言的动态内存分配函数;评论中强调该项目没有依赖它。