命名空间 v8 和命名空间 v8::internal 有什么区别?

What's difference between namespace v8 and namespace v8::internal?

在阅读v8的源代码时,我有一部分不是很了解。

  v8::Isolate::CreateParams create_params;
  create_params.array_buffer_allocator =
      v8::ArrayBuffer::Allocator::NewDefaultAllocator();
  v8::Isolate* isolate = v8::Isolate::New(create_params);

我跟踪了 v8::Isolate::New 的实现,然后我发现了以下代码:

// static
Isolate* Isolate::Allocate() {
  return reinterpret_cast<Isolate*>(i::Isolate::New());
}

因为稍微看了下代码,知道'i'是'internal'的意思,其他的就不清楚了。 v8::Isolate 和 v8::internal::Isolate 兼容吗?

通常,C++ 库在需要时使用 internal(通常也称为 detail)命名空间 declare/define 库使用但不应使用的内容由用户。

这是一种类似于"library linkage"的方法。希望 if/when 模块到达 C++,我们将有更好的方法来处理这个问题。