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: Tiny – 一种带有内联Go原生函数的动态解释型语言
Tiny是一种用Go编写的新的动态解释型编程语言,具有字节码虚拟机、JIT编译和内联Go原生函数,以实现高性能。
Show HN: Nimic – 纯Python作为系统语言并支持AOT编译
Nimic是一个纯Python模块,允许使用Python DSL编写可AOT编译的代码,该DSL可转译到Nim,在保持有效Python的同时实现C级性能。
Show HN: Nub – 类似 Bun 的用于 Node.js 的一体化工具包
Nub 是一个快速的一体化工具包,用于 Node.js,提供类似 Bun 的开发者体验,包括运行 TypeScript 文件、管理依赖项和 Node 版本,所有这些都集中在一个用 Rust 编写的 CLI 工具中。
我设计了一个基于半字节的Verilog CPU,用于构建科学计算器
该项目使用FPGA在硬件中实现了一个功能齐全的科学计算器,包括自定义软CPU、微码固件和支持工具。它提供了一个基于Web的模拟器和开源的Verilog代码。
Show HN: 用汇编语言构建 Web 服务器,为我的生命赋予(些许缺乏的)意义
ymawky 是一个专为 macOS 编写的 ARM64 汇编 Web 服务器,其特点是不依赖 libc 仅使用系统调用,并具备基本的 HTTP 功能。