Promise.isPromise: Cross-Realm Native Promise Predicate
JSTests/stress/promise-isPromise.js
TC39 native promise predicate proposal에 따라 Promise.isPromise()를 Promise constructor의 새로운 static method로 구현했습니다. 내부적으로는 prototype chain이나 duck-typing 대신 [[PromiseState]] slot을 직접 확인합니다. 실제 Promise 인스턴스(서브클래스 및 async 함수 반환값 포함)에는 true를, plain thenable과 non-object에는 false를 반환합니다.
Significance
native Promise를 감지하기 위한 신뢰성 있는 cross-realm-safe predicate를 제공합니다. Array.isArray와 유사한 방식으로, thenable이 이를 위장할 수 없으며 오랫동안 존재해온 duck-typing의 공백을 해소합니다.
주목할 만한 attack surface는 Proxy와의 상호작용입니다. Proxy가 native Promise를 감싸고 있을 때, 내부 slot([[PromiseState]]) 접근은 일반적으로 TypeError를 발생시킵니다. 다만 구현 과정에서 shortcut(unwrapping 없이 JSType 태그를 직접 확인하는 방식)을 사용할 경우, 예상치 못한 결과가 발생할 가능성이 있습니다. 한편 Promise.isPromise가 JIT-hot path에서 빈번하게 사용되면 JSC가 speculative fast path를 도입할 가능성이 있습니다. 이때 내부 slot 재검증 없이 결과를 신뢰하는 specialization은 특별히 살펴볼 필요가 있습니다.