Show HN: Nibble
摘要
Nibble 是一种类 C 的系统编程语言,用 3000 行 C 代码实现,无需外部依赖或堆分配即可生成 LLVM IR。它支持 defer、递归、多种类型、结构体、指针,并包含图形演示。
查看缓存全文
缓存时间: 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 好奇心已经基本得到满足,我认为这个编译器暂时已经完成了。
相似文章
Show HN: 用汇编语言构建 Web 服务器,为我的生命赋予(些许缺乏的)意义
ymawky 是一个专为 macOS 编写的 ARM64 汇编 Web 服务器,其特点是不依赖 libc 仅使用系统调用,并具备基本的 HTTP 功能。
nondescript:一款简单的嵌入式编程语言
Nondescript 是一种全新的单文件、可嵌入 C 项目的脚本语言,采用 AppleScript 风格语法,支持列表推导、可扩展语法等特性。
在浏览器中试用 LispE
关于在浏览器中试用 LispE(一种 Lisp 方言)的简要介绍或链接。
将 Python 转译为 Lisp
LispE 是 NAVER 推出的一款开源 Lisp 方言,兼具函数式与数组编程特性,并支持 PyTorch、llama.cpp 以及 MLX 等 AI 库。该语言既可作为原生应用运行,也可打包为支持多线程与现代函数式编程特性的 WebAssembly 库。
用 Zig 写一个 C 编译器
一位开发者记录了用 Zig 语言、按照 Nora Sandler 的教程系列构建名为 paella 的 C 编译器的全过程。