d8 の使用

d8 は V8 独自の開発者シェルです。

d8 は、いくつかの JavaScript をローカルで実行したり、V8 に加えた変更をデバッグしたりする場合に便利です。x64 用に GN を使用して V8 を 構築すると、d8 バイナリが out.gn/x64.optdebug/d8 に出力されます。d8--help 引数で呼び出すと、詳しい使用方法やフラグに関する情報を表示できます。

対話形式でなく JavaScript ファイルを実行するために d8 を使用する場合、出力を表示することは非常に重要になります。これは console.log を使用して行えます。

$ cat test.js
console.log('Hello world!');

$ out.gn/x64.optdebug/d8 test.js
Hello world!

d8 には、同じ動作をする print 関数もグローバルにあります。ただし、console.log の方が Web ブラウザでも機能するため、print よりも優先されます。

入力を読み込む#

read() を使用すると、ファイルの内容を変数に格納できます。

d8> const license = read('LICENSE');
d8> license
"This license applies to all parts of V8 that are not externally
maintained libraries. The externally maintained libraries used by V8
are:
(etc.)"

readline() を使用してテキストを対話形式で入力します

d8> const greeting = readline();
Welcome
d8> greeting
"Welcome"

外部スクリプトの読み込み#

load() は、別の JavaScript ファイルを現在のコンテキストで実行します。つまり、ファイル内で宣言されたすべてのものにアクセスできるようになります。

$ cat util.js
function greet(name) {
return 'Hello, ' + name;
}

$ d8
d8> load('util.js');
d8> greet('World!');
"Hello, World!"

JavaScript にフラグを渡す#

d8 を使用すれば、コマンドライン引数を JavaScript コードでランタイム時に使用できます。コマンドラインで -- の後に引数を渡します。その後、スクリプトのトップレベルで arguments オブジェクトを使用して引数にアクセスできます。

out.gn/x64.optdebug/d8 -- hi

arguments オブジェクトを使用して配列の引数にアクセスできます。

d8> arguments[0]
"hi"

その他のリソース#

Kevin Ennis’s D8 Guide には、d8 を使用して V8 を探求する方法に関する優れた情報が記載されています。

d8 という名前の由来: 初期に V8 には “sample shell” があり、JavaScript シェルを構築するために V8 を組み込む方法を示す目的がありました。これは意図的にミニマルで、単に “shell” と呼ばれていました。その後すぐに、開発者の日常的な作業を助けるためにより便利な機能を備えた “developer shell” が追加され、名前が必要になりました。なぜ “d8” が名前として選ばれたのか、その理由は歴史に消えてしまいましたが、「eveloper」 には文字が 8 個抜けていますので、「d8 shell」 は略語としてうまく説明がつき、プロジェクト名である「V8」 ともよく適合します。