5

これらは、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返すのに時間がかかるのだろうか。HandleLocal

私の仮定では、値が2つしかないブール値に関連していると思いますが、残念ながら、ドキュメントは非常に貧弱で、そのようなことについては言及されていません。

4

1 に答える 1

5

これは 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 の true 値と false 値をインターンしているように見えます。私の知る限り、これは作成されるオブジェクトの数を減らすために仮想マシンでよく使用される手法です。たとえば、Java はすべての文字列リテラル、ブール値およびバイト オブジェクトをインターンします (インターンは JVM 仕様の文字列に対してのみ言及されていますが、I'小さな整数などでも発生することがわかりました。)

于 2012-09-01T20:03:24.060 に答える