术语俗话 --- 什么是类C代码
从源代码编译到最终执行程序的行为和底层表现都像 C,而不仅仅是语法外形像 C。
这类“类C代码”的核心特征包括:
-
编译为原生机器码(不依赖虚拟机或解释器)
-
直接运行在硬件/OS 上(没有托管运行时,或运行时极轻量)
-
可以操作裸指针、手工管理内存(允许
unsafe或天然支持) -
ABI 稳定,可以方便地与 C 进行 FFI 互调
-
没有(或可绕过)垃圾回收(GC)、大容量运行时
-
内存布局可控(如结构体字段顺序、对齐、大小)
-
编译产物体积小,启动快,无 JIT
符合这种“类C”风格的主流语言有:
-
C++
最典型的“类C且编译后行为像C”——可以直接调用 C 库,编译为机器码,指针、内存布局与 C 几乎一致,可关闭 RTTI、异常等运行时。 -
Rust
虽然安全部分限制了指针操作,但 unsafe Rust 可以像 C 一样操作内存;编译为 LLVM IR 再生成机器码,无运行时(除了很小的堆分配、panic 等,可配置)。ABI 与 C 兼容,产物体积和性能接近 C。 -
Zig
显式内存管理,编译为原生代码,可嵌入 C 的头文件,无隐式控制流,没有宏,直接对应机器码。 -
Go(在一定条件下)
虽然 Go 有 GC 和运行时,但可以通过cgo和unsafe操作 C 风格指针;编译为静态二进制,但运行时和 GC 使其不完全像 C。通常不认为是“编译后行为像 C”,但比 Java 更接近。 -
Nim
可编译为 C 代码再编译为机器码,允许手动内存管理,无强制 GC(可用--gc:none),可以写底层指针操作。 -
D 语言(Better C 模式)
D 支持-betterC编译开关,禁用 GC 和运行时,编译后的二进制与 C 几乎相同。 -
Odin
专为系统编程设计,直接编译为机器码,手动内存管理,无运行时,语法也像 C。 -
C3
新语言,旨在成为 C 的改进版,编译为原生代码,完全兼容 C ABI。
总结:
“类C代码” = 编译为原生机器码 + 运行时不依赖 VM/GC + 能像 C 一样操纵内存和调用 C 接口。
这类语言主要用于系统编程、嵌入式、游戏引擎、操作系统等对性能和底层控制要求极高的领域。
