Show HN: Nibble

Hacker News Top 工具

摘要

Nibble 是一种类 C 的系统编程语言,用 3000 行 C 代码实现,无需外部依赖或堆分配即可生成 LLVM IR。它支持 defer、递归、多种类型、结构体、指针,并包含图形演示。

尝试用约 3000 行 C 代码实现单遍 LLVM 前端,无需外部依赖、malloc 或 AST。附带一些图形示例。IR 不完美,README 中提到了一个具体缺陷。
查看原文 导出为 Word 导出为 PDF
查看缓存全文

缓存时间: 2026/05/14 06:21

glouw/nibble

来源:https://github.com/glouw/nibble

Nibble 是一种类 C 的系统编程语言。

Nibble 用 3000 行 C 语言编写,旨在演示一种无需依赖外部库或堆内存分配即可生成 LLVM IR 的方法。

Nibble 支持 defer、递归、整数、浮点和布尔类型、结构体(即命名的类型)、类似 GLSL 的结构体运算符、指针、函数指针、分支、循环、类型检查、通过泛型指针实现的基本 C 互操作,以及合理的错误信息。

以下包含四个图形演示,展示了 Nibble 的能力。要尝试它们,请确保已安装 SDL2 和 Clang,然后运行 make。Clang 会编译 main.c 并输出 nibble 编译器,随后 nibble 会编译并运行这些图形演示。在这四个演示中,有两个是多线程软件渲染的流行 shader-toy 演示,一个是红黑树实现演示,最后一个演示了游戏编程的基本设置。

想法

Nibble 采用自上而下的单遍编译方式,并且有意地在循环内也自由使用 alloca。这种简化的前端设计大大提高了 main.c 的可读性,但在较低(有时甚至是较高)的 Clang 后端优化级别下会导致栈溢出。我原本以为 Clang 的后端优化器会将所有 alloca 提升到函数的顶层,但生活就是这样。我曾打算探索 stacksave/stackrestore,但我的 LLVM 好奇心已经基本得到满足,我认为这个编译器暂时已经完成了。

相似文章

将 Python 转译为 Lisp

Lobsters Hottest

LispE 是 NAVER 推出的一款开源 Lisp 方言,兼具函数式与数组编程特性,并支持 PyTorch、llama.cpp 以及 MLX 等 AI 库。该语言既可作为原生应用运行,也可打包为支持多线程与现代函数式编程特性的 WebAssembly 库。

用 Zig 写一个 C 编译器

Hacker News Top

一位开发者记录了用 Zig 语言、按照 Nora Sandler 的教程系列构建名为 paella 的 C 编译器的全过程。