ARTICLE DETAIL

资讯详情

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

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

Carbon 语言:C++ 替代路线上的系统编程实验,从 Hello 到 C++ 互操作的最短路径 Carbon 语言C 替代路线上的系统编程实验从 Hello 到 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-lang团队里那套 C 代码库还要再维护十年你想看看有没有更省心的写法。Carbon 语言是 Google 主导的 C 替代方案走继任者路线不继承 C 的历史包袱但要能和存量 C 代码长期共存。目前它仍是 0.1 之前的实验项目工具链可用但别指望生产环境。它到底是什么值不值得看一句话定位Google 主导的实验性编程语言定位是 C 的继任者与 C 替代路径当前状态是 0.1 里程碑前的实验阶段版本号以仓库最新 release 为准。它值得看一眼的原因浓缩成几条LLVM 后端性能对标 C与 C 双向无缝互操作定义检查的现代泛型系统渐进式走向内存安全子集模块 import 取代头文件装好跑通验证Carbon 安装步骤只有一条最短路径源码构建。没有预编译的通用安装包可以装。LinuxUbuntu 为主的路径# 安装依赖Clang、LLD、libc sudo apt update sudo apt install clang libc-dev libcabi-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 --outputhello.o examples/hello_world.carbon ./scripts/run_bazelisk.py run //toolchain -- link --outputhello 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.PrintlnCarbon 几乎同构只是模块来自Core。类型写在名字后面冒号分隔。和 Go 的var a int只差一个冒号var a: i32 0;Go 里a是intCarbon 里显式写i32位宽不靠平台决定。传址要显式写 ref不是隐式指针。Go 里要改外部变量就传*intCarbon 把会改你的实参写在参数表里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 --outputfib.o fib.carbon ./scripts/run_bazelisk.py run //toolchain -- link --outputfib 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.mdCarbon 语言现在的定位就是 C 的继任者实验场。下一步很简单把examples/下任意一个.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),仅供参考
返回列表