ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Carbon语言快速上手:如何3分钟跑通C++继任语言的完整工具链

Carbon语言快速上手:如何3分钟跑通C++继任语言的完整工具链 Carbon语言快速上手如何3分钟跑通C继任语言的完整工具链【免费下载链接】carbon-langCarbon Languages main repository: documents, design, implementation, and related tools. (NOTE: Carbon Language is experimental; see README)项目地址: https://gitcode.com/GitHub_Trending/ca/carbon-langCarbon LanguageCarbon是一个实验性的 C 继任语言它用 LLVM 做后端性能和 C 相当能与现有 C 代码双向互操作同时从底层重建了泛型系统和代码组织方式目标是让你不必忍受 C 的模板报错和迁移成本就能写出更现代的系统级代码。下面这条路径会带你从零把工具链搭起来写出第一个 Carbon 程序再把它变成一个可以用 Bazel 构建的正式项目。3分钟搭好环境构建Carbon工具链先装编译器后面一切才有基础。Carbon 目前主要在 LinuxUbuntu、Debian、WSL上开发macOS 用户也可参照贡献工具文档安装依赖。以 Ubuntu 为例sudo apt update sudo apt install -y clang libc-dev libcabi-dev lld git clone https://gitcode.com/GitHub_Trending/ca/carbon-lang cd carbon-lang然后用 Bazel 把工具链编译出来顺便看看命令行帮助./scripts/run_bazelisk.py run //toolchain -- help 首次构建要编译 LLVM 相关组件耗时较长建议泡杯茶等着构建完成后bazel-bin/toolchain/carbon --version能打印版本号就说明工具链可用了。写第一个程序Carbon的变量、函数与类十几行代码看懂它的骨架。仓库里的 examples/hello_world.carbon 是最小可运行示例import Core library io; fn Run() { Core.PrintStr(Hello world!\n); }对比 C你会发现几个明显变化import取代了#include按库引入能力模块边界更清晰fn Run()声明函数参数和返回值写法直白比如fn Add(a: i32, b: i32) - i32变量用var声明常量用let类型可以靠上下文推断也可以像var n: i32 10;这样显式标注。字符串、整型、浮点字面量支持十进制、十六进制、二进制等写法具体规则可以看官方提案 p000143-numeric-literals.md 和 p001999 字符字面量。场景实战用埃拉托斯特尼筛法找质数 换个例子练手打印 1000 以内的全部质数。这个例子就在 examples/sieve.carbon它同时展示了 Carbon 的类、数组和控制流class Sieve { fn Make() - Sieve { returned var s: Sieve; for (n: i32 in Core.Range(1000)) { s.is_prime[n] true; } return var; } var is_prime: array(bool, 1000); }注意几个点class内部直接写fn定义成员函数ref self表示需要修改自身状态的方法参考MarkMultiplesNotPrimefor (n: i32 in Core.Range(1000))是带类型标注的遍历循环array(bool, 1000)是定长数组比 C 的裸指针边界清晰得多。主逻辑放在fn Run() - i32里跑完返回质数个数——这套Run 函数做入口的组织方式是 Carbon 的惯例。从代码到项目用Bazel构建Carbon程序把单文件变成一个能维护的工程。Carbon 官方项目本身就跑在 Bazel 上你的项目也照此办理。看 examples/BUILD 里的真实配置load(//bazel/carbon_rules:defs.bzl, carbon_binary) carbon_binary( name sieve, srcs [sieve.carbon], )三条命令覆盖日常开发./scripts/run_bazelisk.py build //examples:sieve # 构建 ./scripts/run_bazelisk.py run //examples:sieve # 构建并运行 ./scripts/run_bazelisk.py test //... # 跑测试工程规范上有两条硬建议命名类型用 UpperCamelCase如Sieve函数和成员变量用 lowerCamelCase完整规则见 naming_conventions.md格式化仓库自带格式化工具源码在 toolchain/format/提交前跑一遍格式检查团队代码风格就不会跑偏。如果项目里还有 C 存量代码仓库里的 examples/bazel/ 给了一个 C 与 Carbon 混编项目的完整 Bazel 示例可以直接抄结构。进阶能力泛型、C互操作与内存安全上手之后该看它的三个核心差异点。checked 泛型和普通模板不同Carbon 的泛型定义在被实例化之前就会完整做类型检查报错直接指出哪个要求没满足不再依赖实例化后才暴露问题同时保留可选的 template 模式兼容 C 习惯。设计文档在 docs/design/generics/。C 互操作Carbon 可以调用 CC 也可以调用 Carbon双向都没有额外开销。这意味着你可以一次只迁移一个库而不必推倒重写整个代码库路线是 interoperability 设计。内存安全官方规划了先迁移到 C 互操作方言、再逐步重构为内存安全设计的两步走路线并把残余的未定义行为用显式unsafe语法标出来详见 docs/design/safety/。继续学习资源地图存下这张清单遇到具体问题再查。语言设计文档docs/design/ —— 每个特性都有提案记录理解为什么这么设计语言规范docs/spec/ —— 语法规则的权威定义工具链文档toolchain/docs/ —— 编译、格式化的实现细节贡献指南CONTRIBUTING.md 与 contribution_tools.md示例代码examples/还有 Advent of Code 2024 实战 examples/advent2024/工具链目前还是实验阶段0.1 里程碑之前遇到这个还不支持是正常现象。先 clone 仓库跑通hello_world再照着sieve写你自己的第一个 Carbon 程序——实践是理解这门语言最快的方式。【免费下载链接】carbon-langCarbon Languages 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),仅供参考
返回列表