"native object" と "built-in object" と "host object"

ECMAScript5.1 の仕様では "native object"、"built-in object"、"host object"は次のように定義されています(適当訳)。

前提

ECMAScript実装
RhinoSpiderMonkeyJScript 、 JSC 、 V8 、 Carakan …:
ホスト環境
FirefoxInternet ExplorerGoogle ChromeSafariOpera 、 node.js 、 Windows Scripting Host …:

native object

ECMAScript 実装におけるオブジェクトであり、ホスト環境によってではなくこの仕様によって、そのセマンティック(解釈?意味?)が完全に定義されるもの。
(補足)標準的な native object はこの仕様で定義される。いくつかの native object は build-in であり、それ以外は ECMAScript プログラム実行の進行中に構築される。

Math // built-in でもある
Date // built-in でもある

// プログラマがプログラム実行によって生成するオブジェクト
{...}
new FooConstructor
[...]
new String("test")

built-in object

ECMAScript 実装によって与えられるオブジェクトであり、ホスト環境からは独立したもの。 ECMAScript プログラムの実行開始時に存在する。
(補足)標準的な built-in object はこの仕様で定義される。また、ある ECMAScript 実装によっても仕様化・定義され得る。すべての built-in object は native object である。 built-in constructor は、コンストラクタでもある built-in object である。

host object

ホスト環境によって与えられるオブジェクトであり、 ECMAScript 実行環境の要求を満たすためのもの。
(補足)native ではないオブジェクトは全て host object である。

//一般的なブラウザにおける
XMLHttpRequest
NodeList
HTMLElement

//node.js における
process
require

//Firebug のインストールされた Firefox における
console

※上記の例は実装によっては host object では無くて built-in object だったりする。

native であるが built-in ではない object とは何か

プログラムの実行によって生成される、 host object ではないオブジェクト。

built-in であるが native ではない object

は存在しない。

ECMAScript 実装によって与えられながら( built-in )、 ECMAScript の仕様によってセマンティックが完全に定義されるオブジェクト( native )、とは?

host object はホスト環境によって内部的に定義される(ブラックボックス)、ホスト環境の「何か」を ECMAScript 上で表象するもの。 API 。 built-in とはその解釈方法が(セマンティックが) ECMAScript 仕様にのっとって定義されるオブジェクト。純粋に ECMAScript 実装内で、 ECMAScript 仕様によってセマンティクス/解釈法が定義され、 ECMAScript 実装によって実装・生成され、存在するもの。何かこじつけじゃないか?。とは思わないことにする。

セマンティックが ECMAScript 仕様によって定義されているが、オブジェクトそのものは ECMAScript 仕様によって定義されていないもの、って何?ありえるの?

わからない…。 "semantics" を「文法」と訳して考えていたのが良くないのかもしれない(追記:「解釈法」definition & Interpretation に近い言葉として捉え直したらなんとなく分かってきた)。「セマンティックを定義する」ということがよくわからない。 setTimeout がそうらしいが、古いバージョンの IE においては host object に当たるらしい。なるほどこれはわかる。しかし…。

setTimeout instanceof Function returns false and typeof setTimeout returns "object" in IE 7 and lower.