项目的 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;
}
1
FrankAdler 2022-07-20 21:29:43 +08:00 via iPhone 24
go:我吃醋了
|
2
nyxsonsleep 2022-07-20 21:29:45 +08:00
这 Carbon 的语法看起来很像他家的另一个语言。
|
3
Martens 2022-07-20 21:30:45 +08:00
有点 go 味儿
|
4
dbskcnc 2022-07-20 21:33:35 +08:00 via Android
只是个未画完成的饼, 不知道三年能不能下锅
|
5
secondwtq 2022-07-20 21:33:37 +08:00
看不出有啥亮点。但是支持 C++ Interop 很独特,这么多语言说要替代 C++,没一个把这个放进去的
我刚看到的时候还以为是 lattner 又出来了,仔细一看是 chandlerc ... |
6
Leviathann 2022-07-20 21:38:06 +08:00
可以发篇公众号震惊体说 google 已经准备抛弃 go 了
|
7
churchill 2022-07-20 21:41:01 +08:00
碳语言比 C 语言好听。。。
|
8
agagega 2022-07-20 21:42:43 +08:00 via iPhone 6
|
9
nyxsonsleep 2022-07-20 21:42:53 +08:00 1
@churchill 碳中和警告
|
10
duke807 2022-07-20 21:57:07 +08:00 via Android
很好,支持 carbon 干翻 rust
|
11
duke807 2022-07-20 21:58:05 +08:00 via Android
然後再来一個新的干翻 carbon
|
12
kidlj 2022-07-20 22:00:42 +08:00
好事儿。可能就像 Kotlin 和 Java 的关系吧。
|
13
golangLover 2022-07-20 22:02:16 +08:00 15
编程语言之中 Google 发明 是不可信的代名词
|
14
DOLLOR 2022-07-20 22:03:43 +08:00 1
go: ?
dart: ? |
15
TWorldIsNButThis 2022-07-20 22:14:05 +08:00 9
@duke807 官方评价:If you can use Rust, ignore Carbon
|
17
thedrwu 2022-07-20 22:28:06 +08:00 via Android
c++历史包袱已经够多了,一股脑塞进一个 go 里 go 气的大包袱里
|
18
ksc010 2022-07-20 22:28:14 +08:00
之前 go 我记得也是要替代 C++的
|
19
nbndco 2022-07-20 22:29:11 +08:00 1
Google 的内部项目顺带开源了而已,有没有人用根本无所谓,Google 自己把自己的那堆内部的 C++慢慢替换掉就行了。和 hack 一样。
|
20
junkun 2022-07-20 22:41:25 +08:00
我还是很奇怪,既然想加新功能,又要兼容 C++,为什么不直接分叉一个 C++标准和编译器?是因为 g++名字已经被占用了吗。个人觉得,这又要兼容 C++,又发明一套不一样的语法挺无聊的。
|
21
f64by 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 就凭这两点,这门语言永远不可能成为主流 |
22
nbndco 2022-07-20 23:01:17 +08:00
@junkun 因为目标就是 migrate off C++,兼容是过程,目标是干掉 C++。就如同 swift 可以调用 objective-c 并不是因为 apple 太爱 objective-c 一样。
|
23
jeeyong 2022-07-20 23:05:15 +08:00
看来看去...还是老实啃 C++吧
|
24
luozic 2022-07-20 23:06:17 +08:00 1
google 的 dart 垃圾中的垃圾。还不如 java 6
|
25
WebKit 2022-07-20 23:19:28 +08:00
类似于 Java 与 Kotlin 的关系?其实我觉得挺好的。
|
26
buxudashi 2022-07-20 23:21:47 +08:00
搞个++c 吧。
|
27
SenLief 2022-07-20 23:24:16 +08:00
学习的速度都赶不上语言出来的速度
|
29
edimetia3d 2022-07-20 23:32:48 +08:00
|
30
yohole 2022-07-20 23:37:16 +08:00
一言不合就是[取代]或者[替代],虽然 Google 有钱有人有推广能力,但是真的这么容易吗?
|
31
leimao 2022-07-20 23:57:57 +08:00
求求你们别瞎搞了好吗?多做点有意义的事不好吗
|
32
DOLLOR 2022-07-21 00:42:35 +08:00 3
我感觉 google 是不是跟尖括号有仇,这次居然用圆括号来表示泛型参数,看起来跟函数的参数列表长得一个样。将来他们怎么区分泛型函数调用和柯里化函数调用?
|
33
pengtdyd 2022-07-21 06:11:09 +08:00 1
以前是学习的速度跟不上框架,现在是跟不上语言了。。。。。。。
|
34
v23x 2022-07-21 07:14:24 +08:00 1
现在的新语言是真的多...
说明编译器发展得不错 也说明 C++确实很多人都饱受其苦 |
35
macha 2022-07-21 07:51:37 +08:00
这么多号称要取代 C++的语言都没能成功取代,历史遗留代码的力量不容小视。
|
36
yzbythesea 2022-07-21 08:05:35 +08:00
go 不是替代 cpp 的,性能还是有很大差距
|
37
yazinnnn 2022-07-21 08:50:36 +08:00 1
傻逼谷歌是不是跟尖括号有仇? 这咋还整了一个小括号的泛型
|
38
x500 2022-07-21 08:57:30 +08:00
google 这么多年,也末推出一个 android 上面的类 ios 的 c++原生开发,对它们有点失望
|
40
zed1018 2022-07-21 09:37:50 +08:00 3
google 的语言一如既往的丑
|
41
fgwmlhdkkkw 2022-07-21 09:47:42 +08:00
Google 跟“<>”有仇吗?
|
42
fgwmlhdkkkw 2022-07-21 09:48:35 +08:00
@yazinnnn #37 所谓英雄……
|
43
ttdx 2022-07-21 09:54:42 +08:00
go 里 go 气的
|
44
matrix67 2022-07-21 09:55:06 +08:00 4
✔ 赶紧去把这个语言的 json 库和 http 写了,github star 就归你了
|
45
paoqi2048 2022-07-21 09:56:02 +08:00
支持内嵌就有点意思
|
46
dqzcwxb 2022-07-21 09:59:34 +08:00
用 go 重新 java 和 c++项目,然后用 carbon 重写 go 项目,kpi 猛猛涨
|
47
elonlo 2022-07-21 10:00:14 +08:00
大胆去试吧,不行就换 java
|
49
Huelse 2022-07-21 10:03:14 +08:00 1
@DOLLOR #32 个人觉得方括号是泛型的最佳选择,尖括号在 if 上用的太多,圆括号就更不用说了到处有,但实在不明白这个 carbon 为啥用圆括号
|
50
Mexion 2022-07-21 10:08:16 +08:00
谷歌开发的语言都很烂
|
52
murmur 2022-07-21 10:12:50 +08:00
老老实实做 go 不行么,这√b 语法
|
53
x1aoYao 2022-07-21 10:24:32 +08:00
@Huelse 泛型用方括号的我知道的有 Scala3, Go, 尖括号的基本是主流,圆括号的没听说过...(google 曾经想在 go 里用圆括号最终还是被否了, 现在又来了...)
|
54
fengjianxinghun 2022-07-21 10:30:38 +08:00
Google 能不能先学会解析<>再来搞编程语言?
|
55
libook 2022-07-21 10:31:25 +08:00
1. 不确定是官方口径还是媒体夸大;又见这种“替代论”,当前算是新技术宣传的必备话术了,当年 Go 也是号称要替代 C++的,Deno 号称替代 Node.js ,再往前倒 C#也曾称以替代 Java 为目标;蹲一个在 Chromium 和 AOSP 中的大量实践再看。
2. 在 CPP 的活动上宣传取代 CPP 的东西,虽然从宣传角度上来说很合理,但不知道在场的 CPP 开发者怎么看。当年某技术的线下聚会请来了一位“替代者”技术的开发者,对主办技术一痛踩以及对“替代者”技术的一阵吹,反正我是感觉挺尴尬的。 |
56
hakr 2022-07-21 10:31:25 +08:00
想问下 golang 当初是怎么流行起来的
|
57
newmlp 2022-07-21 10:33:52 +08:00
cpp 日常要被替代,结果没一个能打的
|
58
x1aoYao 2022-07-21 10:45:36 +08:00
如果 Swift 调用 cpp 能有调用 objc 那么顺滑就很方便了。看起来 Carbon 也是 import 了 clang 来解析 cpp
|
59
hsfzxjy 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 当然我没有说这种语法是易读的 |
60
charmToby 2022-07-21 11:05:02 +08:00
README 里面说了和 C++的关系。
JavaScript → TypeScript Java → Kotlin C++ → Carbon |
61
zhzhh 2022-07-21 11:18:05 +08:00
"NOTE: Carbon Language is experimental"
「一个目标为替代 C++ 的实验性语言」作为标题感觉更合适一点(可能是我过于敏感了.. https://twitter.com/chandlerc1024/status/1549411352657133568 |
62
zhzhh 2022-07-21 11:23:47 +08:00
|
64
unnamedhao 2022-07-21 11:36:23 +08:00
指针在哪里?
|
65
LeegoYih 2022-07-21 11:41:03 +08:00
无论是开发 Carbon 的动机,还是 Carbon 本身的语法,都有一股浓浓的逆反味道。
|
66
nguoidiqua 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 。 个人认为尖括号就用来表示大小于,花括号就用来包代码,圆括号包参数,方括号包类型,这样比较一致。 |
67
crayygy 2022-07-21 12:01:02 +08:00 3
只看 Sample code 都觉得可读性实在是太差了,宁可去看 C++ 的源码。
虽然 Java 可能在很多人眼里是“落后” 的代名词,但 Java 的代码可读性是很强的,方便 review ,也能控制写出质量可控的代码。C++ 在有了 C++ 11/14/17 以后,在不用其中一些语法的情况下,也是能够达到这样的目标的,比如在我们的项目里面禁用了裸指针,模板方法也组织的比较好,这个时候的可读性也是可接受的。 |
68
rainfd 2022-07-21 12:04:38 +08:00
golang 的博客解释不用<>的原因是因为跟<<和<,实现上需要改的东西会比较多
不过就是个习惯问题,至于这么纠结的吗? |
69
wewewefff 2022-07-21 12:52:00 +08:00
我认为在谷歌所有的语言,开源也没要直接拿来,到时候给开发者限制一波 GG
|
70
zxCoder 2022-07-21 13:04:51 +08:00
没啥区别
|
71
Akagi201 2022-07-21 13:17:15 +08:00 1
为什么不做个可以无 GC 的 Go 啊, 脑残 Google, 这跟国内的 KPI 项目有啥区别. 为啥不统一设计, 一门语言走天下. go dart carbon 搞这些语言干啥, 完全可以做成一个语言, 为啥要搞这么多啊!
|
72
tairan2006 2022-07-21 13:54:26 +08:00
感觉走的路子和 rust 不一样,看看后续吧。
这和 go 没啥关系,场景都不一样。 |
76
haolongsun 2022-07-21 14:44:32 +08:00
为什么都说像 go,难道不是像 rust ?碳官方也说了,如果你使用 rust,请忽略 Carbon.
|
77
baiy 2022-07-21 14:46:07 +08:00
盗版其他人的一条评论: go 语言尸骨未寒,谷歌又连夜纳了新欢!!!!!
|
78
ligiggy 2022-07-21 14:52:24 +08:00
不会真有不懂 C++,就去干 Carbon 的人吧?懂 C++的人,不会真去干 Carbon 吧?
|
79
ligiggy 2022-07-21 14:54:26 +08:00
@unnamedhao 指针还好说,先搞个 template 吧
|
80
CNife 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 |
81
unnamedhao 2022-07-21 15:01:49 +08:00
@ligiggy 不知道有没有宏
|
82
ksedz 2022-07-21 15:10:39 +08:00
JavaScript → TypeScript
Java → Kotlin C++ → Carbon 要是真能像他说的做到这个效果,我是很喜欢的。 |
83
linshenqi 2022-07-21 15:24:32 +08:00
从 faq 来看,也没说要替代谁。
|
84
Akitora 2022-07-21 15:36:44 +08:00
真 rust 和 go 偷偷生了二胎(一胎是 vlang )
|
85
zjsxwc 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 )而出现的代替方案。 |
86
allgy 2022-07-21 16:39:59 +08:00
数一数谷歌开发的语言黄了多少个
|
87
JingW 2022-07-21 16:54:03 +08:00
话说这个项目可以升职几个工程师?
|
88
nbndco 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 的人会说这个话么? |
89
cmdOptionKana 2022-07-21 19:27:33 +08:00
@allgy Go 没黄,Dart 也没黄,谷歌还开发了什么语言?
|
90
abcd191898105 2022-07-21 19:28:23 +08:00 via iPhone
@golangLover 微软很强,大家也不敢上车啊
|
91
sosilver 2022-07-21 19:30:55 +08:00 via Android
假酒喝多了,设计成这样
|
92
aliveyang 2022-07-21 19:45:32 +08:00
希望国内大厂也可以至少折腾一下语言,动都不动跟躺平一样,哪怕是画一下呢
|
93
haolongsun 2022-07-21 19:49:22 +08:00
@aliveyang 人才储备都不一样,国内都是业务型大佬,真上升到底层语言级别的,能有多少个大佬。
|
94
iwdmb 2022-07-21 20:43:09 +08:00
又要產生變革了
|
95
iwdmb 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 |
96
FightPig 2022-07-21 21:03:55 +08:00
好奇谷歌为啥动不动就搞个新的,不去改进原来的,不是 kpi ?
|
97
cmdOptionKana 2022-07-21 21:25:47 +08:00
@FightPig 现有的语言,比如 C++,有委员会,谷歌不是想改就能改,没有主导权,要看别人脸色,推动起来太艰难了。
|
98
Valid 2022-07-21 21:34:07 +08:00
谷歌造语言造的真勤
|
99
iosyyy 2022-07-21 21:37:27 +08:00
@haolongsun 从来就没有业务和底层这种区别程序员大多都是全能的取决于能不能做罢了 倒不如说国内的核心在业务而不在"开源"
|
100
zhuweiyou 2022-07-21 21:39:33 +08:00
@cmdOptionKana Dart 黄了好多年 又炒起来的.
|