【问题标题】:Why does Boolean::New() return a Handle<> while other primitives return Local<>?为什么 Boolean::New() 返回 Handle<> 而其他原语返回 Local<>?
【发布时间】:2012-08-27 02:46:27
【问题描述】:

这些是在 V8 C++ API 中创建新原语的函数:

Handle<Boolean> v8::Boolean::New(bool value)
Local<Number> v8::Number::New(double value)
Local<String> v8::String::New(const char *data, int length=-1)

我想知道为什么 Boolean 返回 Handle 而其他人返回 Local

我的假设是它与只有两个可能值的布尔值有关,但不幸的是,文档真的很差,没有提到这样的事情。

【问题讨论】:

    标签: boolean v8 language-implementation


    【解决方案1】:

    这是 Boolean::New: (v8.h) 的实现

    Handle<Boolean> Boolean::New(bool value) {
      return value ? True() : False();
    }
    

    这是我们可以从 api.cc 得到的:

    v8::Handle<Boolean> True() {
      i::Isolate* isolate = i::Isolate::Current();
      if (!EnsureInitializedForIsolate(isolate, "v8::True()")) {
        return v8::Handle<Boolean>();
      }
      return v8::Handle<Boolean>(
          ToApi<Boolean>(isolate->factory()->true_value()));
    }
    

    看起来他们正在为每个 Isolate 设置真值和假值。 AFAIK 这是虚拟机中一种经常使用的技术来减少创建对象的数量 - 例如,Java 实习生所有字符串文字,以及布尔和字节对象(即使在 JVM 规范中只提到了字符串,我我们也看到它发生在小整数等)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-02
      • 1970-01-01
      • 2022-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-04
      • 1970-01-01
      相关资源
      最近更新 更多