🫘

そのJSのAPIって何に準拠する?

2024/12/26に公開2

おそらくXで、Node.jsを知るにはv8エンジンを知る必要がある。みたいなポストをみて、v8エンジンを少し学習しました。
v8エンジンについては引き続き学習が必要ですが、その過程でjsのAPIが何に準拠するかを知り、「へー」となったので備忘録的に記事にします。

そもそもv8エンジンとは

Googleが提供するjsエンジンのこと。ecmascriptを実装しています。
つまり、このv8エンジンを使えば、ecmascriptの仕様に則りjsを実行することができます。

ecmascript

JSの標準仕様のことです。jsの様々なAPIの仕様が https://402.ecma-international.org/ で説明されています。
例えばよく利用する配列のmap()であれば、こちらで確認できます。
ecmascriptに準拠しているエンジンは他にもあり、FireFoxで利用されているSpiderMonkeyだったり、Safariで利用されているJavaScriptCoreがあったりしますが、いずれもecmascriptに準拠しているため、同じ仕組みでmap()メソッドが実行できます。

そのAPIってecmascriptに準拠してる?

ここからが「へー」となったところですが、よく使うjsのAPIの中にecmascriptに準拠していないものもあります。身近でよく使うものだとconsole.log()がその例です。
実はconsole.log()はecmascriptに準拠しておらず、ブラウザのエンジン毎に実装されています。
下記のそれぞれのリポジトリで異なる実装がされているようでしたが、ちゃんとコード追えてません。
v8エンジン:https://github.com/v8/v8/tree/main
webkit:https://github.com/WebKit/WebKit/tree/main
Node.jsでもまた異なった実装をしているようですが、それもコードを追えてません。

見分け方

こういったブラウザ固有のAPIかecmascriptに準拠したAPIであるかを判断する方法として、MDNの目次があります。
「References>Web APIs」この場合はブラウザ毎に実装されているAPI、
「References>JavaScript」この場合はecmascriptに準拠しているAPIとなります。
※この情報はどこかの記事で紹介されていましたが、元記事を忘れてしまいました。

最後に

正直v8エンジンについてはまだまだ学習が足りませんが、その過程で「へー」となったものを共有しました。
正直実装を見ていないので調査不足な記事ですが、なんとなくの豆知識程度にはなったかと思います。何かの役に立てばいいです。

Discussion

FAMASoonFAMASoon

V8の内部実装については下記GitHubリポジトリの内容が参考になります
https://github.com/danbev/learning-v8
一応共有しますね

アキアキ

共有ありがとうございます!
まだまだ内部実装を知らないので、引き続き理解を深めたいと思っていました。非常助かります!