项目的 Github 地址为: https://github.com/carbon-language/carbon-lang
在近日举行的 CppNorth 开发者大会上,谷歌工程师 Chandler Carruth 宣布了名为 “Carbon” 的全新开源开发语言,并称它将是 C++ 的继任者。Chandler Carruth 表示,Carbon 拥有与 C++ 的“双向互操作性”,也就是说开发者可以直接在 Carbon 语言的程序中使用 C++,这大大提升了项目迁移的便捷性。
谷歌在开发该语言的时候,就将接替 C++ 作为了核心目标,它拥有大量与 C++ 相契合的特性,一个熟练的 C++ 开发者将能够迅速上手 Carbon ,并熟练进行程序的编辑
C++
// C++:
#include <math.h>
#include <iostream>
#include <span>
#include <vector>
struct Circle {
  float r;
};
void PrintTotalArea(std::span<Circle> circles) {
  float area = 0;
  for (const Circle& c : circles) {
    area += M_PI * c.r * c.r;
  }
  std::cout << "Total area: " << area << "\n";
}
auto main(int argc, char** argv) -> int {
  std::vector<Circle> circles = {{1.0}, {2.0}};
  // Implicitly constructors `span` from `vector`.
  PrintTotalArea(circles);
  return 0;
}
Carbon
// Carbon:
package Geometry api;
import Math;
class Circle {
  var r: f32;
}
fn PrintTotalArea(circles: Slice(Circle)) {
  var area: f32 = 0;
  for (c: Circle in circles) {
    area += Math.Pi * c.r * c.r;
  }
  Print("Total area: {0}", area);
}
fn Main() -> i32 {
  // A dynamically sized array, like `std::vector`.
  var circles: Array(Circle) = ({.r = 1.0}, {.r = 2.0});
  // Implicitly constructs `Slice` from `Array`.
  PrintTotalArea(circles);
  return 0;
}
Mixed
// C++ code used in both Carbon and C++:
struct Circle {
  float r;
};
// Carbon exposing a function for C++:
package Geometry api;
import Cpp library "circle.h";
import Math;
fn PrintTotalArea(circles: Slice(Cpp.Circle)) {
  var area: f32 = 0;
  for (c: Cpp.Circle in circles) {
    area += Math.Pi * c.r * c.r;
  }
  Print("Total area: {0}", area);
}
// C++ calling Carbon:
#include <vector>
#include "circle.h"
#include "geometry.carbon.h"
auto main(int argc, char** argv) -> int {
  std::vector<Circle> circles = {{1.0}, {2.0}};
  // Carbon's `Slice` supports implicit construction from `std::vector`,
  // similar to `std::span`.
  Geometry::PrintTotalArea(circles);
  return 0;
}
|      1FrankAdler      2022-07-20 21:29:43 +08:00 via iPhone  24 go:我吃醋了 | 
|      2nyxsonsleep      2022-07-20 21:29:45 +08:00 这 Carbon 的语法看起来很像他家的另一个语言。 | 
|  |      3Martens      2022-07-20 21:30:45 +08:00 有点 go 味儿 | 
|  |      4dbskcnc      2022-07-20 21:33:35 +08:00 via Android 只是个未画完成的饼, 不知道三年能不能下锅 | 
|  |      5secondwtq      2022-07-20 21:33:37 +08:00 看不出有啥亮点。但是支持 C++ Interop 很独特,这么多语言说要替代 C++,没一个把这个放进去的 我刚看到的时候还以为是 lattner 又出来了,仔细一看是 chandlerc ... | 
|      6Leviathann      2022-07-20 21:38:06 +08:00 可以发篇公众号震惊体说 google 已经准备抛弃 go 了 | 
|  |      7churchill      2022-07-20 21:41:01 +08:00 碳语言比 C 语言好听。。。 | 
|  |      8agagega      2022-07-20 21:42:43 +08:00 via iPhone  6 | 
|      9nyxsonsleep      2022-07-20 21:42:53 +08:00  1 @churchill 碳中和警告 | 
|      10duke807      2022-07-20 21:57:07 +08:00 via Android 很好,支持 carbon 干翻 rust | 
|      11duke807      2022-07-20 21:58:05 +08:00 via Android 然後再来一個新的干翻 carbon | 
|  |      12kidlj      2022-07-20 22:00:42 +08:00 好事儿。可能就像 Kotlin 和 Java 的关系吧。 | 
|      13golangLover      2022-07-20 22:02:16 +08:00  15 编程语言之中 Google 发明 是不可信的代名词 | 
|  |      14AV1      2022-07-20 22:03:43 +08:00  1 go: ? dart: ? | 
|      15TWorldIsNButThis      2022-07-20 22:14:05 +08:00  9 @duke807 官方评价:If you can use Rust, ignore Carbon | 
|  |      17thedrwu      2022-07-20 22:28:06 +08:00 via Android c++历史包袱已经够多了,一股脑塞进一个 go 里 go 气的大包袱里 | 
|  |      18ksc010      2022-07-20 22:28:14 +08:00 之前 go 我记得也是要替代 C++的 | 
|  |      19nbndco      2022-07-20 22:29:11 +08:00  1 Google 的内部项目顺带开源了而已,有没有人用根本无所谓,Google 自己把自己的那堆内部的 C++慢慢替换掉就行了。和 hack 一样。 | 
|      20junkun      2022-07-20 22:41:25 +08:00 我还是很奇怪,既然想加新功能,又要兼容 C++,为什么不直接分叉一个 C++标准和编译器?是因为 g++名字已经被占用了吗。个人觉得,这又要兼容 C++,又发明一套不一样的语法挺无聊的。 | 
|      21f64by      2022-07-20 22:46:49 +08:00 We also have explicit non-goals for Carbon, notably including: A stable ABI for the entire language and library Perfect backwards or forwards compatibility 就凭这两点,这门语言永远不可能成为主流 | 
|  |      22nbndco      2022-07-20 23:01:17 +08:00 @junkun 因为目标就是 migrate off C++,兼容是过程,目标是干掉 C++。就如同 swift 可以调用 objective-c 并不是因为 apple 太爱 objective-c 一样。 | 
|  |      23jeeyong      2022-07-20 23:05:15 +08:00 看来看去...还是老实啃 C++吧 | 
|      24luozic      2022-07-20 23:06:17 +08:00  1 google 的 dart 垃圾中的垃圾。还不如 java 6 | 
|  |      25WebKit      2022-07-20 23:19:28 +08:00 类似于 Java 与 Kotlin 的关系?其实我觉得挺好的。 | 
|  |      26buxudashi      2022-07-20 23:21:47 +08:00 搞个++c 吧。 | 
|  |      27SenLief      2022-07-20 23:24:16 +08:00 学习的速度都赶不上语言出来的速度 | 
|  |      29edimetia3d      2022-07-20 23:32:48 +08:00 | 
|  |      30yohole      2022-07-20 23:37:16 +08:00 一言不合就是[取代]或者[替代],虽然 Google 有钱有人有推广能力,但是真的这么容易吗? | 
|  |      31leimao      2022-07-20 23:57:57 +08:00 求求你们别瞎搞了好吗?多做点有意义的事不好吗 | 
|  |      32AV1      2022-07-21 00:42:35 +08:00  3 我感觉 google 是不是跟尖括号有仇,这次居然用圆括号来表示泛型参数,看起来跟函数的参数列表长得一个样。将来他们怎么区分泛型函数调用和柯里化函数调用? | 
|  |      33pengtdyd      2022-07-21 06:11:09 +08:00  1 以前是学习的速度跟不上框架,现在是跟不上语言了。。。。。。。 | 
|      34v23x      2022-07-21 07:14:24 +08:00  1 现在的新语言是真的多... 说明编译器发展得不错 也说明 C++确实很多人都饱受其苦 | 
|      35macha      2022-07-21 07:51:37 +08:00 这么多号称要取代 C++的语言都没能成功取代,历史遗留代码的力量不容小视。 | 
|  |      36yzbythesea      2022-07-21 08:05:35 +08:00 go 不是替代 cpp 的,性能还是有很大差距 | 
|      37yazinnnn      2022-07-21 08:50:36 +08:00  1 傻逼谷歌是不是跟尖括号有仇? 这咋还整了一个小括号的泛型 | 
|  |      38x500      2022-07-21 08:57:30 +08:00 google 这么多年,也末推出一个 android 上面的类 ios 的 c++原生开发,对它们有点失望 | 
|      40zed1018      2022-07-21 09:37:50 +08:00  3 google 的语言一如既往的丑 | 
|  |      41fgwmlhdkkkw      2022-07-21 09:47:42 +08:00 Google 跟“<>”有仇吗? | 
|  |      42fgwmlhdkkkw      2022-07-21 09:48:35 +08:00 @yazinnnn #37 所谓英雄…… | 
|      43ttdx      2022-07-21 09:54:42 +08:00 go 里 go 气的 | 
|  |      44matrix67      2022-07-21 09:55:06 +08:00  4 ✔ 赶紧去把这个语言的 json 库和 http 写了,github star 就归你了 | 
|  |      45paoqi2048      2022-07-21 09:56:02 +08:00 支持内嵌就有点意思 | 
|      46dqzcwxb      2022-07-21 09:59:34 +08:00 用 go 重新 java 和 c++项目,然后用 carbon 重写 go 项目,kpi 猛猛涨 | 
|  |      47elonlo      2022-07-21 10:00:14 +08:00 大胆去试吧,不行就换 java | 
|      49Huelse      2022-07-21 10:03:14 +08:00  1 @DOLLOR #32 个人觉得方括号是泛型的最佳选择,尖括号在 if 上用的太多,圆括号就更不用说了到处有,但实在不明白这个 carbon 为啥用圆括号 | 
|  |      50Wanex      2022-07-21 10:08:16 +08:00 谷歌开发的语言都很烂 | 
|  |      52murmur      2022-07-21 10:12:50 +08:00 老老实实做 go 不行么,这√b 语法 | 
|  |      53x1aoYao      2022-07-21 10:24:32 +08:00 @Huelse 泛型用方括号的我知道的有 Scala3, Go,  尖括号的基本是主流,圆括号的没听说过...(google 曾经想在 go 里用圆括号最终还是被否了, 现在又来了...) | 
|      54fengjianxinghun      2022-07-21 10:30:38 +08:00 Google 能不能先学会解析<>再来搞编程语言? | 
|  |      55libook      2022-07-21 10:31:25 +08:00 1. 不确定是官方口径还是媒体夸大;又见这种“替代论”,当前算是新技术宣传的必备话术了,当年 Go 也是号称要替代 C++的,Deno 号称替代 Node.js ,再往前倒 C#也曾称以替代 Java 为目标;蹲一个在 Chromium 和 AOSP 中的大量实践再看。 2. 在 CPP 的活动上宣传取代 CPP 的东西,虽然从宣传角度上来说很合理,但不知道在场的 CPP 开发者怎么看。当年某技术的线下聚会请来了一位“替代者”技术的开发者,对主办技术一痛踩以及对“替代者”技术的一阵吹,反正我是感觉挺尴尬的。 | 
|  |      56hakr      2022-07-21 10:31:25 +08:00 想问下 golang 当初是怎么流行起来的 | 
|  |      57newmlp      2022-07-21 10:33:52 +08:00 cpp 日常要被替代,结果没一个能打的 | 
|  |      58x1aoYao      2022-07-21 10:45:36 +08:00 如果 Swift 调用 cpp 能有调用 objc 那么顺滑就很方便了。看起来 Carbon 也是 import 了 clang 来解析 cpp | 
|  |      59hsfzxjy      2022-07-21 10:56:16 +08:00 via Android 关于泛型用圆括号,我在 zig 里看到类似的做法。 zig 里类型是 first class 的,List :: type -> type 可以看成一个作用于类型的函数,List(int) 则看成一个函数调用。 https://ziglang.org/learn/overview/#generic-data-structures-and-functions 当然我没有说这种语法是易读的 | 
|  |      60charmToby      2022-07-21 11:05:02 +08:00 README 里面说了和 C++的关系。 JavaScript → TypeScript Java → Kotlin C++ → Carbon | 
|  |      61zhzhh      2022-07-21 11:18:05 +08:00 "NOTE: Carbon Language is experimental" 「一个目标为替代 C++ 的实验性语言」作为标题感觉更合适一点(可能是我过于敏感了.. https://twitter.com/chandlerc1024/status/1549411352657133568 | 
|  |      62zhzhh      2022-07-21 11:23:47 +08:00 | 
|      64unnamedhao      2022-07-21 11:36:23 +08:00 指针在哪里? | 
|  |      65LeegoYih      2022-07-21 11:41:03 +08:00 无论是开发 Carbon 的动机,还是 Carbon 本身的语法,都有一股浓浓的逆反味道。 | 
|      66nguoidiqua      2022-07-21 11:57:26 +08:00 方括号尖括号之类我觉得只是个习惯问题,像 C Java 之类的括号真要说起来也是有点混杂的。 比如数组 []int i = {1 ,2 ,3} 或者 int[] i = {1 ,2 ,3} 和 map 类似性质但表示方法却差太多,array<int> i =( 1 ,2 ,3 )或者 array[int] i =( 1 ,2 ,3 )这样看起来要一致些,map 、数组、泛型应该用一样括号。另外像 i[0] = 1 这样用方括号包下标,感觉也不是很妥当,应该像 map 一样或者 i.(0) = 1 or i(0) = 1 。 个人认为尖括号就用来表示大小于,花括号就用来包代码,圆括号包参数,方括号包类型,这样比较一致。 | 
|  |      67crayygy      2022-07-21 12:01:02 +08:00  3 只看 Sample code 都觉得可读性实在是太差了,宁可去看 C++ 的源码。 虽然 Java 可能在很多人眼里是“落后” 的代名词,但 Java 的代码可读性是很强的,方便 review ,也能控制写出质量可控的代码。C++ 在有了 C++ 11/14/17 以后,在不用其中一些语法的情况下,也是能够达到这样的目标的,比如在我们的项目里面禁用了裸指针,模板方法也组织的比较好,这个时候的可读性也是可接受的。 | 
|      68rainfd      2022-07-21 12:04:38 +08:00 golang 的博客解释不用<>的原因是因为跟<<和<,实现上需要改的东西会比较多 不过就是个习惯问题,至于这么纠结的吗? | 
|      69wewewefff      2022-07-21 12:52:00 +08:00 我认为在谷歌所有的语言,开源也没要直接拿来,到时候给开发者限制一波 GG | 
|      70zxCoder      2022-07-21 13:04:51 +08:00 没啥区别 | 
|  |      71Akagi201      2022-07-21 13:17:15 +08:00  1 为什么不做个可以无 GC 的 Go 啊, 脑残 Google, 这跟国内的 KPI 项目有啥区别. 为啥不统一设计, 一门语言走天下. go dart carbon 搞这些语言干啥, 完全可以做成一个语言, 为啥要搞这么多啊! | 
|      72tairan2006      2022-07-21 13:54:26 +08:00 感觉走的路子和 rust 不一样,看看后续吧。 这和 go 没啥关系,场景都不一样。 | 
|      76haolongsun      2022-07-21 14:44:32 +08:00 为什么都说像 go,难道不是像 rust ?碳官方也说了,如果你使用 rust,请忽略 Carbon. | 
|  |      77baiy      2022-07-21 14:46:07 +08:00 盗版其他人的一条评论: go 语言尸骨未寒,谷歌又连夜纳了新欢!!!!! | 
|  |      78ligiggy      2022-07-21 14:52:24 +08:00 不会真有不懂 C++,就去干 Carbon 的人吧?懂 C++的人,不会真去干 Carbon 吧? | 
|  |      79ligiggy      2022-07-21 14:54:26 +08:00 @unnamedhao 指针还好说,先搞个 template 吧 | 
|  |      80CNife      2022-07-21 14:59:09 +08:00 稍微看了下,目前还是太过早期的阶段,看不出 Carbon 有完成使命的潜力。 语法上很不一致,既然用了后置类型,为什么不能省略类型声明?如果不能省略,用前置类型声明不好吗,还能省个冒号。 从取代 C++的目标来看,应该是要手动管理内存的,没有 GC 。看起来是要借鉴 Rust 的所有权和移动语义模型,但是官方还没有给出内存管理的具体方案。来源: https://github.com/carbon-language/carbon-lang/tree/trunk/docs/design#lifetime-and-move-semantics | 
|      81unnamedhao      2022-07-21 15:01:49 +08:00 @ligiggy 不知道有没有宏 | 
|  |      82ksedz      2022-07-21 15:10:39 +08:00 JavaScript → TypeScript Java → Kotlin C++ → Carbon 要是真能像他说的做到这个效果,我是很喜欢的。 | 
|  |      83linshenqi      2022-07-21 15:24:32 +08:00 从 faq 来看,也没说要替代谁。 | 
|  |      84Akitora      2022-07-21 15:36:44 +08:00 真 rust 和 go 偷偷生了二胎(一胎是 vlang ) | 
|  |      85zjsxwc      2022-07-21 15:53:56 +08:00 https://github.com/carbon-language/carbon-lang/blob/trunk/docs/project/faq.md#why-not-rust 如果你使用 rust 请继续使用 rust ,忽略 carbon ,rust 非常优秀, 而 carbon 仅仅是由于 c++与 rust 不能很好的互相操作(不是不等不写 unsafe rust ,就是得大量修改 c++之前的代码来符合 rust )而出现的代替方案。 | 
|  |      86allgy      2022-07-21 16:39:59 +08:00 数一数谷歌开发的语言黄了多少个 | 
|      87JingW      2022-07-21 16:54:03 +08:00 话说这个项目可以升职几个工程师? | 
|  |      88nbndco      2022-07-21 19:12:24 +08:00 @yiqiao 为什么开源就是 KPI 项目? Google 内的 perf ,帮助整个公司 migrate off C++肯定比开源个没啥人用的语言要有 impact 的多的多的多的多。只是文化上 Google 就是很喜欢开放,能开源的东西基本都开源了。 但是明显这个只是顺带开源,没想着要有人用,也没人靠这种东西拿 OKR (可能万一做大了会有几个 developer advocate 的 role 吧)。Google 都已经说的这么明白了,我这东西是为了取代 C++,请大家去用 rust ,不要没事用这个项目,想拿 KPI 的人会说这个话么? | 
|  |      89cmdOptionKana      2022-07-21 19:27:33 +08:00 @allgy Go 没黄,Dart 也没黄,谷歌还开发了什么语言? | 
|  |      90abcd191898105      2022-07-21 19:28:23 +08:00 via iPhone @golangLover 微软很强,大家也不敢上车啊 | 
|      91sosilver      2022-07-21 19:30:55 +08:00 via Android 假酒喝多了,设计成这样 | 
|  |      92aliveyang      2022-07-21 19:45:32 +08:00 希望国内大厂也可以至少折腾一下语言,动都不动跟躺平一样,哪怕是画一下呢 | 
|      93haolongsun      2022-07-21 19:49:22 +08:00 @aliveyang 人才储备都不一样,国内都是业务型大佬,真上升到底层语言级别的,能有多少个大佬。 | 
|      94iwdmb      2022-07-21 20:43:09 +08:00 又要產生變革了 | 
|      95iwdmb      2022-07-21 20:47:20 +08:00 If you can use Rust, ignore Carbon If you want to use Rust, and it is technically and economically viable for your project, you should use Rust. In fact, if you can use Rust or any other established programming language, you should. Carbon is for organizations and projects that heavily depend on C++; for example, projects that have a lot of C++ code or use many third-party C++ libraries. We believe that Rust is an excellent choice for writing software within the pure Rust ecosystem. Software written in Rust has properties that neither C++ nor Carbon have. When you need to call other languages from Rust, RPCs are a good option. Rust is also good for using APIs implemented in a different language in-process, when the cost of maintaining the FFI boundary is reasonable. 看來目標不是取代 Rust | 
|  |      96FightPig      2022-07-21 21:03:55 +08:00 好奇谷歌为啥动不动就搞个新的,不去改进原来的,不是 kpi ? | 
|  |      97cmdOptionKana      2022-07-21 21:25:47 +08:00 @FightPig 现有的语言,比如 C++,有委员会,谷歌不是想改就能改,没有主导权,要看别人脸色,推动起来太艰难了。 | 
|  |      98Valid      2022-07-21 21:34:07 +08:00 谷歌造语言造的真勤 | 
|  |      99iosyyy      2022-07-21 21:37:27 +08:00 @haolongsun 从来就没有业务和底层这种区别程序员大多都是全能的取决于能不能做罢了 倒不如说国内的核心在业务而不在"开源" | 
|      100zhuweiyou      2022-07-21 21:39:33 +08:00 @cmdOptionKana   Dart 黄了好多年 又炒起来的. |