news 2026/9/2 12:30:24

Carbon 语言上手指南:从装好工具链到跑通素数筛

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Carbon 语言上手指南:从装好工具链到跑通素数筛

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

Carbon 是 Google 主导的实验性编程语言,定位为 C++ 的继任者:性能对标 C++、与现有 C++ 代码双向互操作,同时提供泛型、模块化和更现代的安全设计。它的主仓库 carbon-lang 同时包含语言设计文档、编译器实现(toolchain/)和可运行的示例,本教程就走一遍最短上手路径。

它凭什么出现

C++ 经过几十年积累,技术债很重,再往前改已经非常困难。Carbon 的思路不是修补 C++,而是做一个"继任者语言":不继承 C 的历史包袱,从头建立干净的语法和类型基础,同时把 C++ 互操作当作第一公民。README 里把它类比成 JavaScript 之于 TypeScript、Java 之于 Kotlin 的关系。

与相邻语言的关键差异,官方文档里其实讲得很直白——Rust 这类语言"能用就该用",但它们的内存模型和惯用法对 C++ 代码库迁移是硬门槛:

维度C++Go / Rust 类语言Carbon
性能基准存在迁移成本或运行开销对齐 C++(LLVM 后端)
与 C++ 混用受内存模型/惯用法限制双向、无开销互操作,可从继承到模板
泛型模板,使用时才检查各自方案定义即检查(definition-checked),支持特化与类型擦除
内存安全长期痛点强制/不同模型先迁移、再渐进式收紧,提供安全子集路径

最短路径装好它

官方只发布面向近期 Ubuntu/Debian 系(含 WSL)的 nightly 工具链,源码构建也主要针对 Linux。这里给最短且可验证的路径:

sudo apt update sudo apt install clang libc++-dev libc++abi-dev lld

装的是构建工具链依赖,装完clang --version应有输出。然后拉代码并构建:

git clone https://gitcode.com/GitHub_Trending/ca/carbon-lang cd carbon-lang
./scripts/run_bazelisk.py run //toolchain -- help

首次运行会自动下载 Bazel 并编译工具链,耗时较长;预期结果是打印carbon命令行的完整帮助文本,其中包含compilelink两个子命令——这就是后面所有操作的基础。

第一个程序,逐块看懂

仓库里的 examples/hello_world.carbon 一共 3 行有效代码,正好当最小样本:

import Core library "io";

import按模块引入核心库的io组件,不是 C++ 的#include

fn Run() { Core.PrintStr("Hello world!\n"); }

入口函数叫Run而不是main,命名空间用.分隔,没有::

./scripts/run_bazelisk.py run //examples:hello_world

通过 Bazel 构建并执行,预期在终端看到Hello world!。和常见写法的本质区别有三点:变量声明必须显式写var/let前缀和类型,不靠上下文推断省类型;语句用分号但很多场合语法本身就不冗余;没有头文件,模块边界由import决定。

跟着做一个小任务

以 examples/sieve.carbon 的素数筛为例,它演示了类、可变状态和成员方法。

思路Sieve类持有一个array(bool, 1000)布尔数组,先假设全是素数,再对每个素数标记它的倍数。

核心代码(节选):

class Sieve { impl as Core.UnformedInit {} fn Make() -> Sieve { returned var s: Sieve; for (n: i32 in Core.Range(1000)) { s.is_prime[n] = true; } return var; }

impl as Core.UnformedInit声明这个类允许"未初始化状态",Make负责从零填充。

fn MarkMultiplesNotPrime(ref self, p: i32) { var n: i32 = p * 2; while (n < 1000) { self.is_prime[n] = false; n += p; } }

ref self表示以可变引用方式访问自身,对应 C++ 里的非 const 成员函数。

怎么跑

./scripts/run_bazelisk.py run //examples:sieve

会看到什么:屏幕上依次打印 2 到 997 之间全部素数;Run的返回值是素数个数,小于 1000 的素数共 168 个。

新手容易踩的坑

  • 平台不是近期 Ubuntu/Debian 系。nightly 下载包只覆盖 Linux 系环境,macOS 或非 Debian 系发行版容易缺库。解法:在 WSL2 里跑,或按 构建文档 装齐 Clang、LLD、libc++ 后从源码构建。
  • link阶段报缺系统库。工具链链接时依赖 glibc 的运行时库,只装 Clang 不够。解法:sudo apt install libgcc-11-dev(或直接装gcc),再重新链接。
  • 把当前实现当稳定语言用。README 明确写了 Carbon 还是实验项目、"many things don't yet work"。示例代码会随工具链演进频繁调整,比如 Advent of Code 2024 示例 自己也承认需要绕开缺失功能,别照抄进生产环境。

往哪儿走

  • docs/design/:语言设计文档,泛型、类、模式匹配等专题都在这,适合想理解"为什么这么设计"的人。
  • toolchain/docs/:编译器各阶段(词法、解析、lower、codegen)的实现说明,适合想给工具链贡献代码的人。
  • examples/:hello_world、sieve、RE2 集成等可运行示例,适合边读边复现的人。
  • docs/project/goals.md 与 docs/project/faq.md:项目目标和对 Rust、fork C++ 等常见问题的回答,适合做技术选型判断的人。

装好之后,下一步可以直接用//examples:sieve换掉hello_world跑自己的第一个改动,或打开toolchain/看看编译器是怎么把这几行 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:26:12

SpringCloudAlibaba 基于Nacos Config的配置中心

关于 Spring Cloud Config Spring Cloud Config 用于跨多个应用程序和环境存储和提供分布式配置。此配置存储理想地在Git版本控制下进行版本管理&#xff0c;并且可以在应用程序运行时进行修改。虽然它非常适合使用所有支持的配置文件格式以及Environment、PropertySource 或 V…

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

PocketBase与HTMX组合:极简全栈Web开发实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

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

项目反应理论在AI安全评估中的应用:从题库优化到能力量化

1. 先搞清楚 IRT 在 AI 安全里到底解决什么问题如果你关注大模型的安全对齐、能力评估或者红队测试&#xff0c;可能会发现一个现象&#xff1a;我们经常用一堆问题去“考”模型&#xff0c;然后统计它的正确率或违规率。但这里有个关键问题被忽略了——我们用来测试的这些问题…

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

基于Stable Diffusion的AI角色剧情生成:本地部署与批量自动化实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

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

【单片机毕设案例分享】基于 STM32 或 51 单片机的环境异常声光报警与外设联动系统设计 基于 ESP8266 的室内环境参数采集与移动端监控平台设计(024505)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于单片机&#xff0c;STM32单片机&#xff0c;51单片机&#xff0c;J…

作者头像 李华