c 与 c++

XenolithC 与 C++ SDK

工具链、同一套 libc 和 libc++、应用库,加上图形引擎。Linux、Windows、macOS 和 Android 从同一份代码构建。为此不必安装 Windows SDK,也不必安装 NDK。

编译器、链接器和 make 都在工具链里。不用先另外装。

MIT,无版税


AI 原生

问你的代理

怎么建工程、怎么编译、选哪个系统,写在仓库里。打开源码去问,代理按仓库回答。


系统

不用厂商 SDK

工具链自己带编译器、头文件和库。只有你特意选了走厂商 SDK 的构建,才会用到它。

Linux

x86_64、arm64 和 riscv64,glibc 和 musl。调用进系统 libc,上面不再叠第二套。

Windows

x86_64 和 arm64。自己的 libc,分配器是 mimalloc,不用 UCRT,也不用 Windows SDK。系统 DLL 用我们自己的 import.lib 绑定。

macOS

x86_64 和 arm64。+sprt 构建不需要 macOS SDK。走 Apple SDK 的普通构建仍然要它——这是他们的许可,不是我们多要的。

Android

arm64、armv7、x86 和 x86_64。有一套不依赖 NDK 的 sysroot。机器上已经有 NDK 的话,那条构建也能用。

WebAssembly、Embox 和 NuttX 是单独的目标。iOS 目前只有工具链 sysroot:还没有运行时,也没有 +sprt。


运行时

统一的 libc 和 libc++

从你的代码看,Linux、Windows、macOS 和 Android 是一样的。不用因为 CRT 不同而堆一堆 #ifdef。

同一套 POSIX

在 Linux、Android 和 macOS 上,调用进 glibc、musl、Bionic 或 libSystem。Windows 上的 libc 是我们自己的。time_t 和 off_t 到处都是 64 位。系统没有的调用不会从头文件里消失:它还在,返回 ENOSYS。

线程

每个系统上都是普通的 pthread。带优先级继承的互斥量,底下是 futex、WaitOnAddress 或 os_sync,看跑在哪。

两层 C++

运行时自己用一套小的 sprt/cxx 构建:没有异常,有 Status 和 Result。应用代码拿到的是移植过来的 LLVM libc++,也就是真正的 std::。它放在 std::__sprt 里,不会和别人的 libc++ 撞 ABI。

一个事件循环

定时器、套接字、文件和进程走同一个 Looper。底下是 epoll 和 io_uring、IOCP、kqueue 或 ALooper。窗口和显示器也在这个 API 后面,不在厂商 SDK 的头文件后面。


应用库

应用能力

运行时上面是应用程序通常会自己长出来的那些库。不是套在系统 SDK 上的包装。

数据

一个 Value 容器,写成 JSON、CBOR,或我们自己的 url-safe 格式。LZ4 压缩,读的时候自己认格式。

数据库

SQLite 和 PostgreSQL 走同一套 scheme:对象、文件、按操作的角色、键集分页。23 种语言的全文搜索,没有服务器时也可以放在内存里。

网络与密码

经 curl 的 HTTP/2 和 HTTP/3。OpenSSL、GnuTLS 和 mbedTLS:RSA、ECDSA、EdDSA、GOST 34.10、34.11 和 34.12,以及 JWT。

图片与字体

读 PNG、JPEG、WebP、GIF 和 TIFF,写 PNG、JPEG 和 WebP。矢量在 GPU 上剖成三角形。字体是 FreeType 和 HarfBuzz,包括可变字体。

文档

HTML 和 EPUB,排版是我们自己的:块、浮动、表格、目录。另外还有 Markdown 和 Pug 模板。

文件与 Wasm

自己的 zip、文件系统,以及跑在 WAMR 上的访客 WebAssembly。图形还没有开放给访客代码。


图形

渲染图

一帧是 pass 和资源组成的图。屏障和布局转换由引擎自己插入。图形和 compute 可以放在同一张图里。只有场景变了才准备新的一帧,闲着的时候不耗电。

后端

Vulkan

主要的一个。在 macOS 上是 MoltenVK,带 portability 子集,从你的 .app 里加载。

Metal

macOS 上的单独后端,不经过 Vulkan。

OpenGL ES 3.1

给没有能用的 Vulkan 的板子:Mali、VideoCore、较旧的 Android 和模拟器。

WebGPU

原生可用,也能经 WebAssembly 构建跑在浏览器里。

CPU

没有驱动、没有着色器的平面 2D。这条路上没有 compute,没有深度,也没有 MSAA。

窗口与 2D

Wayland 和 X11(Linux 上启动时选择)、Win32、Cocoa、Android,以及无窗口模式。自带 flexbox 和 grid、手势、矢量,以及把字形落到像素上的文字。


试用在浏览器中

在浏览器里打开即可。不必先装工具链。

GitHub 在浏览器中试用