Carbon语言 C++互操作

Carbon语言与C++互操作,是Carbon宣传的重点,也是最大难点。

现在Carbon语言还不完善,这里举一个Keynote中演示的例子。

有一个C++的头文件 circle.h:

struct Circle {
  float r;
}

1.  Carbon调用C++

编写一个Carbon代码文件:geometry.carbon:

package Geometry api;
import Math;

import Cpp library "circle.h";

fn PrintArea(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);
}

可以通过 import Cpp library "circle.h"; 这种语法来引用C++头文件中声明的类型。

2. C++调用Carbon

在写一个C++的源文件:

#include 
#include "circle.h"

#include "geometry.carbon.h"

auto main(int argc, char* argv) -> int {
  std::vector circles = {{1.0}, {2.0}};

  Geometry::PrintArea(circles);
  return 0;
}