carbon-lang - Carbon 语言中的切片与数组

标签 carbon-lang

Carbon 中的ArraySlice 有什么区别?我找到一个document来自官方 repo 。但是,目前尚未完成。

以下是来自 Carbon official repo 的示例代码.

// 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;
}

我猜 Slice 类似于 std::span,因为上面代码的 C++ 版本使用 std::span当 Carbon 版本使用 Slice 时。我说得对吗?

// 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;
}

最佳答案

目前第一个版本Array已经存在,还在继续开发中,Slice类型基本没有定义,所以现在给出有点早你是一个真正的答案。

正如您所猜测的,根据一些设计讨论,切片似乎最终可能与 std::span 有相似之处,但尚未获得批准。

您可以在GitHub directly上查看开放的设计方案。 .

关于carbon-lang - Carbon 语言中的切片与数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73191274/

相关文章:

carbon-lang - 如何进行指针运算?