devlog

【Node.js】JSON.stringify() の実処理は V8 がしてそう

2023-05-15

Node.js に JSON というオブジェクトがあります。
実体がどこにあるのか気になりNode.jsの実装を見てみました。

Node.js のドキュメントを見てみる

こちらです  

私はてっきりJSONもコアモジュールだと思ってました。fs や process と同じく。。
が、ドキュメントにはそういう記述がありません。

Node.js の実装を見てみる

nodejs/node を見てみます。特徴的な名前の JSON.stringify() で探してみます。

deps/v8 配下に、それらしきものを見つけました。

// deps/v8/src/builtins/builtins-json.cc BUILTIN(JsonParse) { HandleScope scope(isolate); Handle<Object> source = args.atOrUndefined(isolate, 1); ... } BUILTIN(JsonStringify) { HandleScope scope(isolate); Handle<Object> object = args.atOrUndefined(isolate, 1); Handle<Object> replacer = args.atOrUndefined(isolate, 2); ... }

ファイルパスは deps/v8/src/builtins/builtins-json.cc です。 パスを見るに JSON.stringify() の実処理は V8 にありそうです。

(ちなみに deps/v8 配下 は V8 のソースコードのようです。実際 V8 のミラーリポジトリに同じようなコードがありました。フォークしているのでしょうか。参考

V8 のドキュメントを見てみる

v8::JSON というクラスを見つけました。リファレンスは こちら です。

Parse や Stringify というメンバ関数があります。 Node.js が JSON.stringify() を独自実装しているのかと思っていたんですが、V8由来だったんですね。

Links

  • 作成日
    2023-05-15
  • 更新日
    2023-05-15