arrow系列4---arrow API规范(Conventions)
作者:yunjinqi   类别:    日期:2023-10-14 11:14:44    阅读:445 次   消耗积分:0 分    

Arrow C++ API 遵循一些简单的规则。与许多规则一样,可能会有例外情况。


语言版本 

从版本10.0开始,Arrow C++兼容C++17。


命名空间 

Arrow的所有API(除了宏)都在arrow命名空间内,以及其中嵌套的命名空间。

安全指针 

Arrow对象通常使用安全指针进行传递和存储 - 大多数情况下是std::shared_ptr,但有时也是std::unique_ptr。

不可变性 

许多Arrow对象都是不可变的:一旦构造完成,它们的逻辑属性将不再更改。这使得可以在多线程场景中使用它们,而不需要繁琐和容易出错的同步。

当然,也有明显的例外,比如IO对象或可变数据缓冲区。

错误报告 

大多数API通过返回arrow::Status实例来指示成功或错误的结果。Arrow不会抛出自己的异常,但第三方异常可能会传播,尤其是std::bad_alloc(但Arrow不使用标准分配器来分配大数据)。

当API可以返回错误代码或成功值时,通常通过返回模板类arrow::Result来实现。但是,一些API(通常已被弃用)返回arrow::Status并将结果值作为输出指针参数传递。

以下是检查操作结果的示例:

const int64_t buffer_size = 4096;

auto maybe_buffer = arrow::AllocateBuffer(buffer_size, &buffer);
if (!maybe_buffer.ok()) {
   // ... 处理错误
} else {
   std::shared_ptr<arrow::Buffer> buffer = *maybe_buffer;
   // ... 使用分配的缓冲区
}

如果调用者函数本身返回arrow::Result或arrow::Status,并希望传播任何不成功的结果,可以使用两个方便的宏:

ARROW_RETURN_NOT_OK接受一个arrow::Status参数,如果不成功则返回该参数。

ARROW_ASSIGN_OR_RAISE接受一个arrow::Result参数,如果成功,将其结果分配给左值,或在出现错误时返回相应的arrow::Status。

例如:

arrow::Status DoSomething() {
   const int64_t buffer_size = 4096;
   std::shared_ptr<arrow::Buffer> buffer;
   ARROW_ASSIGN_OR_RAISE(buffer, arrow::AllocateBuffer(buffer_size));
   // ... 分配成功,下面处理buffer

   // 最后返回成功
   return Status::OK();
}


版权所有,转载本站文章请注明出处:云子量化, http://www.woniunote.com/article/337
上一篇:arrow系列4-准备开始(getting strated 翻译)
下一篇:arrow系列5---arrow的基本数据结构(Basic Arrow Data Structures)