V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Sponsored by
LinkedIn
2000 个不用坐班的远程好工作在召唤你 · 弹性上班不打卡,工作和生活都能拥有
2000 个不用坐班的全球远程工作,帮助 V2EX 的小伙伴开启全新的工作方式。
Promoted by LinkedIn
charlieethan
V2EX  ›  C++

谷歌发布开源开发语言 Carbon : 号称将替代 C++

  •  
  •   charlieethan · 67 天前 · 11477 次点击
    这是一个创建于 67 天前的主题,其中的信息可能已经有所发展或是发生改变。

    项目的 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;
    }
    
    110 条回复    2022-08-23 18:18:19 +08:00
    1  2  
    FrankAdler
        1
    FrankAdler  
       67 天前 via iPhone   ❤️ 24
    go:我吃醋了
    nyxsonsleep
        2
    nyxsonsleep  
       67 天前
    这 Carbon 的语法看起来很像他家的另一个语言。
    Martens
        3
    Martens  
       67 天前
    有点 go 味儿
    dbskcnc
        4
    dbskcnc  
       67 天前 via Android
    只是个未画完成的饼, 不知道三年能不能下锅
    secondwtq
        5
    secondwtq  
       67 天前
    看不出有啥亮点。但是支持 C++ Interop 很独特,这么多语言说要替代 C++,没一个把这个放进去的
    我刚看到的时候还以为是 lattner 又出来了,仔细一看是 chandlerc ...
    Leviathann
        6
    Leviathann  
       67 天前
    可以发篇公众号震惊体说 google 已经准备抛弃 go 了
    churchill
        7
    churchill  
       67 天前
    碳语言比 C 语言好听。。。
    agagega
        8
    agagega  
       67 天前 via iPhone   ❤️ 6
    https://www.reddit.com/r/programming/comments/w2thvo/comment/igs25eu/

    发布这个语言的动机有点…苹果行为属于是。
    nyxsonsleep
        9
    nyxsonsleep  
       67 天前   ❤️ 1
    @churchill 碳中和警告
    duke807
        10
    duke807  
       67 天前 via Android
    很好,支持 carbon 干翻 rust
    duke807
        11
    duke807  
       67 天前 via Android
    然後再来一個新的干翻 carbon
    kidlj
        12
    kidlj  
       67 天前
    好事儿。可能就像 Kotlin 和 Java 的关系吧。
    golangLover
        13
    golangLover  
       67 天前   ❤️ 15
    编程语言之中 Google 发明 是不可信的代名词
    DOLLOR
        14
    DOLLOR  
       67 天前   ❤️ 1
    go: ?
    dart: ?
    TWorldIsNButThis
        15
    TWorldIsNButThis  
       67 天前   ❤️ 9
    @duke807 官方评价:If you can use Rust, ignore Carbon
    imes
        16
    imes  
       67 天前 via Android   ❤️ 5
    @Martens 3# 我心惊胆战的看了一遍,幸好没有 if err != nil
    thedrwu
        17
    thedrwu  
       67 天前 via Android
    c++历史包袱已经够多了,一股脑塞进一个 go 里 go 气的大包袱里
    ksc010
        18
    ksc010  
       67 天前
    之前 go 我记得也是要替代 C++的
    nbndco
        19
    nbndco  
       67 天前   ❤️ 1
    Google 的内部项目顺带开源了而已,有没有人用根本无所谓,Google 自己把自己的那堆内部的 C++慢慢替换掉就行了。和 hack 一样。
    junkun
        20
    junkun  
       67 天前
    我还是很奇怪,既然想加新功能,又要兼容 C++,为什么不直接分叉一个 C++标准和编译器?是因为 g++名字已经被占用了吗。个人觉得,这又要兼容 C++,又发明一套不一样的语法挺无聊的。
    f64by
        21
    f64by  
       67 天前
    We also have explicit non-goals for Carbon, notably including:

    A stable ABI for the entire language and library
    Perfect backwards or forwards compatibility

    就凭这两点,这门语言永远不可能成为主流
    nbndco
        22
    nbndco  
       66 天前
    @junkun 因为目标就是 migrate off C++,兼容是过程,目标是干掉 C++。就如同 swift 可以调用 objective-c 并不是因为 apple 太爱 objective-c 一样。
    jeeyong
        23
    jeeyong  
       66 天前
    看来看去...还是老实啃 C++吧
    luozic
        24
    luozic  
       66 天前   ❤️ 1
    google 的 dart 垃圾中的垃圾。还不如 java 6
    WebKit
        25
    WebKit  
       66 天前
    类似于 Java 与 Kotlin 的关系?其实我觉得挺好的。
    buxudashi
        26
    buxudashi  
       66 天前
    搞个++c 吧。
    SenLief
        27
    SenLief  
       66 天前
    学习的速度都赶不上语言出来的速度
    junkun
        28
    junkun  
       66 天前
    @nbndco 难道换成自己标准的 C++ 就不是 migrate off C++ 了吗?
    edimetia3d
        29
    edimetia3d  
       66 天前
    看了这个背景, 感觉为什么不去 fork clang 呢, 反正 carbon-lang 看起来也只是 llvm 的另一个前端,只换个前端真的能带来足够的性能收益吗?

    @agagega
    yohole
        30
    yohole  
       66 天前
    一言不合就是[取代]或者[替代],虽然 Google 有钱有人有推广能力,但是真的这么容易吗?
    leimao
        31
    leimao  
       66 天前
    求求你们别瞎搞了好吗?多做点有意义的事不好吗
    DOLLOR
        32
    DOLLOR  
       66 天前   ❤️ 3
    我感觉 google 是不是跟尖括号有仇,这次居然用圆括号来表示泛型参数,看起来跟函数的参数列表长得一个样。将来他们怎么区分泛型函数调用和柯里化函数调用?
    pengtdyd
        33
    pengtdyd  
       66 天前   ❤️ 1
    以前是学习的速度跟不上框架,现在是跟不上语言了。。。。。。。
    v23x
        34
    v23x  
       66 天前   ❤️ 1
    现在的新语言是真的多...

    说明编译器发展得不错

    也说明 C++确实很多人都饱受其苦
    macha
        35
    macha  
       66 天前
    这么多号称要取代 C++的语言都没能成功取代,历史遗留代码的力量不容小视。
    yzbythesea
        36
    yzbythesea  
       66 天前
    go 不是替代 cpp 的,性能还是有很大差距
    yazinnnn
        37
    yazinnnn  
       66 天前   ❤️ 1
    傻逼谷歌是不是跟尖括号有仇? 这咋还整了一个小括号的泛型
    x500
        38
    x500  
       66 天前
    google 这么多年,也末推出一个 android 上面的类 ios 的 c++原生开发,对它们有点失望
    hatsuyuki
        39
    hatsuyuki  
       66 天前
    @v23x 有了 LLVM ,新语言就只需要考虑编写生成 LLVM IR 的前端,比以前容易太多了
    zed1018
        40
    zed1018  
       66 天前   ❤️ 3
    google 的语言一如既往的丑
    fgwmlhdkkkw
        41
    fgwmlhdkkkw  
       66 天前
    Google 跟“<>”有仇吗?
    fgwmlhdkkkw
        42
    fgwmlhdkkkw  
       66 天前
    @yazinnnn #37 所谓英雄……
    ttdx
        43
    ttdx  
       66 天前
    go 里 go 气的
    matrix67
        44
    matrix67  
       66 天前   ❤️ 4
    ✔ 赶紧去把这个语言的 json 库和 http 写了,github star 就归你了
    paoqi2048
        45
    paoqi2048  
       66 天前
    支持内嵌就有点意思
    dqzcwxb
        46
    dqzcwxb  
       66 天前
    用 go 重新 java 和 c++项目,然后用 carbon 重写 go 项目,kpi 猛猛涨
    elonlo
        47
    elonlo  
       66 天前
    大胆去试吧,不行就换 java
    YouRTBUG
        48
    YouRTBUG  
       66 天前
    @matrix67 不取名叫个 fast/rapid/crazy json 我都觉得不好意思
    Huelse
        49
    Huelse  
       66 天前   ❤️ 1
    @DOLLOR #32 个人觉得方括号是泛型的最佳选择,尖括号在 if 上用的太多,圆括号就更不用说了到处有,但实在不明白这个 carbon 为啥用圆括号
    Mexion
        50
    Mexion  
       66 天前
    谷歌开发的语言都很烂
    iosyyy
        51
    iosyyy  
       66 天前
    @v23x 这和很多人饱受 C++之苦有啥关系? 逻辑都不通硬往上靠
    murmur
        52
    murmur  
       66 天前
    老老实实做 go 不行么,这√b 语法
    x1aoYao
        53
    x1aoYao  
       66 天前
    @Huelse 泛型用方括号的我知道的有 Scala3, Go, 尖括号的基本是主流,圆括号的没听说过...(google 曾经想在 go 里用圆括号最终还是被否了, 现在又来了...)
    fengjianxinghun
        54
    fengjianxinghun  
       66 天前
    Google 能不能先学会解析<>再来搞编程语言?
    libook
        55
    libook  
       66 天前
    1. 不确定是官方口径还是媒体夸大;又见这种“替代论”,当前算是新技术宣传的必备话术了,当年 Go 也是号称要替代 C++的,Deno 号称替代 Node.js ,再往前倒 C#也曾称以替代 Java 为目标;蹲一个在 Chromium 和 AOSP 中的大量实践再看。
    2. 在 CPP 的活动上宣传取代 CPP 的东西,虽然从宣传角度上来说很合理,但不知道在场的 CPP 开发者怎么看。当年某技术的线下聚会请来了一位“替代者”技术的开发者,对主办技术一痛踩以及对“替代者”技术的一阵吹,反正我是感觉挺尴尬的。
    hakr
        56
    hakr  
       66 天前
    想问下 golang 当初是怎么流行起来的
    newmlp
        57
    newmlp  
       66 天前
    cpp 日常要被替代,结果没一个能打的
    x1aoYao
        58
    x1aoYao  
       66 天前
    如果 Swift 调用 cpp 能有调用 objc 那么顺滑就很方便了。看起来 Carbon 也是 import 了 clang 来解析 cpp
    hsfzxjy
        59
    hsfzxjy  
       66 天前 via Android
    关于泛型用圆括号,我在 zig 里看到类似的做法。

    zig 里类型是 first class 的,List :: type -> type 可以看成一个作用于类型的函数,List(int) 则看成一个函数调用。
    https://ziglang.org/learn/overview/#generic-data-structures-and-functions

    当然我没有说这种语法是易读的
    charmToby
        60
    charmToby  
       66 天前
    README 里面说了和 C++的关系。

    JavaScript → TypeScript
    Java → Kotlin
    C++ → Carbon
    zhzhh
        61
    zhzhh  
       66 天前
    "NOTE: Carbon Language is experimental"
    「一个目标为替代 C++ 的实验性语言」作为标题感觉更合适一点(可能是我过于敏感了..
    https://twitter.com/chandlerc1024/status/1549411352657133568
    ecloud
        63
    ecloud  
       66 天前
    @v23x 都是托了 llvm 的福,给帮助烧点纸吧
    unnamedhao
        64
    unnamedhao  
       66 天前
    指针在哪里?
    LeegoYih
        65
    LeegoYih  
       66 天前
    无论是开发 Carbon 的动机,还是 Carbon 本身的语法,都有一股浓浓的逆反味道。
    nguoidiqua
        66
    nguoidiqua  
       66 天前
    方括号尖括号之类我觉得只是个习惯问题,像 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 。

    个人认为尖括号就用来表示大小于,花括号就用来包代码,圆括号包参数,方括号包类型,这样比较一致。
    crayygy
        67
    crayygy  
       66 天前   ❤️ 3
    只看 Sample code 都觉得可读性实在是太差了,宁可去看 C++ 的源码。

    虽然 Java 可能在很多人眼里是“落后” 的代名词,但 Java 的代码可读性是很强的,方便 review ,也能控制写出质量可控的代码。C++ 在有了 C++ 11/14/17 以后,在不用其中一些语法的情况下,也是能够达到这样的目标的,比如在我们的项目里面禁用了裸指针,模板方法也组织的比较好,这个时候的可读性也是可接受的。
    rainfd
        68
    rainfd  
       66 天前
    golang 的博客解释不用<>的原因是因为跟<<和<,实现上需要改的东西会比较多
    不过就是个习惯问题,至于这么纠结的吗?
    wewewefff
        69
    wewewefff  
       66 天前
    我认为在谷歌所有的语言,开源也没要直接拿来,到时候给开发者限制一波 GG
    zxCoder
        70
    zxCoder  
       66 天前
    没啥区别
    Akagi201
        71
    Akagi201  
       66 天前   ❤️ 1
    为什么不做个可以无 GC 的 Go 啊, 脑残 Google, 这跟国内的 KPI 项目有啥区别. 为啥不统一设计, 一门语言走天下. go dart carbon 搞这些语言干啥, 完全可以做成一个语言, 为啥要搞这么多啊!
    tairan2006
        72
    tairan2006  
       66 天前
    感觉走的路子和 rust 不一样,看看后续吧。

    这和 go 没啥关系,场景都不一样。
    yiqiao
        73
    yiqiao  
       66 天前
    @nbndco 那这不就是 KPI 项目吗?😓
    lifespy
        74
    lifespy  
       66 天前
    @Huelse #49 方括号数组
    minlearn
        75
    minlearn  
       66 天前
    @ksc010 go 是替代 c ,不是 C++
    haolongsun
        76
    haolongsun  
       66 天前
    为什么都说像 go,难道不是像 rust ?碳官方也说了,如果你使用 rust,请忽略 Carbon.
    baiy
        77
    baiy  
       66 天前
    盗版其他人的一条评论: go 语言尸骨未寒,谷歌又连夜纳了新欢!!!!!
    ligiggy
        78
    ligiggy  
       66 天前
    不会真有不懂 C++,就去干 Carbon 的人吧?懂 C++的人,不会真去干 Carbon 吧?
    ligiggy
        79
    ligiggy  
       66 天前
    @unnamedhao 指针还好说,先搞个 template 吧
    CNife
        80
    CNife  
       66 天前
    稍微看了下,目前还是太过早期的阶段,看不出 Carbon 有完成使命的潜力。
    语法上很不一致,既然用了后置类型,为什么不能省略类型声明?如果不能省略,用前置类型声明不好吗,还能省个冒号。
    从取代 C++的目标来看,应该是要手动管理内存的,没有 GC 。看起来是要借鉴 Rust 的所有权和移动语义模型,但是官方还没有给出内存管理的具体方案。来源: https://github.com/carbon-language/carbon-lang/tree/trunk/docs/design#lifetime-and-move-semantics
    unnamedhao
        81
    unnamedhao  
       66 天前
    @ligiggy 不知道有没有宏
    ksedz
        82
    ksedz  
       66 天前
    JavaScript → TypeScript
    Java → Kotlin
    C++ → Carbon

    要是真能像他说的做到这个效果,我是很喜欢的。
    linshenqi
        83
    linshenqi  
       66 天前
    从 faq 来看,也没说要替代谁。
    Akitora
        84
    Akitora  
       66 天前
    真 rust 和 go 偷偷生了二胎(一胎是 vlang )
    zjsxwc
        85
    zjsxwc  
       66 天前
    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 )而出现的代替方案。
    allgy
        86
    allgy  
       66 天前
    数一数谷歌开发的语言黄了多少个
    JingW
        87
    JingW  
       66 天前
    话说这个项目可以升职几个工程师?
    nbndco
        88
    nbndco  
       66 天前
    @yiqiao 为什么开源就是 KPI 项目? Google 内的 perf ,帮助整个公司 migrate off C++肯定比开源个没啥人用的语言要有 impact 的多的多的多的多。只是文化上 Google 就是很喜欢开放,能开源的东西基本都开源了。

    但是明显这个只是顺带开源,没想着要有人用,也没人靠这种东西拿 OKR (可能万一做大了会有几个 developer advocate 的 role 吧)。Google 都已经说的这么明白了,我这东西是为了取代 C++,请大家去用 rust ,不要没事用这个项目,想拿 KPI 的人会说这个话么?
    cmdOptionKana
        89
    cmdOptionKana  
       66 天前
    @allgy Go 没黄,Dart 也没黄,谷歌还开发了什么语言?
    abcd191898105
        90
    abcd191898105  
       66 天前 via iPhone
    @golangLover 微软很强,大家也不敢上车啊
    sosilver
        91
    sosilver  
       66 天前 via Android
    假酒喝多了,设计成这样
    aliveyang
        92
    aliveyang  
       66 天前
    希望国内大厂也可以至少折腾一下语言,动都不动跟躺平一样,哪怕是画一下呢
    haolongsun
        93
    haolongsun  
       66 天前
    @aliveyang 人才储备都不一样,国内都是业务型大佬,真上升到底层语言级别的,能有多少个大佬。
    iwdmb
        94
    iwdmb  
       66 天前
    又要產生變革了
    iwdmb
        95
    iwdmb  
       66 天前
    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
    FightPig
        96
    FightPig  
       66 天前
    好奇谷歌为啥动不动就搞个新的,不去改进原来的,不是 kpi ?
    cmdOptionKana
        97
    cmdOptionKana  
       66 天前
    @FightPig 现有的语言,比如 C++,有委员会,谷歌不是想改就能改,没有主导权,要看别人脸色,推动起来太艰难了。
    Valid
        98
    Valid  
       66 天前
    谷歌造语言造的真勤
    iosyyy
        99
    iosyyy  
       66 天前
    @haolongsun 从来就没有业务和底层这种区别程序员大多都是全能的取决于能不能做罢了 倒不如说国内的核心在业务而不在"开源"
    zhuweiyou
        100
    zhuweiyou  
       66 天前
    @cmdOptionKana Dart 黄了好多年 又炒起来的.
    1  2  
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2699 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 292ms · UTC 14:48 · PVG 22:48 · LAX 07:48 · JFK 10:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.