Promise.try()ãTorqueãæ·»ããŠ
0:00 0:00
Promise.tryê° ìŽì êž°ì€ìŒë¡ ìë¡ ì ê³µë©ëë€. | Articles | web.dev ìŽì Promise.tryê° ëªšë 죌ì ëžëŒì°ì ìì§ì ì¶ìëìŽ êž°ì€ì ìë¡ ì¬ì©í ì ììµëë€.
https://web.dev/blog/promise-try-baseline?hl=ko
Promise.tryãæšæºã«çµã¿èŸŒãŸãããšèãããšãã調ã¹ãŠã¯ã¿ããã®ã®ãäœã®ããã®ãã®ãªã®ãããã«ã¯çè§£ã§ããªãã£ããäœãããã®ç®çãæã£ãŠçãŸããã¯ããªã®ã«âŠãããç»æçãªæ©èœãªããšããããããããå°ããªè¿œå ã«ã¯ãã£ãšç©èªãããã¯ãã ãšæãããããšã倧ãã話ã§ã¯ãªããšãã
仿¥ã¯èå€åŠè
ãšãªã£ãŠããã®èµ·æºãšææ¡éçšããããŠå®è£
ã«ã€ããŠäžç·ã«èŠãŠãããã
Promise.try()
Promise.try No description available
https://tc39.es/proposal-promise-try/#sec-promise.try
Promiseã®éçã¡ãœããã®ã©ã€ã³ãããã«æ°ãã«è¿œå ãããã¡ãœããã§ããã
ç°¡åã«èª¬æãããšãPromise.try(fn, âŠargs)ã¯ã³ãŒã«ããã¯fnãå³åº§ã«ïŒåæçã«ïŒå®è¡ãããã®çµæãPromiseã§å
ãã§è¿ãã
ã©ãããããšããäŸãèŠãŠã¿ããã
åæãããããªããéåæãããããªã颿°fããããšããïŒasync awaitã¯ãã£ããèã«çœ®ããŠãããïŒã
function f () {
// åæãããããªããéåæãããããªã
if (Math. random () < 0.5 ) {
throw new Error ( "sync fail" );
}
return Promise . reject ( new Error ( "async fail" ));
}
ããfããã ã®åæé¢æ°ã§ããã°ããšã©ãŒã¯ãã®ããã«åŠçããŠããã ããã
try {
f ();
} catch (e) {
console. log (e.message);
}
éã«fãPromiseãè¿ã颿°ã§ããã°ããã®ããã«åŠçããŠããã ããã
f (). catch (console.log);
ã§ã¯ãããfãåæãããããªããéåæãããããªãå Žåã¯ã©ãããã°ããã ãããã
ãŸããããªç¶æ³ã¯ããå€ãã¯ãªãã ãããããããããšããã°ãããããå¿
èŠãããã ããã
Promise . resolve (). then (f). catch (console.log);
ãã®ããã«äœ¿ããšäœãåé¡ã«ãªãã ãããã
fã®å®è¡ã¿ã€ãã³ã°ãå€ãã£ãŠããŸããã€ãã³ãã«ãŒãã®åäœé åºãèããŠã¿ããã
Promise.resolve().then(f).catch(console.log) ã®å®è¡ãããŒã¯ä»¥äžã®éãã§ããã
Promise.resolve()ã¯ãã§ã«fulfilledç¶æ
ã®Promise ãå³åº§ã«è¿ãã
.then(f)ã¯fãonFulfilledãã³ãã©ãšããŠç»é²ãã察å¿ããReaction Job ãmicrotaskãã¥ãŒã«å
¥ããã
çŸåšã®ã³ãŒã«ã¹ã¿ãã¯ããã¹ãŠã¯ãªã¢ãããåŸãã€ãã³ãã«ãŒãããã®microtaskãåŠçããfãå®è¡ããã
fãåæçã«äŸå€ãã¹ããŒããå Žåããã®äŸå€ã¯.thenãè¿ããæ°ããPromiseã®reject ç¶æ
ã«å€æãããç¶ã.catchããããåãåãã
çµæãšããŠfã¯æ¬¡ã®tickã§å®è¡ ãããããšã«ãªãã
ããã«ããã³ãŒã«ã¹ã¿ãã¯ãéåãããããã°ãå°é£ã«ãªããäŸå€ã®äŒæãäžæé
ããŠããŸãã
ããã§Promise.tryããã®ãã¹ãŠãæ£ãããã«ç»å Žããã
Promise . try (f). catch (console.log);
ãã®ããã«äœ¿ããšãPromise.tryã®å
éšã§fãå³åº§ã«å®è¡ããå€ã§ããã°resolveãthrowã§ããã°rejectãšããŠåŠçããŠãããããã¡ããéåæã§ããã°ãã®ãŸãŸéåæãšããŠåŠçãããã
åæã®å Žåãéåæãšåäžã«åŠçããããã®ãã®ã ãšèããã°ããã
ããããã°fã®å®è¡ã¿ã€ãã³ã°ããããããšããªããåæçãªãšã©ãŒã«ééããå Žåã§ãçŸåšã®ã³ãŒã«ã¹ã¿ãã¯äžã§å®è¡ããããã¬ãŒã¹ãéåããªãã
ãããçåã«æããããããªãã
ãåæãããããªããéåæãããããªãã±ãŒã¹ã£ãŠäœãããã®ã ããïŒã
ãasync awaitã§åŠçããã°try catchã§å¯Ÿå¿ã§ããã®ã§ã¯ïŒã
ãŸãPromiseã®ã¿ã€ã ã©ã€ã³ãç°¡åã«æ¯ãè¿ããã
ES6ã§Promiseãç»å Žããããã®åŸãES2017ã§async awaitãç»å Žããã
ããªãã¯ä»ããã®éã®æä»£ãasync awaitãç»å Žãã以åã®éçºè
ã ãšæ³åããŠã¿ãŠã»ããã
ãã¡ã€ã«ãèªã¿èŸŒãã§JSONãããŒã¹ããã³ãŒããæžãå¿
èŠããããšãããã
ãã¡ã€ã«ãJSONãã¡ã€ã«ãã©ããã確èªããããã§ããã°ããŒã¹ããããã§ãªããã°ãšã©ãŒãã¹ããŒããã³ãŒããæžããªããã°ãªããªãã
以äžã®ããã«æžããã ããã
const fs = require ( "fs" ).promises;
const readFile = ( file ) => {
if ( ! file. endsWith ( ".json" )) {
throw new Error ( "not json" );
}
return fs. readFile (file, "utf8" );
};
ãã®é¢æ°ã¯ãã¡ã€ã«åã«å¿ããŠåæçã«åŠçããããéåæçã«åŠçããããããã
ããã«å¿ããŠäžã§èŠãæ¹æ³ã§åŠçãããšã以äžã®ããã«ãªãã
Promise . resolve ()
. then (() => readFile ( "some.json" ))
. then ( JSON .parse)
. catch (handleError);
ã³ãŒãã®æå³ãææ¡ããã®ã«äžèŠãªèŠçŽ ãä»å
¥ããŠããŸããresolveãšthenã¯åã«Promiseã§å
ã圹å²ãæãããŠããã ãã§ãäžçš®ã®ããªãã¯ã§ããã
ç§ãã¡ãç¥ãããã®ã¯ãreadFile ãæåãããparse ãè¡ãããšã©ãŒãçºçããããšã©ãŒãåŠçããããã ããã ãã§ããã
åœæããã®ãããªåé¡ã解決ããããã«ãçŸåšã®Promise.tryãšåæ§ã®åœ¢ã®ã©ã€ãã©ãªãäœãããŠäœ¿ãããŠããã
代衚çãªãã®ãšããŠãBluebirdã©ã€ãã©ãªã§ã¯ä»¥äžã®ããã«äœ¿ãããšãã§ããã
Promise.try | bluebird Bluebird is a fully featured JavaScript promises library with unmatched performance.
http://bluebirdjs.com/docs/api/promise.try.html
Bluebird. try (readJsonFile, "some.json" ). catch (handleError);
å®è£
ãèŠãŠã¿ããšãthrowãããå€ãåã³Promiseã§å
ãã§è¿ã圢ã§å®è£
ãããŠããïŒã³ãŒãã¯å°ãç°¡ç¥åããïŒã
// https://github.com/petkaantonov/bluebird/blob/master/src/method.js
Promise .attempt = Promise [ "try" ] = function ( fn ) {
var ret = new Promise ( INTERNAL );
ret. _captureStackTrace ();
ret. _pushContext ();
// åæåŒã³åºã
var value = tryCatch (fn)();
// çµæãPromiseã§å
ãã§è¿ã
ret.\ _resolveFromSyncValue (value);
return ret;
};
ããèŠããšPromise.tryã¯ãªããªãç»æçã§äŸ¿å©ãªã¡ãœããã«èŠããã
ãããäžèšã®ãããªäžäŸ¿ããæããããšãå€ãã ãããïŒ ç§ã¯ããã»ã©å€ãã¯ãªãã£ãã
ãªããªããç§ãã¡ã«ã¯async awaitãããããã§ããã
äžã®ã³ãŒããasync awaitã§æžãçŽããšä»¥äžã®ããã«ãªãã
const readJsonFile = async ( file ) => {
if ( ! file. endsWith ( '.json' )) {
throw new Error ( 'not json' );
}
return fs. readFile (file, 'utf8' );
}
const processJsonFile = async () => {
try {
const data = await readFile ( 'some.json' );
return JSON . parse (data);
} catch (e) {
console. log (e.message);
}
}
ããããã°åæã®å Žåãéåæã®å Žåãåãããã«åŠçã§ããã
å¥ã®äŸãšããŠcopyãæããããã ããã
const copy = ( text ) => {
return Promise . try (() => {
if (navigator.clipboard) return navigator.clipboard. writeText (text);
// ... some code for document.execCommand
document. execCommand ( "copy" );
});
};
clipboardããµããŒããããŠããå Žåã¯Promiseãè¿ãã¡ãœããã§ããnavigator.clipboard.writeTextã䜿ãã
ãµããŒããããŠããªãå Žåã¯åæã¡ãœããã§ããdocument.execCommandã䜿ãããããã£ãå Žé¢ã§äœ¿ããã ããã
ãããasync awaitã䜿ãã°ãã£ãšãã£ãããšåŠçã§ããã
const copy = async ( text ) => {
if (navigator.clipboard) {
await navigator.clipboard. writeText (text);
} else {
// ... some code for document.execCommand
document. execCommand ( "copy" );
}
};
ã§ã¯ãªãä»ã«ãªã£ãŠPromise.tryãç»å Žããã®ã ãããã
äžã§ãè§ŠããããPromise.tryã¯Promiseã®ç»å Žä»¥åŸããããŠasync awaitãç»å Žãã以åã®ãã®éã«ææ¡ããããã®ã§ããã
[tc39]Proposal Promise-try ã®æåã®ã³ããããèŠããšã2016幎ã«ããã®ãŒãã
ãããŠã©ã€ãã©ãªåœ¢æ
ã®å®è£
ã¯ãããããåããååšããŠããã
What is Promise.try, and why does it matter? - joepie91's Ramblings No description available
http://cryto.net/~joepie91/blog/2016/05/11/what-is-promise-try-and-why-does-it-matter/
2016å¹Žã«ææ¡ãããã®ã«ããªãä»ã«ãªã£ãŠç»å Žããã®ã ãããã
çŸçãªèª¬åŸ
Promise.tryã2016å¹Žã«ææ¡ããã2024å¹Žã«æçµçã«Stage 4ãžææ Œããããã€ããããŸã§ãã©ã®ãããªéçšããã£ãã®ããèŠãŠãããã
Stage 1 - 2016.9~11
äžã§è§Šããããã«ãPromise.tryã¯2016幎ã«Jordan Harband (https://github.com/ljharb)ã«ãã£ãŠææ¡ãããã\
2016幎9æã«æåã«Stage 1ãšããŠææ¡ãããããåœæã¯ä»ã®ã¢ãžã§ã³ãã«æŒãããŠè°è«ãããããã®å¹Žã®11æã«æ¬æ Œçãªè°è«ãè¡ãããã
proposal-promise-try/README.md at f2c8fdca4b09305a0c2dbcf16c1339b9d1ce8a58 · tc39/proposal-promise-try ECMAScript Proposal, specs, and reference implementation for Promise.try - tc39/proposal-promise-try
https://github.com/tc39/proposal-promise-try/blob/f2c8fdca4b09305a0c2dbcf16c1339b9d1ce8a58/README.md
åœæã®æ ¹æ ããå
ã»ã©èŠãäŸã®éãããè²ããåãããªã颿°ã«å¯ŸããŠäžèŠãªsyntaxã䜿ãããšãé²ãããã§ãã£ãã
以äžã®ããŒãã£ã³ã°å
容ã¯ãåœæã®ããŒãã£ã³ã°èšé²ãèªã¿ãããæŽçãããã®ã§ããã
2016幎11æ29æ¥ TC39 ããŒãã£ã³ã°å
容 - Promise.try è°è«
https://github.com/tc39/notes/blob/main/meetings/2016-11/nov-29.md#11iib-promisetry
JHD
ãã®æ©èœã¯.thenã®åŒã³åºããã§ãŒã³ãéå§ã§ããŸããã³ãŒããåããã£ãã¯ïŒtickïŒã§å®è¡ãPromiseãè¿ããšããç¹ã§ãPromise.resolve().then()ãšã¯ç°ãªããŸãã
ãžã§ãã«ãŒãïŒjob loopïŒã®ã»ãã³ãã£ã¯ã¹ã«é¢ããè°è«
JHD
ãã®æ¹åŒã¯ã峿å®è¡ãããéåæé¢æ°ïŒimmediately invoked async functionïŒãäœã£ãããPromiseã³ã³ã¹ãã©ã¯ã¿ã䜿ã£ããããç
©ããããåé¿ã§ããŸãã
DD
ãŠãŒã¶ãŒç©ºéïŒuserspaceïŒã®ã³ãŒãã§éåžžã«å€ã䜿ããããã¿ãŒã³ã§ããåžžã«åæçã«å®è¡ãããæ±ºå®çã«éèŠãªã®ã¯ããã¹ãŠã®äŸå€ããã£ããããŠãªãžã§ã¯ããããPromiseïŒrejected PromiseïŒã«å€æããŠãããããšã§ãã
MM
ããã«ææ§ãªç¹ã¯ãªãã®ã§ããããïŒåžžã«åæçã«å®è¡ãããã®ã§ããããããšãå Žåã«ããã®ã§ããïŒ
JHD
åžžã«åæçã«å®è¡ãããŸãã
MM
ãã®ããã«åŠçããããšããç¹ãéèŠã§ãã
JHD
ã»ãŒãã¹ãŠã®Promiseã©ã€ãã©ãªã«ãã®æ©èœããããŸãã
DD
åæ©ã¥ãã®äŸãæããŸããPromiseãè¿ã颿°ããããšããŸãããããã®é¢æ°ã¯äŸå€ãã¹ããŒããŠã¯ãããŸããã颿°ã®æ¬äœãPromise.try()ã§å²ãã°ãäŸå€ãçºçããå Žåã«ãªãžã§ã¯ããããPromiseã«å€æãããæ£ããçµæãåŸãããšãã§ããŸãã
function foo ( relativeURL ) {
const absoluteURL = new URL (relativeURL, someBaseURL).href;
return fetch (absoluteURL);
}
foo ( "http:0" ); // äŸå€çºç!! ããŸã£ã
function foo ( relativeURL ) {
return Promise . try (() => {
const absoluteURL = new URL (relativeURL, someBaseURL).href;
return fetch (absoluteURL);
});
}
function foo ( relativeURL ) {
return ( async () => {
const absoluteURL = new URL (relativeURL, someBaseURL).href;
return fetch (absoluteURL);
})();
}
async function foo ( relativeURL ) {
const absoluteURL = new URL (relativeURL, someBaseURL).href;
return fetch (absoluteURL);
}
function foo ( relativeURL ) {
return async do {
// ?!?!?!
var absoluteURL = new URL (relativeURL, someBaseURL).href;
fetch ( absoluteURL );
};
} YK
éåæé¢æ°ïŒasync functionsïŒãããã®ã«ãPromise.tryã¯äžéå端ãªè§£æ±ºçã«ãããªãã®ã§ã¯ãªãã§ããïŒéåæé¢æ°ã®æ¹ã䜿ãããããªãã§ããïŒ
DD
ç§ã®èãã§ã¯ãå®éã®ã»ãšãã©ã®ã±ãŒã¹ã§ã¯ãæ®éã®éåæé¢æ°ã䜿ãã®ãããã§ãããã峿å®è¡ãããéåæé¢æ°ã¯å¿
èŠãªãã¯ãã§ãã
JHD
ãã®ææ¡ã¯ã颿°ã®äœæè
ããã£ããPromiseãè¿ã颿°ã絶察ã«äŸå€ãã¹ããŒããªãããã«ä¿èšŒãæããå Žåã«å¯ŸåŠããããã®ãã®ã§ãã颿°ã®å©çšè
ã®ç«å Žããã®è©±ã§ãã
JHD
ãããŠãŒã¹ã±ãŒã¹ã§ã¯ãPromiseãæ±ãã€ã€ãPromiseãè¿ããããªãå ŽåããããŸããããããå ŽåãPromise.tryã¯å³æå®è¡ãããéåæé¢æ°ãã䟿å©ãããããŸããã
KG
äŸãã°ãPromiseã®é
åãè¿ãå Žåãªã©ã§ããã
JHD
éåæé¢æ°ãåžžã«æãŸãã解決çãšã¯éããŸãããã ããããç§ã¯finallyã®ãããªã¡ãœããã®äœæ¥ãããŠããã®ã§ãã
YK
ããããæ¡åŒµã®ããã®ã©ã€ãã©ãªããã®ãŸãŸé
åžããã°ããã®ã§ã¯ãªãã§ããïŒ
JHD
ããªãã£ã«ïŒpolyfillïŒãé
åžããŸããããéçºè
ãã¡ã¯ãã¹ãŠã®æ©èœãå«ãŸããäžã€ã®ãã®ã奜ãããã§ãã
MM
å
šäœçã«ãã®æ©èœã«ããã ãã®äŸ¡å€ããããã¯åãããŸããããStage 1ã®åºæºã¯æºãããŠãããšæããŸãã
BT
éåæé¢æ°ãååšããç¶æ³ã§ãããªãïŒMMïŒãæºè¶³ãããã»ã©æçšãªPromise APIã¯ããã®ã§ããããïŒ
MM
Promiseãã€ãã©ã€ãã³ã°ã®ããã® Promise.post/send/get ãªã©ã§ãã
BT
ãããéåæé¢æ°ã§å®è£
ã§ãããã®ã«ã€ããŠã¯ã©ãã§ããããïŒ
MM
å
æ¬çã«èšã£ãŠããããã§ã¯ãããŸããããéåæé¢æ°ã¯ããŒãã«ãéåžžã«é«ãããŸãããéåæé¢æ°ãšæ¯èŒããŠã匷åãªæ ¹æ ãããå€ãã®äŸ¡å€ãå ããªããã°ãªããªãã§ãããã
JHD
ãã©ã³ã¹ãã€ã©ïŒtranspilerïŒãšã¯ç¡é¢ä¿ã«ãæ°ããæ©èœãå°å
¥ããã«ã¯ããŒãã«ããããŸããéåæé¢æ°ã¯ãã®ã©ã€ãã©ãªæ©èœãããå°å
¥ãé£ãããããããŸãããç§ãã¡AirBnBã§ã¯regeneratorãžã®äŸåãæãŸãªããããéåæé¢æ°ã䜿çšããŠããŸããã
AR
Promiseãéåæé¢æ°ã®ããã«çè§£ããããå
±éåºç€ã®äžã§ã段éçã«æ¡çšã§ãã倿§ãªæ©èœãæã€ããšã¯è¯ãããšã§ãã
JHD
new Promiseã¯çè§£ããã®ãé£ããã§ãã
YK
éåæé¢æ°ã䜿ããããžã§ã¯ãã§ã¯ãåžžã«éåæé¢æ°ã ãã䜿ããããªãã±ãŒã¹ãèŠã€ããã®ãé£ããã§ãããããŠèªç¥çè² è·ïŒcognitive overheadïŒããã£ãšå°ãªãã§ãã
æéå¶éã®éç¥
JHD
Stage 1ã«é²ã¿ãŸããããïŒ
WH
Stage 1ã«å察ã¯ããŸããããæçšæ§ã«ã€ããŠã¯ç¢ºä¿¡ããããŸããã
JHD
æçšæ§ã«å¯Ÿããæžå¿µããStage 2ã¯ãŸã æ©ãããã§ãã説åŸã®ããã«äœãå¿
èŠã§ããããïŒ
MM
è³æè«æ ïŒãã®ææ¡ã¯ã·ã³ã¿ãã¯ã¹ïŒsyntaxïŒã«é¡äŒŒããŠãããçŽäº€æ§ïŒorthogonalityïŒã®èгç¹ããæåŸ
ãããããã®ãªã®ã§ãèªç¥çè² è·ãå¢ããã®ã§ã¯ãªãããããæžããããããããŸããã
BT
tryã䜿ã£ãŠãã人ã
ã®ã³ãŒãããŒã¹ãã€ãŸãæšæºPromiseã¯ãŸã æºåãã§ããŠããªããšèšã人ã
ã®ã³ãŒãããŒã¹ãèŠãŠã¿ãŸãããã
çµè«
çµè«/決å®
TC39
Stage 1 æ¿èªã åæ©ã¥ãã«é¢ãããããªã蚌æ ãå¿
èŠãªãããStage 2ã«ã¯ãŸã æºåãã§ããŠããªãã
äžã§èŠãŠããããã«ããã®ããŒãã£ã³ã°ã§ãPromise.tryãå¿
èŠãªã±ãŒã¹ã«å¯Ÿããçåã匷ãæèµ·ãããã
ããããŠã²ãšãŸãStage 1ã«ãšã©ãŸã£ããŸãŸã8å¹Žã®ææ¥ãæµããã
Stage 2 - 2024.2
2024幎2æãé·ãæéãçµãŠPromise.tryã®Stage 2ã«é¢ããè°è«ãå§ãŸã£ãã
2024幎2æ6æ¥ TC39 ããŒãã£ã³ã°å
容 - Promise.try Stage 2 è°è«
https://github.com/tc39/notes/blob/main/meetings/2024-02/feb-6.md#promisetry-for-stage-2
Promise.try Stage 2ææ¡ - çºè¡šè
: Jordan Harband (JHD)
JHD
é ãæã®2016幎ãç§ã¯Promise.tryãææ¡ãããåºæ¬çãªèãæ¹ã¯ããã ããã颿°ããã£ãŠããããåæãéåæããPromiseãè¿ããã©ãããäŸå€ãã¹ããŒãããã©ããââãããã£ãããšãæ°ã«ããããªãããPromiseã§å
ãã§äŸå€ãçºçããå Žåã«é©åã«åŠçãããããã«ãããããšãããã®ã ã
JHD
èŠããããæ¹æ³ãããã«ãããPromise.resolveã®åŸã«.thenå
ã§é¢æ°ãå®è¡ããæ¹æ³ã ãããã¯ããŸãåãããæãŸãªãã¿ã€ãã³ã°ã§éåæçã«å®è¡ãããŠããŸããšããæ¬ ç¹ããããããçŸä»£çãªã¢ãããŒãã¯å³æå®è¡éåæé¢æ°ïŒIIAFEïŒã䜿ãããšã§ã颿°ãawaitããã°å®éã«æãã ã»ãã³ãã£ã¯ã¹ãåŸãããã
JHD
ãã®çºè¡šããããšããäžè¬çãªåå¿ã¯ãawaitæ§æã§åé¡ã解決ã§ããããšãèæ
®ãããšãStage 2ã«å°éããã«ã¯ãã説åŸåã®ããæçšæ§ã®èšŒæ ãå¿
èŠã ããšãããã®ã ã£ãã
åœæããã®ææ¡ã®ãŠãŒã¶ãŒã©ã³ãçã¯ãããã䜿ãããŠããçšåºŠã§ãäžè¬çãªæåŸ
ãå°ãªããšãåžæã¯ã誰ããã®æ©èœãå¿
èŠãšããæ§æã ãã§ååã ããããšãããã®ã ã£ããšæãã
ã ããããã2幎åŸããã®ããã±ãŒãžãå
¬éãããé±é4600äžããŠã³ããŒããèšé²ããŠãããæéãšãšãã«ãã®ã°ã©ãã¯äžããç¶ããNPMã®ããŒã¿ãšã©ãŒãé€ãã°ãé±é4500äžããŠã³ããŒãã§å®å®ããŠãããæããã«ããçšåºŠã¯äœ¿ãããŠããã
ãã¡ãããããã¯äžäººã®éçºè
ãäœã£ãäžã€ã®ããã±ãŒãžã ããããŠãã®éçºè
ã¯ä»ã«ãå€ãã®ããã±ãŒãžãæã£ãŠããã®ã§ã䜿çšé »åºŠã®é«ãå¥ã®ããã±ãŒãžã«å«ãŸããŠããã®ãããããªããããã§ãããã®æ©èœã¯å¿
èŠã ãšæããŠããã
ç§ã®åé¿çã¯ãããã«ããnew Promiseã®ã³ãŒãã¹ããããã ãnew Promiseã®executorå
ã§resolveã«é¢æ°ãæž¡ãæ¹æ³ã ãåãããéããããšã©ãŒãèµ·ãããããåå¿è
ã«ãšã£ãŠã¯æ··ä¹±ããã
ãã®ããã±ãŒãžãèŠã€ããçŸåšéåžžã«é »ç¹ã«äœ¿ãããŠããããšã確èªããäžã§ããã®ææ¡ãå床æã£ãŠããŠStage 2ãèŠè«ããããStage 2ã«å¿
èŠãªæ¡ä»¶ã«ã€ããŠå§å¡äŒãã©ãèããŠãããæ°ããªåçãåŸããã以äžã ã
NCL
ã¯ããããã¯ç§ã®ãããã¯ãªã®ã§ãããããæç¢ºãªè³ªåãå¿
èŠã ãããããããªãå¿
èŠãã瀺ããŠããããšæã£ãŠãããããã®ã±ãŒã¹ã§ã¯æ¬åœã«å¿
èŠãªã®ãïŒ value = await synchronousfunction() ãšããã°ããã®ã§ã¯ãªããïŒ åãããšã§ã¯ãªãã®ãïŒ
JHD
ãã®ç¹å®ã®ã³ãŒãã¹ããããã§ã¯ãããã ããããã¬ãã«awaitãããã°åãããã«åããã ããPromiseã³ã³ãããŒã¿ã§äœ¿ãããPromiseãååŸããããšãç®çã§ããå ŽåãããåçŽã§ã¯ãªããawaitããå€ã§ã¯ãªãPromiseãã®ãã®ãå¿
èŠãªãŠãŒã¹ã±ãŒã¹ã¯åžžã«ååšããããã§Promise.tryãæçšã«ãªãã
ãã¥ãŒã¯ç©ºã ã
JHD
ãã¥ãŒã空ã§ããã°ãStage 2ãèŠè«ãããã仿§ã¯éåžžã«ã·ã³ãã«ã ã[仿§ãªã³ã¯ã衚瀺] ããããã¹ãŠã ãæè¿ãææ°ã®ä»æ§ããŒãžã§ã³ã«åãããŠãªããŒã¹ããã
KG
ã¯ãããªããããå¿
èŠãªã®ãããŸã çè§£ã§ããªãããªãå¿
èŠãªã®ããããå°ã説æããŠãããããã
JHD
ã¯ããç¹ã«APIãæžããŠãããšããAPIã®ãŠãŒã¶ãŒãã³ãŒã«ããã¯é¢æ°ãæž¡ããŠãããšããNCLãžã®å¿çã§è¿°ã¹ãããã«ãæ¬è³ªçã«ã¯ããããPromiseãäœæããŠãã远å ã®äœæ¥ãããããäŸãã°ãäœããšraceãããããPromise.allã䜿ã£ããã远å ã®äœæ¥ãããããããããæç¹ããã¯awaitæ§æãæ®ããåŠçããŠãããããåæã®ã»ããã¢ãããã§ãŒãºã§ã¯ãç§ã®ãŠãŒã¹ã±ãŒã¹ã®å€ãã§PromiseãçŽæ¥æ±ãå¿
èŠããããåé¿çã¯ããã®ã§ãããã¯æ°ããæ©èœã§ã¯ãªããæã
ãããªããã°ãªããªãããšããããçŽæçã§ãšã¬ã¬ã³ãã«è¡šçŸããæ¹æ³ã«ãããªãã
KG
å
·äœçã«ã¯ãAPIãã³ãŒã«ããã¯é¢æ°ãåãåãããŠãŒã¶ãŒãåæé¢æ°ãæž¡ãå¯èœæ§ãããããã®é¢æ°ãåæçã«äŸå€ãã¹ããŒããå¯èœæ§ãããç¶æ³ã®ããšãïŒ
JHD
ããã ããŠãŒã¶ãŒã颿°ãæž¡ããŠãããããããåæãéåæããäŸå€ãã¹ããŒãããã©ãã確å®ã«ã¯åãããªãââãããããè²ãªããã®é¢æ°ã ããããŠæ°ã«ããããªãããã Promiseãåãåã£ãŠãæåãå°œãããŠåŠçãããã ãã ã
JRL
æã
ãAMPïŒampproject/amphtml#15107ïŒã§ééããå¥ã®ã±ãŒã¹ã¯ãéåæãšã©ãŒãã³ããªã³ã°ã ã£ãããšã©ãŒãPromiseã§å
ãŸããŠãããšãã¯ãã¹ãŠé©åã«åŠçã§ããŠãããã ãã³ãŒã倿Žã«ãããPromise.resolveã䜿ã£ãŠé¢æ°ãåŒã³åºãããã«ãªãããã®é¢æ°èªäœãåæçã«ãšã©ãŒãã¹ããŒããŠãããåæçãªcatchãã³ããªã³ã°ããªããPromiseãã§ãŒã³ã®éåæcatchãããªãã£ãããããããã®ã±ãŒã¹ãé©åã«åŠçã§ããªãã£ããéçºè
ãã¡ã¯ãã®éããçè§£ããŠããããPromiseã«ãã£ãããããŠéåæã®PromiseåŠçããžãã¯ã§åŠçããããšæã£ãŠãããããã§ãPromise.resolve(fn())ã䜿ã£ãŠãããã¹ãŠã®ã±ãŒã¹ãæã
ã®ããŒãžã§ã³ã®promise.tryã«åŒ·å¶çã«çœ®ãæãããšããããã°ãä¿®æ£ãããããã以æ¥ãéåæãšã©ãŒãã³ããªã³ã°ã«èªä¿¡ãæãŠãããã«ãªã£ãã
SYG
ããã¯ãŠãŒã¶ãŒã¹ããŒã¹ã®ã³ãŒãã§å€çšããããã¿ãŒã³ã ãåžžã«åæçã«å®è¡ãããæ±ºå®çã«éèŠãªã®ã¯ããã¹ãŠã®äŸå€ããã£ããããŠãªãžã§ã¯ããããPromiseã«å€æããŠãããããšã ã
EAD
äžç¹ãNPMã®ããŠã³ããŒãæ°ã«ã€ããŠãé±é4600äžããŠã³ããŒããã©ãã«è¡ãã®ãç¥ããããä»ã®ã©ã€ãã©ãªã®ã¡ã€ã³ã³ã³ããã«å
ãŸããŠãããšããŠããã©ã®ã©ã€ãã©ãªã§äœ¿ãããŠããã®ããäœãâŠâŠ4600äžã¯èšå€§ãªæ°ã ïŒ äœãã䜿ã£ãŠãããã§ã¯ããã¯äœãªã®ãïŒ
JHD
以åããããã±ãŒãžã®äŸåé¢ä¿ãã€ã³ã¹ããŒã«æ°ã§ãœãŒãããæ¹æ³ã欲ããã£ãããŸãã«ãã®è³ªåã«å§å¡äŒã§çããããã ãããæ¹ãåãããªãããã誰ãç¥ã£ãŠãããæããŠã»ããã
DE
ãããæ¥µç«¯ã«çããã®ã§ã¯ãªãããšãèæ
®ãããšãæšæºã©ã€ãã©ãªã«å
¥ããã¹ããã©ããã«ã€ããŠæã
ãåãã¹ã質åã¯ãã³ãŒããæžããšãã®äººã
ã®ã¡ã³ã¿ã«ã¢ãã«ã«ã©ãã ã圹ç«ã€ãããšããããšã ãããå人çã«ã³ãŒããèªããšããæ¯èŒã®åºæºãšããŠèããã®ã¯Promise withResolversãštry-catchã®äœ¿çšã ãããããããšãã®æ§æã¯ãäŸå€ãã¹ããŒããå¯èœæ§ã®ãããã®ã§å€ãååŸããããšããæ£ããã€ãã£ãªã ã䜿ããã人ã
ãå°ããŠããã¹ããã©ã¯ãã£ã¹ã«åŸãå©ãã«ãªããããããªãããããã¯ããã³ãŒããããé£ããåã£ãã³ã³ãããŒã¿ãããããªããã§ã¯ããã®ãããªæ¯èŒãã©ããã¹ããïŒ
JHD
åŠç¿ãããããšå¯èªæ§ã®èгç¹ããã¯ããããæ£ããèãæ¹ã ãšæããé¢ä¿ããæåæ°ã«å€§ããªå·®ã¯ãªããwithResolversã䜿ãã®ã¯ããã®åé¡ã解決ããããã峿å®è¡éåæé¢æ°ã®ããã«new Promiseã䜿ããããäœåãæªãã ãããã ãããã®è°è«ã«åœ±é¿ãäžããªããšæãããã ãå¯èªæ§ã¯éèŠã ãšããç¹ã«ã¯åæãããããnew PromiseãšexecutoråŒæ°ã§é¢æ°åŒã³åºããå
ãããšãpromise.tryããå¯èªæ§ãé«ããšèãã人ãããã°ãããã¯èšèªã«è¿œå ããããšã«å¯Ÿããéåžžã«åŒ·åãªåè«ã«ãªãã ãããã ãã誰ãããããã䞻匵ããããšã¯æççã ã
NROãããŠã³ããŒãã®ååã¯jestããã ãšè¿°ã¹ãã
JHD
ããã ãjestããã¹ãã£ã³ã°ãã¬ãŒã ã¯ãŒã¯ã§ãããšããäºå®ã¯ãtapeã«ãåœãŠã¯ãŸãã ãããšããç§ã®çŽæãšããçšåºŠäžèŽããã
ãã¥ãŒã¯ç©ºã ã
JHD
ã§ã¯åŒãç¶ãStage 2ãèŠè«ããããã¯ãïŒ
CDA
promise.try Stage 2ææ Œã«å¯Ÿããæç€ºçãªæ¯æã¯ãããïŒ
SYG
ç§ãææ¡ããã®ã¯ãïŒå
·äœçãªäŸãïŒèŠããŠãããã°ãStage 2ãStage 2.7ã«ãã®ãŸãŸé²ãããããããªãããšããããšã ã£ãããã ãããããStage 2ãâŠâŠå
·äœçãªã³ãŒããèŠããŸã§ã¯Stage 2ã«äžå®ããããåºæ¬çã«ã©ããªã³ãŒãã§ãããã®ã§ããããã©ãã§äœ¿ããããèªã¿ããããããŠããã¯ãäŸãã°ä»æ¥ãææ¥ã§ãããããããŠâŠâŠåŒæ°ãæž¡ããªã以å€ã«åŒæ°ãæž¡ãããšã«ã€ããŠããå°ãèãããã
JHD
ã¯ããèšé²ã®ããã«ãPromise.tryã¯ä»åã¯ææ Œããªããã ããShuãšããããŠããåºãå§å¡äŒã«ãè©äŸ¡ã®ããã®ããå
·äœçãªäŸãããã€ãæäŸãããShuã ãããããå
·äœçã«ç€ºããããããä»ã®èª°ããåæãäŒããŠãããã°ãäºåã«ã¢ãžã§ã³ãã«èŒããŠããªããŠããæéãããã°ããŒãã£ã³ã°ã®åŸåã§æ»ã£ãŠããŠStage 2ãStage 2.7ãèŠè«ãããããããªããããããšãã
Stage 2ã«é²å
¥ããããã«ãPromise.tryé¢é£ã©ã€ãã©ãªã®äœ¿çšéã§èª¬åŸã詊ã¿ãããPromise.tryã«å¯Ÿããçåã¯äŸç¶ãšããŠæ®ã£ãŠããã
䜿çšå
ã®å€§åã¯jestã ã£ããšãããJordan Harbandèªèº«ãtapeãšãããã¹ãã£ã³ã°ã©ã€ãã©ãªãæ±ã£ãŠããããšãèããã°ãçŽåŸã§ããéšåã§ããã
ãã¹ãã£ã³ã°ã©ã€ãã©ãªã®ç«å Žããããã°ããã¹ãã®ã³ãŒã«ããã¯ãåæçãéåæçãåãããªãããšããããããããããããæ¹æ³ãå¿
èŠã ã£ãã®ã§ã¯ãªãããšæšæž¬ããã
Stage 2.7 - 2024.04
Stage 2ã«å
¥ã£ãŠããã¯ããšããšãæåã§é²ãã§ãã£ãã
ãããã以åãšåãçåã¯äŸç¶ãšããŠååšããŠããã
Promiseã«ã¯æ¢ã«catchãfinallyãããã®ã ãããtryãããã°èªç¶ã ãšããæèŠããã£ãäžæ¹ã
ããã°äŸ¿å©ã ãšã¯æãããèªåã¯å®éã«ã¯ããŸã䜿ããªãã ãããšããæèŠãäž»æµã§ãã£ãã
async IIFEãšåçã§ã¯ãªãããšããæèŠããã£ãããã®éšåã¯ãæã
ãææäœ¿ããã¿ãŒã³ã«ãåœãŠã¯ãŸãããã§ããã
é »ç¹ã§ã¯ãªãããããŸã«ä»¥äžã®ããã«effectå
ã§éåæåŠçãè¡ãããã«ä»¥äžã®ãããªãã¿ãŒã³ã䜿ãããããšãããïŒãããŸã§äŸã§ããïŒã
çè
ãIIFEãã¿ãŒã³ã®æ¹ã銎æã¿ãããããèªç¥çã«ã³ãŒããèªãéçšã§ã¯åŸè
ãååã«çŽæçã§ãããšæããã
ãã®è°è«ã§ã¯ãawaitæ§æã®ãã©ã³ã¹ãã€ã«ã³ã¹ããããé«ããšããç¹ãæ ¹æ ãšããŠæããããŠããã
// â async IIFE ãã¿ãŒã³
useEffect (() => {
( async () => {
try {
const res = await fetch ( "https://api.example.com/data" );
const data = await res. json ();
console. log (data);
} catch (err) {
console. error (err);
}
})();
}, []);
// â¡ Promise.try ãã¿ãŒã³
useEffect (() => {
Promise . try (() => fetch ( "https://api.example.com/data" ))
. then (( res ) => res. json ())
. then (console.log)
. catch (console.error);
}, []);
2024幎4æ8æ¥ TC39ããŒãã£ã³ã°è°äºé² - Promise.try Stage 2.7 è°è«
https://github.com/tc39/notes/blob/main/meetings/2024-04/april-08.md#promisetry-for-stage-27
JHD
ã¯ããPromise.tryã«ã€ããŠè©±ããä»åã®ããŒãã£ã³ã°ã§Stage 2.7ææ ŒãèŠè«ããããšèããŠãããã¬ãã¥ã¢ãŒã®äžäººã¯ãŸã 確èªããŠããªãããããäžäººã®ã¬ãã¥ã¢ãŒãšå
šãšãã£ã¿ã¯ç¢ºèªæžã¿ã ã解決ãã¹ãæžæ¡äºé
ãäžã€ããã颿°ã«åŒæ°ãæž¡ããã©ããã ãå
·äœçã«ã¯ããã®æ¯èŒçå°ããªãã«ãªã¯ãšã¹ãããããçæãããã¢ãŒãã£ãã¡ã¯ããé€ãããã®ã ããã®PRã¯åŒæ°æž¡ãæ©èœã远å ãããã¡ã€ã³ãã©ã³ãäžã®ææ¡ã¯ã³ãŒã«ããã¯ãåãåã£ãŠåŒæ°ãªãã§åŒã³åºãããã®ãã«ãªã¯ãšã¹ãã¯ãè€æ°ã®ããªã²ãŒãã®èŠè«ã«ããäœæããããã®ã§ãPromise.tryã«æäŸããã远å åŒæ°ãã³ãŒã«ããã¯ã«æž¡ããä»ã®å€æŽã¯ãªãããã®ãã«ãªã¯ãšã¹ããå«ããStage 2.7ã®ã³ã³ã»ã³ãµã¹ãåŸãããšãç§ã®æã¿ã ãã³ã³ã»ã³ãµã¹ãåŸããããããã®PRãããŒãžããŠãã¹ãäœæ¥ãéå§ããã
CDAãMarkã«çºèšæš©ãæž¡ãã
MM
åŒæ°ã®è¿œå ã¯æ°ã«å
¥ã£ããã ããã®æ©èœããããšãcatchãthenã«ãåããã®ãæåŸ
ããã®ã§ã¯ãªããïŒ ã€ãŸãââèªç¥çè² è·ã®åé¡ã§ã¯ãªããïŒ then以å€ã§ãããã¯å®éã«catchã«è¿œå ã§ããæ©èœãªã®ãïŒ
JHD
catchãthenãšã®éãã¯ãããããæ¢åã®Promiseã«è¿œå ãããã³ãŒã«ããã¯ã ãšããããšã ãšæãããã§ã«then/catch/finallyã䜿ã£ãPromiseãã€ãã©ã€ã³ã®äžã«ããã
JHD
äžæ¹ãPromise.tryã¯Promiseãã€ãã©ã€ã³ãäœæããããããã¯ããã«å
¥ãéã«äœ¿ãããã
JHD
ã ããåæããã衚é¢çã«ã¯äŒŒãŠãããã ããthenãcatchãfinally APIãšæ§æïŒasync/awaitïŒã®é¡äŒŒæ§ã®æ¹ããPromise.tryãšthen/catch/finallyã®é¡äŒŒæ§ãããéèŠã ãšèãããæŠå¿µçã«éãããªããšããŠãïŒéãã¯ãããšæããïŒã
MM
ã¯ãããããåãå
¥ããããããã¯é©åãªæšè«ã ãšæãã
MM
ããäžã€è³ªåããããPromise.tryã¯async IIFEïŒå³æå®è¡éåæé¢æ°ïŒã§ã³ãŒããå
ãããšãšåçãïŒ
JHD
ã¯ããïŒã¿ã€ãããŠç€ºãïŒ
MM
async IIFEãšã®å¯Ÿç§°æ§ãèžãŸããŠãasync IIFEã®äœ¿çšãæšå¥šããã®ã§ã¯ãªããtryã远å ãã䟡å€ãããçç±ã説æããŠã»ããã
JHD
ãã¡ãããããã¯Stage 1ã®è°è«ã§2ã©ãŠã³ãã»ã©è°è«ãããããšã ãã ãæ¬è³ªçã«ãæåã®çç±ã¯ãå€ãç°å¢ããµããŒãããå¿
èŠãããå Žåãæ§æã¯ãã©ã³ã¹ãã€ã«ã³ã¹ããããé«ããšããããšã ããããããäžã€ã®ç¹ã¯ããã®çåããã®ææ¡ãã»ãŒ9幎éStage 1ã«çããŠãããšããããšã ããã®æ©èœïŒããªãã£ã«ãªã©ïŒã¯440åããŠã³ããŒããèšé²ããŠãããåã«async IIFEã䜿ãã®ã§ã¯ãªãã颿°åœ¢åŒãå€ãã®äººã«å¥œãŸããããããã¯å¿
èŠãšãããŠããå®èšŒçãªèšŒæ ããããç§ã®äž»èгçãªçŸçæèŠã§ã¯ã峿å®è¡é¢æ°ã®äœ¿çšã¯éç¶ãšããŠãããã¢ãžã¥ãŒã«ã®ããç°å¢ã§ã¯æä»£é
ãã®ã¢ãããŒãã«ãªã£ãŠããããã®ãŸãŸã§ãã£ãŠã»ãããšæããããã¯äž»èгçãªæèŠã§ããã誰ãåæããå¿
èŠã¯ãªããã€ãŸãããã®ããã±ãŒãžãšãã®æ©èœãïŒæšæºåã«ãã£ãŠïŒäžèŠã«ããããšããŠããã®ã ã
MM
å®èšŒçãªèšŒæ ã¯æ°ã«å
¥ã£ããå察ã¯ããªãã
KG
å
ã»ã©MMãæèµ·ããããšãžã®å¿çã ãããã¯thenãcatchãšã¯ç°ãªãããšãæç¢ºã«ãããããããã¯ã³ãŒã«ããã¯ãåãã¡ãœããã ããããã¯ããäžè¬çãªé¢æ°åŒã³åºãã¡ãœããã ãFunction.prototype.callãFunction.prototype.applyã®ãããªé¢æ°åŒã³åºãçšã®ã¡ãœããã®ããã«ãç¹å®ã®åã®é¢æ°ãåããã®ã¯åŒæ°ãæž¡ãã®ãçã«ããªããcatchã®ããã«ç¹å®ã®åœ¢åŒãæåŸ
ãããã®ã¯ïŒåŒæ°æž¡ãã®ïŒæå³ãèãã
SYG
ã¬ã¬ã·ãŒç°å¢ã®è°è«ã«ã€ããŠçè§£ã§ããªãã£ãç¹ãæç¢ºã«ããããJHDã¯æ§æã®ãã©ã³ã¹ãã€ã«ã¯ã³ã¹ããé«ããšèšã£ããã§ã¯ãasync/awaitããªããã©ã³ã¹ãã€ã«ãå¿
èŠãªå€ãç°å¢ãååšãããããããã®ç°å¢ã«ã¯æ°ããæšæºåãããPromise.tryã¡ãœãããããããšããç¶æ³ãªã®ãïŒ çè§£ã§ããªãã
JHD
Promise.tryã¯ããªãã£ã«ã§ãããasyncã¯ã§ããªããã€ãŸããç°å¢ã«ã€ã³ã¹ããŒã«ãããŠããå¿
èŠããªãã颿°ãšããŠååšã§ãããPromise.tryã¯éåæé¢æ°ããµããŒããããã®ã®éåžžã«å°ããªãµãã»ããã ãã ããããããå¯äžã®åé¡ã§ããã°ã峿å®è¡éåæé¢æ°ããã®ç®çã§äœ¿ãããŠããããšãæ€åºããŠããã®é¢æ°ã«çœ®ãæããéçè§£æå€æã誰ããæžããã ãããå®éã«ã¯ãããªãã®ã¯ååšããªããã
SYG
ãªãã»ã©ãå
·äœçã«ãç§ã®æžå¿µã¯ââäºè§£ã ãã¢ãã³JSããœãŒã¹ã³ãŒãïŒãã©ã³ã¹ãã€ã«åã®ãœãŒã¹ïŒã§æžããŠãããããã€ãã£ãã®async/awaitããµããŒãããªãå€ãç°å¢ãã¿ãŒã²ããã«ããŠãããŠãŒã¶ãŒãããå ŽåãPromise.tryãæšæºåãããšãawaitã®ãã©ã³ã¹ãã€ã«ãããã¡ãã®æ¹ãããéžæè¢ã«ãªããããïŒ ç§ã®çè§£ã¯æ£ãããïŒ
JHD
ãããæå³ããããšã ãã ããããããã®ææ¡ã®ã¡ã€ã³ã®åæ©ã ãšã¯æã£ãŠããªããããããäœæ¥ãããŠããæã
ã«ãšã£ãŠã®å¯æ¬¡çãªå©ç¹ã«ãããªããã¡ã€ã³ã®åæ©ã¯ãç§ãããããšããŠããããšãããããã圢ã®å³æå®è¡é¢æ°ãããæç¢ºã ãšããããšã ã
CDAãKGã«çºèšæš©ãæž¡ãã
KG
ã¯ãããã®ææ¡ã®ã¡ã€ã³ã®åæ©ã«ã¯åæãããããªãã£ã«å¯èœæ§ã®éšåã¯æ··ä¹±ãããããããããšãããããã±ãŒãžããããããããââ
JHD
ãã®éããç§ãããã«è§Šããããšã§ããã£ãŠæ··ä¹±ãæããã
JHD
ã¯ããããªãã£ã«å¯èœæ§ã¯ãå§å¡äŒãšããŠèšèšå€æã®åæ©ã¥ããäœãã®æ¡çšã®æ£åœåã«äœ¿ãããšã«åæããããšã®ãªãåæ©ã§ãããããã§ãããã䞻匵ããŠããããã§ã¯ãªãã
KG
ããã確èªãããã£ãã ãã ã
DRR
ã€ãŸããããã§ã®è°è«ã®äžã€ã¯æç¢ºãã ãšæãããããŠââãã®ãŠãŒã¹ã±ãŒã¹ã«ã¯å®å
šã«ã¯ç¢ºä¿¡ãæãŠãªããã ãããããããé²ãããªããå
šäœçãªç®æšãæç¢ºãã§ãããªããtryãšããååã¯Promiseã«é¢ããäŸå€ãšäœãé¢ä¿ãããããã«æ¬åœã«èãããã
DRR
ã¯ããã ãããã¯âŠâŠ
JHD
ããããã䟿å©ã«ããããšããŠããå
·äœçãªã±ãŒã¹ã¯ã颿°ãåæçã«äŸå€ãã¹ããŒããå Žåã ã
DRR
ã€ãŸããããåŠçããã®ããPromise.resolveã䜿ããªãã颿°èªäœãåŒã³åºããããªããšã¯ã§ããªãã®ãã
JHD
ã§ããªããäŸå€ãã¹ããŒããããã ãPromise.catchãªã©ã§å
ãå¿
èŠãããã
DRR
ãªãã»ã©ãçè§£ãããããã¯æ¬è³ªçã«é¢æ°ãåŒã³åºããtry-catchã§å
ã¿ãïŒäŸå€ãçºçããå Žåã«ïŒãªãžã§ã¯ããããšããããšã ã
DRR
ãªãã»ã©ãã¯ããååãadaptã®ãããªãã®ã ã£ããããã£ãã®ã ãã
JHD
ååã«ãã ããã¯ãªããä»ã®ãŠãŒã¶ãŒãèŠããšãåžžã«tryãšåŒã°ããŠããããŸãããªã¹ãã«ã¯attemptãããããfcallãããïŒã ãfcallãæ¯æãã人ã¯ããªãã ããïŒãattemptã¯è峿·±ãä»£æ¿æ¡ã ãããªã¹ãã«äžåºŠããçŸããããã®ã©ã€ãã©ãªã«ããã¯ãtryãããã
DRR
ã¯ããçè§£ãããããã
JHD
ã§ã¯ãåŒæ°æž¡ãã®ãã«ãªã¯ãšã¹ããããŒãžããããšãæ¡ä»¶ã«ãStage 2.7ã®ã³ã³ã»ã³ãµã¹ãèŠè«ãããã
CDAãMMã®æ¯æã確èªããã
CDA
Promise.tryã®Stage 2.7ææ Œãæç€ºçã«æ¯æããä»ã®å£°ã¯ãããïŒ DEïŒ
DE
è°è«ã®äžã§ãåæ©ã«ã€ããŠããææ§ã«çåãåãã人ãäœäººãããããã®ææ¡ã«å¯ŸããŠç§ãåæ§ã«æããŠãããæªãã¯èŠããªãããå人çã«äœ¿ããšã¯æããªããå§å¡äŒã®äžã§ãã®ææ¡ã®åæ©ãã©ã®çšåºŠåãå
¥ããããŠãããçè§£ããããã«ã枩床ãã§ãã¯ãäœãããã¹ãããšæããéåžžãæž©åºŠãã§ãã¯ããã®ããã«ã¯äœ¿ããªãããšã¯åãã£ãŠããããæççãªèŠæ¹ãšæç€ºçãªæ¯æã®æ¯çãå°ãæ°ã«ãªãã
JHD
ã€ãŸããé©åã ãšæãã°ããããããšã¯ã§ããã ãããã ããããã¯Stage 2ã«é²ããšãã«åãã¹ã質åã ãšæããStage 2ã®æ¿èªã¯ãå§å¡äŒãåæ©ã«åæããŠããããšãæå³ããã
DE
ãã¡ãããã ããStage 2.7ãææ¡ãããšãã«ã¯ããã¯ããäžè¬çãªããšã ãStage 2ã«å°éããç§ã®ææ¡ãStage 2ã®åŸã«ãããªãåæ©ã¥ããå¿
èŠãšããªãã£ããªããã¯ããã«å°ãªãäœæ¥ã§æžãã ã ãããã¯ããã ãããããå§å¡äŒã§å埩çãªã³ã³ã»ã³ãµã¹ãèŠæ±ãããšããä¿å®çãªåºæ¬ååãããã確èªããããã ã
JHD
ã¯ããã€ãŸããå§å¡äŒã®æéãæå¹ã«äœ¿ãããšæãã°ããã®ããã»ã¹ãèžãããšã¯ã§ãããã ãââåŠå®çãªæèŠããªãè¯å®çãªæèŠãããããŠãŒã¶ãŒã©ã³ãã§å¿
èŠãšãããŠããçžåœãªèšŒæ ããã以äžãç§ã«ã¯ããªãæç¢ºã«èŠããã
DE
ã§ã¯ââæž©åºŠãã§ãã¯ãèš±å¯ãããã©ããã¯ä»»ãããããã§ã¯äžé©åã ãšæããªããããããã
CDAããã¥ãŒã®MMã«çºèšæš©ãæž¡ãã
MM
ã¯ããæž©åºŠãã§ãã¯ã«åæãããæž©åºŠãã§ãã¯ã®åã«ããã®ææ¡ãæ¯æããèªç¥çè² è·ã®è°è«ãäžã€è¿œå ããããPromiseã«ã¯catchãšfinallyããããã ãããããèŠã人ã¯Promise.tryãèªç¶ã«æ¢ãã ããããcatchãfinallyãšããŸã飿ºãã圢ã§ååšããæ¹ããååšããªããããé©ããå°ãªããšæãã
JHD
ããããšããããã«åæãããææ¡è
ãšããŠãææ¡ãããæž©åºŠãã§ãã¯ãèš±å¯ããªãã®ã¯å©å·±çãªè¡åã§ãããå©å·±çã«æ¯ãèããããªããå§å¡äŒã®æéãæå¹ã«äœ¿ãããšæãã°ãããããããšã¯ã§ãããæå¹ã ãšããå
åã¯èŠããªãããéšå±å
šäœã®æèŠã«å§ãããã
MM
枩床ãã§ãã¯ããããã
枩床ãã§ãã¯ã®è°è«ãé²è¡ããã
CDA
ãã©ã¡ãŒã¿ãæ£ç¢ºã«å®çŸ©ããããåéžæè¢ã®æå³ãã
DE
枩床ãã§ãã¯ã®è³ªåã¯ããã®ææ¡ã¯æçšã«èŠãããïŒãã§ã©ãã ããããéåžžã«è¯å®çããããäžç¢ºã/å°æããŸã§ââãã®ã¹ãã¯ãã©ã ããã®çš®ã®è³ªåã«ã¯é©åã ãšæããJHDããããã質åã§ã©ãã ã
JHD
ã¯ããããããåŠå®çãªæèŠãæã€äººãããã°ããã¥ãŒã«å
¥ã£ãŠåŒ·èª¿ããŠã»ãããããã§ãªããã°ãããã©ã«ãã®çµµæåã©ãã«ã§ååã ã
DE
ããã®ææ¡ã¯æçšã«èŠãããïŒã
KG
æç¢ºã«ã§ãããïŒ ããã®ææ¡ã¯ããªãã«ãšã£ãŠæçšã«èŠãããïŒããªã®ãããã®ææ¡ã¯æçšã«èŠãããïŒããªã®ãïŒ å人çã«ã¯çµ¶å¯Ÿäœ¿ããªãããæããã«æçšã«èŠãããã®ã¯å€ãããã
DE
ããããæçšã«èŠããããã®æ¹ãããå
æ¬çã ãã¯ãã
JHD
ã€ãŸãã誰ãã«ãšã£ãŠæçšãããšããããšã ã
枩床ãã§ãã¯ã®æç¥šãé²è¡ããã
NRO
ç§ã®ç«å Žã¯ãæªããªããã ããäžè¬çãªæçšæ§ã«ã¯ç¢ºä¿¡ããªããç§ãšåããããªç«å Žã®äººããé¢å¿ãªãããéžãã ããæå³ã®éãã¯äœãïŒ
JHD
äŸãã°ãè°è«ã«çŽåŸããªãã£ãããšããããšã ã
NRO
ããã±ãŒãžã®å©ç¹ãããèŠããªãã®ã§äººæ°ã«ã¯çŽåŸã§ããªãã£ãããä»ã®äººãè¿°ã¹ãã®ãšåãç«å Žã®ããã ãäŸãã°ãæªããªããæçšãšã¯æããªããDEãåãç«å Žã瀺ããŠããã®ã§ããé¢å¿ãªãããéžãã ã
JHD
ã¯ããã€ãŸããååãªæ°ã®äººã«ãšã£ãŠæçšã ãšæããã©ããã«è¿ããæããã«ãèªåã«ãšã£ãŠæçšã ããšèšã£ãŠãã人ã¯ããããããã¯åŠå®ã§ããªãã誰ãã«ãšã£ãŠã¯ç¢ºå®ã«æçšã ãã ããã¯ããã€ãŸããåãããªããäž¡æ¹ãšãåé¡ãªããšæãã
枩床ãã§ãã¯çµæ: è¯å®6祚ãåŠå®10祚
DE
ãé¢å¿ãªããã¯å®å
šã«åŠå®çã§ã¯ãªããããå°ã蚌æ ãæã£ãŠæ»ã£ãŠããã®ãæåã ãšæãããã¡ãããæç¥šèªäœãäœãã®çµè«ãå°ãããã§ã¯ãªããã ããææ¡è
ã«å¯Ÿããæšå¥šãšããŠã¯ããã ã
JHD
ã¯ããã€ãŸããç§ã®è°è«ã¯å®äºãããšæãã远å ã§ã©ããªèšŒæ ãæåºã§ãããåãããªãããããŠStage 2ã«å°éãããšãã«ãã®çºè¡šã¯ãããšæã£ãŠãããã ãããããã©ããªäŸ¡å€ãå ãããåãããªãããã®ããã«Stage 2.7ã®ã³ã³ã»ã³ãµã¹ãä¿çãããªããããã¯ããã§ãããã ãæ¬åœã«ââäœãæã£ãŠæ»ãã°ãããå
·äœçãªã¢ã¯ã·ã§ã³ã¢ã€ãã ãå¿
èŠã ããã¹ãŠãæ¢ã«æç€ºãããããã«èŠããããã ã
CDAãæéãã»ãŒçµäºããããšãéç¥ããMMã«çºèšæš©ãæž¡ãã
MM
ã¯ããç§ã¯indifferentïŒé¢å¿ãªãïŒã§ãã£ãŠãabstainïŒæ£æš©ïŒã§ã¯ãªããåŠå®çãªæèŠã§ã¯ãªããå¥ã«åŠå®çãªæèŠãšãããã®ãããããã®çµæã«åºã¥ããŠãä»ããã³ã³ã»ã³ãµã¹ãæ±ããã¹ãã ã
JHD
ã§ã¯ãã¯ããå床Stage 2.7ã®ã³ã³ã»ã³ãµã¹ãèŠè«ããã
è€æ°ã®åºåžè
ãæ¯æã衚æããã
CDA
TKPãã+1ããããå察ãã人ã¯ïŒ æç€ºçã«å察ã¯ããªãããèšé²ã®ããã«ä»ã®æèŠã衚æããã人ã¯ïŒ
DE
Markã®ãé¢å¿ãªãããæ£æš©ãšè§£éããããšã«å°ãç°è°ãå±ããããæ£æš©ããããã°æ£æš©ã§ãããç§ã¯Nicoloãèšã£ãæå³ã§ãé¢å¿ãªããã«æç¥šããããã³ã³ã»ã³ãµã¹ã«ã¯å察ããªãã
MM
ïŒæç¥šç»é¢ã¯ïŒããç®ã®åã«ãªãããæ£æš©ãªãã·ã§ã³ããã£ããã©ããèŠããŠããªãã
DE
æç¥šããªããã°ããã ãã ã
MM
æ£æš©ã®ã€ããã§ã¯ãªãã£ããNicoloãä»èª¬æããã®ãšåãçç±ã§æç¥šããã
JHD
æç¢ºã«ãããšãç§ã«ãšã£ãŠããã¯åŒ±ãåŠå®ã§ãããã³ã³ã»ã³ãµã¹ããããã¯ããææã¯ãªããæ¯æç¥šã¯å
¥ããªãã ããããšããããšãæå³ããã
DE
ãã®éããã¯ãããã®è§£éã¯æ£ãããšæãã
ã³ã³ã»ã³ãµã¹ãæç«ããã
CDA
ãããPromise.try Stage 2.7ææ Œããã§ãšãã
çºè¡šè
èŠçŽ: åæ©ã«ã€ããŠããèºèºããã£ããå€ãã®äººãæçšæ§ã«ç¢ºä¿¡ãæãŠãªãã£ãããå察ãã人ã¯ããããè€æ°ã®å§å¡ãæçšæ§ã«ç¢ºä¿¡ãæã£ãŠããã
çµè«: Promise.tryãStage 2.7ã«ææ Œããã
Stage 3 - 2024.06
ããããã¯æ¢ã«å€ãã®ããšãåæãããŠãããå®è£
ãå§ãŸã£ãŠããããã倧ããªç°è«ãªãææ Œãããã
test262ã«ãã¹ããããŒãžããããã©ãŠã¶ãå®è£
ãéå§ãããïŒECMA-262ã«å¯Ÿãããã¹ããšããæå³ã§test262ãšåŒã°ããŠãããïŒ
https://github.com/tc39/test262/tree/main/test/built-ins/Promise/try
2024幎6æ11æ¥ TC39ããŒãã£ã³ã°è°äºé² - Promise.try Stage 3 è°è«
https://github.com/tc39/notes/blob/main/meetings/2024-06/june-11.md#promisetry-for-stage-3
JHD
ãããçãããããã«ã¡ã¯ãããæ°åã®ããŒãã£ã³ã°ã§èŠããŠããããã«ãPromise.tryã¯test262ã®ãã¹ããããŒãžããããã§ã«è€æ°ã®ãšã³ãžã³ã«å®è£
ãããŠããããã©ã°ã®èåŸã§ã¯ãããã仿¥ã¯Stage 4ã«æ¥ãã€ããã¯ãªãããŸãStage 3ãéæããå¿
èŠãããããç¹ã«ãã©ãŠã¶ã«ãã£ãšå®è£
ã®æéãäžããå¿
èŠãããããã¹ãŠæºåãã§ããŠããã®ã§ãStage 3ãžå®¹æã«é²ããããšãæåŸ
ããŠãããã¯ããææ ŒãèŠè«ããåã«è³ªåãã¥ãŒã«äœããããïŒ
CDA
ãã¥ãŒã«è³ªåã¯ãªãã
JHD
äºè§£ãã§ã¯ãStage 3ææ ŒãèŠè«ããã
è€æ°ã®å§å¡ãæ¯æã衚æããã
CDA
Dan MinorãStage 3ãæ¯æãç§ãStage 3ãæ¯æãããRGNãåæïŒ+1ïŒãDuncan McGregorãåæïŒ+1ïŒã
MLS
ç§ãStage 3ãæ¯æããã
CDA
ãããMichael SaboffãTom KoppãåæïŒ+1ïŒãæç¢ºã«ã³ã³ã»ã³ãµã¹ãããããã ã
JHD
ãããããããšãã
SYGã®æèŠïŒäžåšïŒ: V8ãšããŠStage 3ææ Œã«æžå¿µäºé
ã¯ãªãã
èŠçŽãšçµè«: Promise.tryã¯test262ã®ãã¹ããããŒãžãããStage 3ææ Œã®ã³ã³ã»ã³ãµã¹ãéæããã
Stage 4 - 2024.10
2024幎10æãã€ãã«æçµçãªææ Œãå®çŸããã
2024幎10æ9æ¥ TC39ããŒãã£ã³ã°è°äºé² - Promise.try Stage 4 è°è«
https://github.com/tc39/notes/blob/main/meetings/2024-10/october-09.md#promisetry-for-stage-4
JHD
ã¯ããããäžåºŠPromise.tryã«ã€ããŠè©±ãããã®æ©èœã¯ã³ãŒã«ããã¯é¢æ°ãšãªãã·ã§ã³ã®å¯å€é·åŒæ°ãªã¹ããåãã颿°ãåŒã³åºãã颿°ããšã©ãŒãã¹ããŒããå Žåã¯ãªãžã§ã¯ããããPromiseãè¿ãã颿°ãå€ãè¿ããå Žåã¯ãã®å€ãPromise-resolveããããã®ææ¡ã«ã¯æ¿èªæžã¿ã®spec PRããããCloudflare WorkersãbunãnodeãChromeã«å®è£
ãããŠãããFirefoxã§ã¯ããŒãžã§ã³132ãããã©ã°ä»ãã§å©çšå¯èœã§ãããŒãžã§ã³133ãš134ã§ãã©ã°ãªãã§å
¬åŒã«ãµããŒãããããLibJSãBoaãKieselã«ãå®è£
ãããŠãããWebKitã§ã¯ãã©ã°ä»ãã§ãµããŒããããŠããããæè¿ãã©ã°ãåé€ããããStage 4ãžã®ææ ŒãæåŸ
ããŠããã
远å ã®è³ªåã¯ãªãã
JHD
ãã®ææ¡ãæ¯æãã人ã¯ãããïŒ
è€æ°ã®å§å¡ãæ¯æã衚æããã
CDA
NROãOMTãYSVãã¯ããå€ãã®äººãæ¯æã衚æããã
CDA
LGHã¯ã3ç®æã§å®è£
ã«åå ããã®ã§æèŠãåã£ãŠãããããããªãããæ¯æããããšè¿°ã¹ãRKGã¯ãããïŒããšèšããMFã¯ãèŠä»¶ãæºãããŠããããšè¿°ã¹ãã
CDA
KMãåæãããç§ãæ¯æãããä»ã«ãäžæ³ããããã£ãããšãããªã¢ã¯ã·ã§ã³ã¯ãããïŒ WHãåæãããKMãTomãåæãããã¯ããã»ãŒå®äºã®ããã ãéŸå€ãè¶
ããã
çµè«: Stage 4ææ Œããã§ãšãã
ã©ã®ããã«å®è£
ãããã®ãïŒ
ããŒãã£ã³ã°ããŒãããã£ãšè¿œããããªãããææ¡ãçºè°ããæçµæ¿èªããããŸã§ã®éçšãèŠãŠããã
ã§ã¯ãå®éã®å®è£
ã¯ã©ããªã£ãŠããã®ã ãããïŒ
ãŸã仿§ãèŠãŠã¿ããã
Promise.try No description available
https://tc39.es/proposal-promise-try/#sec-promise.try
Promise.try ( callbackfn, âŠargs )
Let C be the this value.
If C is not an Object, throw a TypeError exception.
Let promiseCapability be ? NewPromiseCapability(C).
Let status be Completion(Call(callbackfn, undefined, args)).
If status is an abrupt completion, then
a. Perform ? Call(promiseCapability.[[Reject]], undefined, « status.[[Value]] »).
Else,
a. Perform ? Call(promiseCapability.[[Resolve]], undefined, « status.[[Value]] »).
Return promiseCapability.[[Promise]].
æ¥æ¬èªã«èš³ããšä»¥äžã®ããã«ãªãã
Promise.try ( callbackfn, âŠargs )
tryã¡ãœããã¯callbackfnåŒæ°ãåãåãã以äžã®æé ãå®è¡ããïŒ
Cãthiså€ãšããã
Cããªããžã§ã¯ãïŒObjectïŒã§ãªããã°TypeErroräŸå€ãã¹ããŒããã
promiseCapabilityã ? NewPromiseCapability(C) ã§èšå®ããã
statusã Completion(Call(callbackfn, undefined, args)) ã§èšå®ããã
statusãabrupt completionïŒç°åžžå®äºïŒã§ããã°
a. ? Call(promiseCapability.[[Reject]], undefined, « status.[[Value]] ») ãå®è¡ããã
ããã§ãªããã°
a. ? Call(promiseCapability.[[Resolve]], undefined, « status.[[Value]] ») ãå®è¡ããã
promiseCapability.[[Promise]] ãè¿ãã
仿§ã®ç䌌ã³ãŒãã®èªã¿æ¹ã«ã€ããŠã¯ã以äžã®2ã€ã®ããã¥ã¡ã³ããåèã«ããŠã»ããã
ECMAScript® 2026 Language Specification Introduction
This Ecma Standard defines the ECMAScript 2026 Language. It is the seventeenth edition of the ECMAScript Language Specification. ECMAScript is based on several originating technologies, the most well-known being JavaScript (Netscape) and JScript (Microsoft). The language was invent
https://tc39.es/ecma262/multipage/notational-conventions.html#sec-algorithm-conventions
How to Read the ECMAScript Specification No description available
https://timothygu.me/es-howto/
ç°¡åã«èª¬æãããšãã³ãŒã«ããã¯ãåãåã£ãŠå®è¡ãããã®çµæã«å¿ããŠPromiseãšããŠå
ãã§è¿ããšãããã®ã§ããã
ã§ã¯ãã£ããV8äžã®å®è£
ã«ç§»ããããŸãã¯ã³ã¡ã³ãã«æ³šç®ããŠã»ããã
https://source.chromium.org/chromium/chromium/src/+/main:v8/src/builtins/promise-try.tq\
https://github.com/v8/v8/blob/main/src/builtins/promise-reaction-job.tq
// Copyright 2024 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
namespace promise {
// https://tc39.es/proposal-promise-try/#sec-promise.try
@ incrementUseCounter ( 'v8::Isolate::kPromiseTry' )
transitioning javascript builtin PromiseTry (
js - implicit context: Context, receiver: JSAny)( ... arguments ): JSAny {
// 1. Let C be the this value.
// 2. If C is not an Object, throw a TypeError exception.
const receiver = Cast < JSReceiver >(receiver)
otherwise ThrowTypeError (MessageTemplate::kCalledOnNonObject, 'Promise.try' );
// 3. Let promiseCapability be ? NewPromiseCapability(C).
const capability = NewPromiseCapability (receiver, False);
// 4. Let status be Completion(Call(callbackfn, undefined, args)).
const callbackfn = arguments [ 0 ];
let result : JSAny ;
try {
if ( arguments . length <= 1 ) {
result = Call (context, callbackfn, Undefined);
} else {
const rest = NewRestArgumentsFromArguments ( arguments , 1 );
result = Call (
context, GetReflectApply (), Undefined, callbackfn, Undefined, rest);
}
} catch (e, _message) {
// 5. If status is an abrupt completion, then
// a. Perform ? Call(promiseCapability.[[Reject]], undefined, «
// status.[[Value]] »).
Call (context, UnsafeCast < Callable >(capability.reject), Undefined, e);
// 7. Return promiseCapability.[[Promise]].
return capability.promise;
}
// 6. Else,
// a. Perform ? Call(promiseCapability.[[Resolve]], undefined, «
// status.[[Value]] »).
Call (context, UnsafeCast < Callable >(capability.resolve), Undefined, result);
// 7. Return promiseCapability.[[Promise]].
return capability.promise;
}
} // namespace promise
V8äžã®ã³ãŒããããèŠããšãå
ã»ã©ç¢ºèªãã仿§ã®ç䌌ã³ãŒãããã®ãŸãŸã³ã¡ã³ããšããŠã³ãŒãäžã«èšé²ãããŠããã
ãããŸãã«ã³ãŒããçºããŠã¿ããšãã³ã¡ã³ãã®ç䌌ã³ãŒããšã»ãŒåäžã«å®è£
ãããŠããããšããããã
ãã®ã³ãŒãã¯TypeScriptã«äŒŒãŠããããæ¡åŒµåãèŠããš.tqãšããæ¡åŒµåã䜿ãããŠããããã® tq 㯠torque ã®ç¥ã§ããã
å®è£
ãæ¢ããŠã¿ãæããŠã£ããC++ã«åºäŒããã®ãšæã£ãŠããã®ã ããtorqueãšããèšèªã¯äžäœäœãªã®ãïŒ
Torque
Torqueã¯V8ã§ã®ã¿äœ¿çšãããDSLïŒDomain Specific LanguageïŒã§ããã
Torqueã®ããã¥ã¢ã«ãåç
§ãããšãäžèšã®çåã«å¯ŸããçããèŠã€ããã(https://v8.dev/docs/torque )
V8 Torque is a language that allows developers contributing to the V8 project to express changes in the VM by focusing on the intent of their changes to the VM, rather than preoccupying themselves with unrelated implementation details. The language was designed to be simple enough to make it easy to directly translate the ECMAScript specification into an implementation in V8, but powerful enough to express the low-level V8 optimization tricks in a robust way, like creating fast-paths based on tests for specific object-shapes.
V8 Torqueã¯ãV8ãããžã§ã¯ãã«è²¢ç®ããéçºè
ãå®è£
ã®è©³çްã«åãããããšãªãããäœãå€ãããã®ãããšããæå³ã«éäžããŠVMã®ããžãã¯ãèšè¿°ã§ããããã«ããèšèªã§ãããECMAScriptã®ä»æ§ãV8ã®ã³ãŒããžå®¹æã«å€æã§ããã»ã©ã·ã³ãã«ã§ãããªãããç¹å®ã®ãªããžã§ã¯ã圢ç¶ãå€å¥ããŠé«éå®è¡ãã¹ãçæãããªã©ãV8ã®äœã¬ãã«æé©åææ³ãå
ç¢ã«è¡šçŸã§ããã»ã©åŒ·åã«èšèšãããŠããã
Torqueã®ç®çèªäœããæ¢åã®å®è£
ãããhuman readableã«ããããšãç®æšãšããŠããã
ãã®ææ®µãšããŠã仿§ã®ç䌌ã³ãŒãã®æå³ãã§ããéããã®ãŸãŸè¡šçŸã§ããããã«äœãããã
èªçã®èæ¯
åæã®V8ã¯ãçµã¿èŸŒã¿é¢æ°ã®å€§åãã»ã«ããã¹ãã£ã³ã°JavaScriptïŒV8å°çšã®æ¹èšïŒã§èšè¿°ããŠããã
ãã®ã¢ãããŒãèªäœã¯æªããªãã£ãããArrayã®ã¡ãœããã®ããã«åŒã³åºãé »åºŠãé«ã仿§ãè€éãªé¢æ°ã¯ããŠã©ãŒã ã¢ããéçšãçµãªããã°éããªããªãã£ãã
ããã§ãããããã³ã¢ã®çµã¿èŸŒã¿é¢æ°ãã¢ãŒããã¯ãã£å¥ã®ã¢ã»ã³ããªã§çŽæ¥æžããŠ**ãåååŒã³åºãããæé«ã®ããã©ãŒãã³ã¹ã**ãåºãããšæžåœã«èšè¿°ãããŠããã
ãšãããåé¡ã¯ãã¢ã»ã³ããªã§æžããŠããããã«åãã©ãããã©ãŒã ããšã«æ°äžè¡ãã®ã³ãŒããè€è£œããªããã°ãªãããä¿å®ãã©ãã©ãå°é£ã«ãªã£ãŠãã£ãããšã§ããã
2015幎ãTurboFanæé©åã³ã³ãã€ã©ã®å°å
¥ã«ããç¶æ³ãå€ããããšã«ãªãã
TurboFanããã¯ãšã³ãã䜿çšããå
±éã®äœã¬ãã«IRã人éãçŽæ¥æ±ããããã«ããC++ DSL **CodeStubAssemblerïŒCSAã2016ïŒ**ãç»å Žããã
ãããã§äžåºŠæžããã³ãŒãããã¹ãŠã®ãã©ãããã©ãŒã åãã«æé©åãããã¢ã»ã³ããªãžå€æãããããã«ãªããå€ãã®ææžãã¢ã»ã³ããªã³ãŒããåé€ã§ããã
ãããCSAã§ããã人éãéäžæžããªããã°ãªããäŸç¶ãšããŠé£ãããããã«äŒŽããªã¹ã¯ãååšããã
ããã§2019幎ãECMAScriptã®ç䌌ã³ãŒããã»ãŒãã®ãŸãŸæžãåãã°ãæ®ãã®ãã€ã©ãŒãã¬ãŒããå®å
šæ§ãã§ãã¯ãã³ã³ãã€ã©ãèªåçæããŠãããäžäœDSL Torqueãç»å Žããããšã«ãªã£ãã®ã§ããã
Torqueã®ã³ãŒãã¯äžé段éã§ããCSA C++ã³ãŒãã«å€æãããTurboFanãããã«ãã·ã³ã³ãŒããžå€æããŠãããã
ãŸãšãããšãJSã»ã«ããã¹ãã£ã³ã° â ã¢ã»ã³ããªã®fast-path â CSAïŒCodeStubAssemblerïŒ â Torque ãšããé ã«å¹Ÿéã«ãç©ã¿éãªã£ãŠãããšããããšã§ããã
å
·äœçãªå
容ã¯ã以äžã®Tobias Tebbiã®çºè¡šãèŠããšãããããã
VIDEO
https://www.jfokus.se/jfokus20-preso/V8-Torque--A-Typed-Language-to-Implement-JavaScript.pdf No description available
https://www.jfokus.se/jfokus20-preso/V8-Torque--A-Typed-Language-to-Implement-JavaScript.pdf
ã§ã¯ãTorqueã§å®è£
ãããã³ãŒãã¯ã©ã®ããã«å€æãããã®ã ãããïŒ
V8ã®ãœãŒã¹å
ãèŠããšãTorqueã®ã³ã³ãã€ã©ãååšããã
https://github.com/v8/v8/blob/main/src/torque/torque-compiler.cc
ååã®ç±æ¥
V8é¢é£ããŒã«ã®ååã¯ããã®ã»ãšãã©ããšã³ãžã³ã«é¢é£ããçšèªããåä»ããããŠããã
代衚çãªãã®ã«IgnitionãSparkplugãTurboFanãªã©ããããTorqueãå転åãæå³ãããããšã³ãžã³ã®åã«é¢ä¿ã¯ãããã
ä»ã®åœåã«æ¯ã¹ããšãããŸã§ãã³ãšããªãæ°ããããçŽæ¥çã«ãšã³ãžã³ã«é¢é£ããŠãããšããããã¯ããã«ã¯ãå ããŠCSAãžãšããã蟌ããšãããããããã¡ã¿ãã¡ãŒãªã®ã§ã¯ãªãã ãããïŒ
ãµã
Promise.tryã®äœ¿ãéãæ¢ã£ãŠãããã¡ã«ãããããå€ãã®ããšã調ã¹ãããšã«ãªã£ãã
ææ¡ã®éçšã远ããããäžã§äœåºŠãçåãæããããããŠããã®ãèŠãªããããªããèªåãŸã§æ¯ãè©°ãŸãæããããã
ããŸããŸãªã¡ãœãããã©ã®ããã«ããŠç§ãã¡ã®ããšã«å±ãã®ãããããæ°ã«ãªã人ã®åèã«ãªãã°å¹žãã§ããã
åèæç®
Promise.try - MDN Web Docs
Promise.try() support now enabled in Chrome (web.dev)
TC39 Proposal - Promise.try specification
Original TC39 Promise.try Proposal README
Bluebird - Promise.try documentation
What is Promise.try, and why does it matter? (Joepie91âs blog)
GitHub - TC39 Promise.try issue discussion
V8 Torque documentation
V8 Torque Builtins documentation
V8 CodeStubAssembler blog post
Chromium Source - Promise.try implementation in Torque
V8 Torque Compiler source code
Jfokus 2020 - V8 Torque: A Typed Language to Implement JavaScript (slides)