組み込み関数
V8における組み込み関数は、機能要件、性能要件、または単に歴史的な発展に応じて、実装に様々な種類があります。
一部は直接JavaScriptで実装されており、任意のユーザJavaScriptと同様にランタイム時に実行可能コードにコンパイルされます。これらの一部は、その機能の一部を実現するためにいわゆる_ランタイム関数_を利用します。ランタイム関数はC++で記述され、JavaScriptから%
で始まる接頭辞を介して呼び出されます。通常、これらのランタイム関数はV8内部のJavaScriptコードのみで制限されています。デバッグの目的で、V8が--allow-natives-syntax
フラグ付きで実行される場合、通常のJavaScriptコードからも呼び出すことができます。一部のランタイム関数はコンパイラによって生成コードに直接埋め込まれます。リストについては、src/runtime/runtime.h
を参照してください。
その他の関数は_組み込み_として実装されており、それ自体がいくつかの異なる方法で実装されることがあります。一部はプラットフォーム依存のアセンブリで直接実装されています。一部は_コードスタブアセンブラ_というプラットフォームに依存しない抽象化で実装されています。また、その他はC++で直接実装されています。組み込みは、必ずしも完全な関数ではなく接着コードの部分を実装するために使用されることもあります。リストについては、src/builtins/builtins.h
を参照してください。