news 2026/9/2 12:43:04

Carbon 语言:C++ 替代路线上的系统编程实验,从 Hello 到 C++ 互操作的最短路径

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Carbon 语言:C++ 替代路线上的系统编程实验,从 Hello 到 C++ 互操作的最短路径

Carbon 语言:C++ 替代路线上的系统编程实验,从 Hello 到 C++ 互操作的最短路径

【免费下载链接】carbon-langCarbon Language's main repository: documents, design, implementation, and related tools. (NOTE: Carbon Language is experimental; see README)项目地址: https://gitcode.com/GitHub_Trending/ca/carbon-lang

团队里那套 C++ 代码库还要再维护十年,你想看看有没有更省心的写法。Carbon 语言是 Google 主导的 C++ 替代方案,走"继任者"路线:不继承 C++ 的历史包袱,但要能和存量 C++ 代码长期共存。目前它仍是 0.1 之前的实验项目,工具链可用,但别指望生产环境。

它到底是什么,值不值得看

一句话定位:Google 主导的实验性编程语言,定位是 C++ 的继任者与 C++ 替代路径,当前状态是 0.1 里程碑前的实验阶段,版本号以仓库最新 release 为准。

它值得看一眼的原因,浓缩成几条:

  • LLVM 后端,性能对标 C++
  • 与 C++ 双向无缝互操作
  • 定义检查的现代泛型系统
  • 渐进式走向内存安全子集
  • 模块 import 取代头文件

装好,跑通,验证

Carbon 安装步骤只有一条最短路径:源码构建。没有预编译的通用安装包可以装。

Linux:Ubuntu 为主的路径

# 安装依赖:Clang、LLD、libc++ sudo apt update && sudo apt install clang libc++-dev libc++abi-dev lld # 拿源码(仓库为只读参考,clone 到本地再动) git clone https://gitcode.com/GitHub_Trending/ca/carbon-lang cd carbon-lang

其他平台

macOS、WSL 等以 docs/project/contribution_tools.md 里的依赖说明为准,命令形态相同。

构建工具链用仓库自带的 Bazel 封装脚本,第一次构建会拉依赖,耐心等待:

# 构建工具链并打印帮助,验证构建成功 ./scripts/run_bazelisk.py run //toolchain -- help

看到子命令用法说明(compile、link、format、check 等)就说明装好了。顺手验证一下能跑:把 examples/hello_world.carbon 编译、链接、执行:

./scripts/run_bazelisk.py run //toolchain -- compile --output=hello.o examples/hello_world.carbon ./scripts/run_bazelisk.py run //toolchain -- link --output=hello hello.o ./hello

预期输出就一行:Hello world!。能打印出来,环境就算通了。

读第一份代码

hello_world 整个文件的核心只有 5 行,逐块拆开看:

import Core library "io"; fn Run() { Core.PrintStr("Hello world!\n"); }
  • import Core library "io";:导入标准库 Core 的 io 子模块,文件从此可以调Core.PrintStr
  • fn Run():每个可执行模块约定用Run作入口,替代 C++ 的main
  • 函数体里Core.PrintStr是全限定调用,模块边界决定你看不到别处的未导入名字。

对照 Go 来看,差异点就四个。

import 是真模块,不是头文件。没有声明/定义两份文件的问题,也不存在 include 顺序:

import Core library "io";

Go 里import "fmt"之后用fmt.Println,Carbon 几乎同构,只是模块来自Core

类型写在名字后面,冒号分隔。和 Go 的var a int只差一个冒号:

var a: i32 = 0;

Go 里aint,Carbon 里显式写i32,位宽不靠平台决定。

传址要显式写 ref,不是隐式指针。Go 里要改外部变量就传*int,Carbon 把"会改你的实参"写在参数表里:

fn Reset(ref counter: i32) { counter = 0; }

没写ref就是值拷贝,调用方不会被改,语义一眼可见。

循环用for ... in绑定元素。和 Go 的range一个思路:

for (n: i32 in Core.Range(10)) { Core.PrintStr("n\n"); }

换个任务练手

任务:打印斐波那契数列前 10 项,每项一行。思路一句话:滚动两个变量,每次输出当前值再往前推一格。

import Core library "io"; fn Run() { var a: i32 = 0; var b: i32 = 1; for (i: i32 in Core.Range(10)) { Core.Print(a); var next: i32 = a + b; a = b; b = next; } }

把它存成fib.carbon,走和前面一样的三步:

./scripts/run_bazelisk.py run //toolchain -- compile --output=fib.o fib.carbon ./scripts/run_bazelisk.py run //toolchain -- link --output=fib fib.o ./fib

预期输出:

0 1 1 2 3 5 8 13 21 34

再往上看两步

  • Carbon 泛型:定义检查的泛型,定义处就完成类型检查,还支持可选的类型擦除,比 C++ 模板的实例化报错路径清晰得多。设计文档在 docs/design/generics/。
  • Carbon 与 C++ 互操作:目标是双向调用,C++ 侧继承、模板都能参与,一个 C++ 库可以先迁 Carbon 而不带动周边。哲学文档在 docs/design/interoperability/。
  • Bazel 构建:整个工具链和示例都跑在 Bazel 上,examples/里每个目录都有现成的 BUILD 文件可对照。工具链总览看 toolchain/docs/README.md。

接着去哪

  • 语言规范:docs/spec/README.md
  • 设计文档总入口:docs/design/README.md
  • 可跑的示例目录:examples/
  • 贡献入口:CONTRIBUTING.md

Carbon 语言现在的定位,就是 C++ 的继任者实验场。下一步很简单:把examples/下任意一个.carbon文件按前面三步编译跑一遍。

【免费下载链接】carbon-langCarbon Language's main repository: documents, design, implementation, and related tools. (NOTE: Carbon Language is experimental; see README)项目地址: https://gitcode.com/GitHub_Trending/ca/carbon-lang

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/2 12:37:50

如何 AirLLM 让 4GB 显存的消费级显卡跑 70B 大模型

如何 AirLLM 让 4GB 显存的消费级显卡跑 70B 大模型 【免费下载链接】airllm AirLLM 70B inference with single 4GB GPU 项目地址: https://gitcode.com/GitHub_Trending/ai/airllm AirLLM 是低显存大模型推理工具:靠层间权重拆分与按需动态加载&#xff0c…

作者头像 李华
网站建设 2026/9/2 12:35:32

Agent技能库避坑:开发者集成AI技能的三条红线

Agent技能库避坑:开发者集成AI技能的三条红线 【免费下载链接】awesome-agent-skills A curated collection of 1000 agent skills from official dev teams and the community, compatible with Claude Code, Codex, Gemini CLI, Cursor, and more. 项目地址: ht…

作者头像 李华
网站建设 2026/9/2 12:34:28

3步让yuzu Switch模拟器不再卡住:新手实战配置指南

3步让yuzu Switch模拟器不再卡住:新手实战配置指南 【免费下载链接】yuzu 任天堂 Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/yu/yuzu yuzu是任天堂Switch开源模拟器,负责在PC上复刻主机的图形、音频与手柄输入,让…

作者头像 李华
网站建设 2026/9/2 12:26:56

基于SpringBoot的个人学业提醒系统(程序+文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

作者头像 李华