ãã®è³æã§ã¯ãV8ã®å
éšã¡ã«ããºã ãJavaScriptãªããžã§ã¯ãã®ããããã£ãšã©ã®ããã«æ©èœãããã«çŠç¹ãåœãŠãŠããŸãã JavaScriptã®èгç¹ããããããã£ãæ€èšããå Žåããããã®ç°ãªãã¿ã€ãã¯äºãã«ããã»ã©ç°ãªããŸããã JSãªããžã§ã¯ãã¯éåžžãæååããŒãšä»»æã®ãªããžã§ã¯ããå€ãšããŠæã€èŸæžã®ããã«åäœããŸãã ãã ããèšèªä»æ§ãèªããšãããšãã°ãåæããããšãã«ç°ãªãã¿ã€ãã®ããããã£ã®
åäœãç°ãªãããšãããããŸãã ä»ã®å Žåã§ã¯ãããŸããŸãªçš®ã®ç¹æ§ã®æ¯ãèãã¯åºæ¬çã«åãã«èŠããŸãã
ããããã£ã®é¡äŒŒæ§ãèæ
®ããããããã£ã®æäœã¡ã«ããºã ã®å®è£
ã¯ãããã»ã©å€§èŠæš¡ãªã¿ã¹ã¯ã§ã¯ãªãããã«èŠããŸãããV8è
žã§ã¯ãããããã£ã衚ãããã€ãã®ç°ãªãæ¹æ³ã䜿çšãããŸãã ããã¯ãæåã«é«ãããã©ãŒãã³ã¹ã確ä¿ããããã«è¡ãããæ¬¡ã«ã¡ã¢ãªãç¯çŽããããã«è¡ãããŸãã

ãã®èšäºã§ã¯ããªããžã§ã¯ãã®åçã«è¿œå ãããããããã£ãåŠçãããšãã«V8ãã©ã®ããã«é«ãããã©ãŒãã³ã¹ãå®çŸãããã«ã€ããŠèª¬æããŸãã V8ã§JavaScriptã®å®è¡ãæé©åããæ¹æ³ã®æ¬è³ªãäŸãã°
çµã¿èŸŒã¿ãã£ãã·ã¥ãªã©ãçè§£ããã«ã¯ãããããã£ãæäœããã¡ã«ããºã ã®æ©èœã®ç¥èãå¿
èŠã§ãã
ããã§ã¯ãV8ãååä»ãããããã£ãšæŽæ°ã§ã€ã³ããã¯ã¹ä»ããããããããã£ãåŠçããæ¹æ³ã«ã€ããŠèª¬æããŸãã ãã®åŸãæ°ããååä»ãããããã£ããªããžã§ã¯ãã«è¿œå ãããšãã«ãé衚瀺ã¯ã©ã¹ã®æ©èœã®ç¹åŸŽãèæ
®ããŸããããã«ããããªããžã§ã¯ãã®åœ¢ç¶ããã°ããèå¥ã§ããŸãã æ¬¡ã«ãV8ã®å
éšã¡ã«ããºã ã«ã€ããŠã®è©±ãç¶ããé衚瀺ã®ããããã£ã䜿çšããæ©èœã«å¿ããŠãç®çã®æé©åã衚瀺ããŸãã æåŸã®ã»ã¯ã·ã§ã³ã確èªããåŸãæŽæ°ãã€ã³ããã¯ã¹ä»ããããããããã£ãŸãã¯ã€ã³ããã¯ã¹ãå²ãåœãŠãããé
åèŠçŽ ãV8ãã©ã®ããã«åŠçããããåŠç¿ããŸãã
ååä»ãããããã£ãšé
åèŠçŽ ã®æ¯èŒ
éåžžã«åçŽãªãªããžã§ã¯ããåæããããšããå§ããŸãããã ããšãã°ã
{a: "foo", b: "bar"}
ãŸãã ãã®ãªããžã§ã¯ãã«ã¯ã
b
ãš
b
ãšãã2ã€ã®ååä»ãããããã£
a
ãããŸãã ãã®ãªããžã§ã¯ãã«ã¯ãããããã£åã®æŽæ°ã€ã³ããã¯ã¹ããããŸããã ããäžè¬çã«èŠçŽ ãšããŠç¥ãããã€ã³ããã¯ã¹ä»ãããããã£ã¯ãé
åã®ç¹æ§ã§ãã ããšãã°ãé
å
["foo", "bar"]
ã¯2ã€ã®ã€ã³ããã¯ã¹ä»ãããããã£ããããŸã
0
ã¯å€
foo
ã§ã
1
ã¯å€
bar
ã§ãã V8ã§ååä»ãããããã£ãšã€ã³ããã¯ã¹ä»ãããããã£ã衚ãå®è£
ã®æåã®äž»èŠãªéãã«ã€ããŠèª¬æããŸããã
次ã®å³ã¯ãéåžžã®JavaScriptãªããžã§ã¯ããã¡ã¢ãªå
ã§ã©ã®ããã«èŠãããã瀺ããŠããŸãã
ååä»ãããã³ã€ã³ããã¯ã¹ä»ãããããã£èŠçŽ ãšããããã£ã¯ããŸããŸãªããŒã¿æ§é ã«ä¿åãããŸãã ããã«ãããæ°ããããããã£ãšèŠçŽ ã远å ããããããããæäœããããã®ããŸããŸãªãã³ãã¬ãŒãã§ãããã«ã¢ã¯ã»ã¹ãããããæäœã®å¹çãåäžããŸãã
èŠçŽ ã¯ãäž»ã«
pop
ã
slice
ãªã©ã®ããŸããŸãª
Array.prototypeã¡ãœããã«äœ¿çšãã
slice
ã ãããã®é¢æ°ã次ã
ã«ç¶ãããããã£ã§æ©èœããããšãèãããšãV8ã®å
éšè¡šçŸã¯ãã»ãšãã©ã®å ŽåãåçŽãªé
åã®ããã«èŠããŸãã
åŸã§ãã¡ã¢ãªãç¯çŽããããã«ã€ã³ããã¯ã¹ä»ãããããã£ãä¿åããããã®èŸæžã¡ã«ããºã ã®äœ¿çšã«åãæ¿ããç¶æ³ã«ã€ããŠèª¬æããŸãã ç¹ã«ãã¹ããŒã¹é
åãèŸæžã«çœ®ãæããããšã«ã€ããŠè©±ããŠããŸãã
ååä»ãããããã£ã¯åæ§ã«å¥ã®é
åã«ä¿åãããŸãã ãã ããèŠçŽ ãšã¯ç°ãªããããŒã䜿çšããŠããããã£ã¹ãã¢å
ã®äœçœ®ãèŠã€ããããšã¯ã§ããŸããã 远å ã®ã¡ã¿ããŒã¿ãå¿
èŠã§ãã V8ã§ã¯ããã¹ãŠã®JavaScriptãªããžã§ã¯ãã«é ãã¯ã©ã¹ïŒHiddenClassïŒãé¢é£ä»ããããŠããŸãã é ãã¯ã©ã¹ã«ã¯ããªããžã§ã¯ãã®åœ¢ç¶ã«é¢ããæ
å ±ãç¹ã«ããããã£åãšããããã£ã¹ãã¢å
ã®ã€ã³ããã¯ã¹ã®å¯Ÿå¿ã«é¢ããæ
å ±ãæ ŒçŽãããŸãã è€éãªäœæ¥ã·ããªãªã§ã¯ãåçŽãªé
åã§ã¯ãªãèŸæžã䜿çšããŠããããã£ãä¿åããããšããããŸãã 察å¿ããã»ã¯ã·ã§ã³ã§ã¯ãããã«ã€ããŠããã«è©³ãã説æããŸãã
âçµè«
- ã€ã³ããã¯ã¹ä»ãããããã£ã¯å¥ã®ã¢ã€ãã ã¹ãã¢ã«ä¿åãããŸãã
- ååä»ãããããã£ã¯ãç¬èªã®ããããã£ã¹ãã¢ã«æ ŒçŽãããŸãã
- èŠçŽ ãšããããã£ã®ãªããžããªã¯ãé
åãŸãã¯èŸæžã®ããããã§ãã
- åJSãªããžã§ã¯ãã«ã¯ããªããžã§ã¯ãã®åœ¢ç¶ã«é¢ããæ
å ±ãä¿åããé ãããã¯ã©ã¹ãé¢é£ä»ããããŠããŸãã
é衚瀺ã®ã¯ã©ã¹ãšèšè¿°åé
å
èŠçŽ ãšååä»ãããããã£ã®äž»ãªéããäœã§ããããçè§£ããããV8ã§é衚瀺ã®ã¯ã©ã¹ãã©ã®ããã«æ©èœãããã調ã¹ãå¿
èŠããããŸãã
é衚瀺ã®ã¯ã©ã¹ã«ã¯ããªããžã§ã¯ãã®ããããã£ã®æ°ããããã¿ã€ããžã®ãªã³ã¯ãªã©ããªããžã§ã¯ãã«é¢ããã¡ã¿æ
å ±ãæ ŒçŽãããŸãã é ãã¯ã©ã¹ã¯ãå
žåçãªãªããžã§ã¯ãæåããã°ã©ãã³ã°èšèªã®ã¯ã©ã¹ãšæŠå¿µçã«äŒŒãŠããŸãã ãã ããJavaScriptãªã©ã®ãããã¿ã€ãããŒã¹ã®èšèªã§ã¯ãéåžžããªããžã§ã¯ãã¯ã©ã¹ã«ã€ããŠäºåã«ç¥ãããšã¯ã§ããŸããã ãã®çµæããã®å ŽåV8ã§ã¯ãé衚瀺ã®ã¯ã©ã¹ããªã³ã¶ãã©ã€ã§äœæããããªããžã§ã¯ããæŽæ°ããããšåçã«æŽæ°ãããŸãã
é衚瀺ã®ã¯ã©ã¹ã¯ããªããžã§ã¯ãã®åœ¢ç¶ã®èå¥åãšããŠæ©èœãããããæé©åV8ã³ã³ãã€ã©ãšçµã¿èŸŒã¿ãã£ãã·ã¥ã¡ã«ããºã ã®éåžžã«éèŠãªéšåã§ãã ããšãã°ãæé©åã³ã³ãã€ã©ã¯ãé ãã¯ã©ã¹ãšãªããžã§ã¯ãã®æ§é ã®äºææ§ãä¿èšŒã§ããå Žåãé©åãªããŒã¿æ§é ã«ããããã£å€ãåã蟌ãããšãå©çšã§ããŸãã
é ãããã¯ã©ã¹ã®éèŠãªéšåãèŠãŠãã ããã
JSãªããžã§ã¯ããé衚瀺ã¯ã©ã¹ãããã³ååä»ãããããã£ã«é¢ããæ
å ±ãå«ãèšè¿°åV8ã§ã¯ãJSãªããžã§ã¯ãã®æåã®ãã£ãŒã«ãã¯é衚瀺ã®ã¯ã©ã¹ãæããŸãã ïŒå®éã«ã¯ãããã¯V8ããŒãäžã«ãããã¬ããŒãžã³ã¬ã¯ã¿ãŒã«ãã£ãŠç®¡çããããªããžã§ã¯ãã®å Žåã§ãïŒã ããããã£ãæäœãããšãã芳ç¹ããèŠããšãæãéèŠãªã®ã¯ã
bit field 3
ãšããŠå³ã«ç€ºãããŠãã
bit field 3
ã§ãããããããã£ã®æ°ãšèšè¿°åã®é
åãžã®ãã€ã³ã¿ãæ ŒçŽãããŠããŸãã èšè¿°åé
åã«ã¯ãååä»ãããããã£ã«é¢ããæ
å ±ãç¹ã«ããããã£ã®ååãšå€ãæ ŒçŽãããäœçœ®ãå«ãŸããŸãã ããã§ã¯æŽæ°ã§ã€ã³ããã¯ã¹ä»ããããããããã£ã§ã¯åäœããªããããèšè¿°åé
åã«ã¯å¯Ÿå¿ãããšã³ããªããªãããšã«æ³šæããŠãã ããã
ãªããžã§ã¯ãã«é衚瀺ã¯ã©ã¹ãå²ãåœãŠããšãV8ã¯åãæ§é ãæã€ãªããžã§ã¯ããã€ãŸãåãååã®ããããã£ãåãé åºã§ãããªããžã§ã¯ããåãé衚瀺ã¯ã©ã¹ãæã€ãšããä»®å®ããé²ã¿ãŸãã ãããå®çŸããããã«ãæ°ããããããã£ããªããžã§ã¯ãã«è¿œå ããããšãæ°ããé衚瀺ã¯ã©ã¹ãããã«å²ãåœãŠãããŸãã æ¬¡ã®äŸã§ã¯ã空ã®ãªããžã§ã¯ãããå§ããŠã3ã€ã®ååä»ãããããã£ã远å ããŸãã
ãªããžã§ã¯ãã«ååä»ãããããã£ã远å ãããšãã«äžéã®é衚瀺ã¯ã©ã¹ãäœæããæ°ããããããã£ã远å ããããã³ã«ããªããžã§ã¯ãã®é衚瀺ã®ã¯ã©ã¹ã倿ŽãããŸãã V8ã¯ãé衚瀺ã®ã¯ã©ã¹ãæ¥ç¶ããé·ç§»ããªãŒãäœæããŸãã V8ã¯ãããšãã°ãããããã£
a
ã空ã®ãªããžã§ã¯ãã«è¿œå ãããšãã«ãã©ã®é ãã¯ã©ã¹ãåãããç¥ã£ãŠããŸãã ãã®é·ç§»ããªãŒã«ããããªããžã§ã¯ããåãæ¹æ³ã§é
眮ããããšãã«ãåãé ãã¯ã©ã¹ã確å®ã«åãåãããšãã§ããŸãã
次ã®äŸã¯ãåçŽãªã€ã³ããã¯ã¹å¯èœãªããããã£ããªããžã§ã¯ãã«è¿œå ãããŠããé·ç§»ããªãŒãåãã«ãªãããšã瀺ããŠããŸãã
ãªããžã§ã¯ãã«ååä»ãããã³ã€ã³ããã¯ã¹ä»ãããããã£ã远å ãããã ããä»ã®ååä»ãããããã£ïŒãã®å Žåã¯
d
ïŒã远å ãããæ°ãããªããžã§ã¯ããäœæãããšãV8ã¯æ°ããé衚瀺ã¯ã©ã¹çšã«å¥ã®ãã©ã³ããäœæããŸãã
ç°ãªãããããã£ã»ãããæã€ãªããžã§ã¯ãã®ããŸããŸãªé·ç§»ããªãŒã®æ§ç¯âçµè«
- åãæ§é ïŒã€ãŸããåãé åºã§åãããããã£ïŒã®ãªããžã§ã¯ãã«ã¯ãåãé ãã¯ã©ã¹ããããŸãã
- ããã©ã«ãã§ã¯ããªããžã§ã¯ãã«è¿œå ãããæ°ããååä»ãããããã£ããšã«ãæ°ããé衚瀺ã¯ã©ã¹ãäœæãããŸãã
- ã€ã³ããã¯ã¹ä»ãããããã£ã远å ããå Žåãæ°ããé衚瀺ã¯ã©ã¹ã®äœæã¯çºçããŸããã
3çš®é¡ã®ååä»ãããããã£
V8ããªããžã§ã¯ãã®åœ¢ç¶ã«é¢ããæ
å ±ããµããŒãããããã«é ãã¯ã©ã¹ã䜿çšããæ¹æ³ã説æããåŸãååä»ãããããã£ãå®éã«ä¿åãããæ¹æ³ã«ã€ããŠèª¬æããŸãã äžã«ç€ºããããã«ãããããã£ã«ã¯2ã€ã®åºæ¬çãªçš®é¡ããããŸããååä»ããšã€ã³ããã¯ã¹ä»ãã§ãã ããã§ã¯ãååä»ãããããã£ã«ã€ããŠè©³ãã説æããŸãã
{a: 1, b: 2}
ãªã©ã®åçŽãªãªããžã§ã¯ãã¯ãV8ã§ã¯ç°ãªãå
éšè¡šçŸãæã€ããšãã§ããŸãã JSãªããžã§ã¯ãã®åäœã¯åçŽãªèŸæžã®åäœã«å€å°äŒŒãŠããããã«èŠãããããããŸããããV8ã¯ããããèŸæžã®åœ¢åŒã§è¡šçŸããããšãé¿ããããšããŸãã
objectsãªããžã§ã¯ãã®å
éšããããã£ãšéåžžã®ããããã£ã®æ¯èŒ
V8ã¯ããªããžã§ã¯ãèªäœã«çŽæ¥ä¿åããããªããžã§ã¯ãã®ããããå
éšããããã£ããµããŒãããŸãã ãããã¯ã远å ã®ã¢ã¯ã·ã§ã³ãå®è¡ããã«ã¢ã¯ã»ã¹ã§ãããããV8ã§äœ¿çšãããæéã®ããããã£ã§ãã ãªããžã§ã¯ãã®å
éšããããã£ã®æ°ã¯ããªããžã§ã¯ãã®åæãµã€ãºã«ãã£ãŠæ±ºãŸããŸãã ãªããžã§ã¯ãã®ã¹ããŒã¹ãèš±å¯ãããããå€ãã®ããããã£ã远å ãããå Žåãããããã£ã¹ãã¢ã«é
眮ãããŸãã ããããã£ã¹ãã¢ã¯ãæœè±¡åã®ã¬ã€ã€ãŒã远å ããŸããããªããžã§ã¯ãã«é¢ä¿ãªããµã€ãºãå¢ããããšãã§ããŸãã
æéã§äœæ¥ããããããã£ã®æ°ã¯ããªããžã§ã¯ãã®åæãµã€ãºã«ãã£ãŠäºåã«æ±ºå®ãããŸãã ããããã£å€ãããªãè¿
éã«åŠçãããåçŽãªããããã£é
åã«ä¿ââåãããŸãfasté«éããããã£ãšäœéããããã£ã®æ¯èŒ
æ¬¡ã«æ³šæãã¹ãéèŠãªããšã¯ããé«éãããããã£ãšãäœéãããããã£ã®éãã§ãã éåžžãç·åœ¢ããããã£ã¹ãã¢ã«æ ŒçŽããããé«éãããããã£ãåŒã³åºããŸãã ãã®ãããªããããã£ã¯ããªããžããªå
ã®ã€ã³ããã¯ã¹ã«ãã£ãŠã¢ã¯ã»ã¹ãããŸãã ããããã£ã®ååãããªããžããªå
ã®äœçœ®ã«ç§»åããã«ã¯ãäžèšã®ããã«ãèšè¿°åã®é
åãåç
§ããå¿
èŠããããŸãã
ããããã£ã®ãã£ã¯ã·ã§ããªã¯èªå·±å®çµåã§ããããããæäœããå Žåãèšè¿°åé
åããã®è¿œå ã®ã¡ã¿æ
å ±ã¯å¿
èŠãããŸãããã ãããªããžã§ã¯ãã®ããããã£ã远å ããã³åé€ããæäœã倿°ããå Žåãèšè¿°åã®é
åãšé衚瀺ã¯ã©ã¹ããµããŒãããã«ã¯ã远å ã®æéãšã¡ã¢ãªãå¿
èŠã«ãªãå ŽåããããŸãã ãããã£ãŠãV8ã¯ããã«ãããããã¹ããŒããããã£ããµããŒãããŸãã é
ãããããã£ãæã€ãªããžã§ã¯ãã¯ãèªå·±å®çµåã®èŸæžãããããã£ã¹ãã¢ãšããŠäœ¿çšããŸãã ãã¹ãŠã®ããããã£ã¡ã¿æ
å ±ã¯ãé衚瀺ã¯ã©ã¹ã®èšè¿°åã®é
åã«ä¿åãããã®ã§ã¯ãªããããããã£ãã£ã¯ã·ã§ããªã«çŽæ¥é
眮ãããŸãã ãã®çµæãé衚瀺ã®ã¯ã©ã¹ãæŽæ°ããã«ããããã£ã远å ããã³åé€ã§ããŸãã ãã«ãã€ã³ãã£ãã·ã¥ã¯ããã£ã¯ã·ã§ããªã«æ ŒçŽãããŠããããããã£ã§ã¯æ©èœããªããããéåžžããã®ãããªããããã£ã§ã®äœæ¥ã¯ãé«éãããããã£ã§ã®äœæ¥ãããé
ããªããŸãã
âçµè«
- ååä»ãããããã£ã«ã¯ããªããžã§ã¯ãã®å
éšããããã£ãé«éããããã£ãäœéïŒèŸæžïŒããããã£ã®3çš®é¡ããããŸãã
- ãªããžã§ã¯ãã®å
éšããããã£ã¯ãªããžã§ã¯ãã«çŽæ¥ä¿åãããããããæäœããã®ãæãé«éã§ãã
- ã¯ã€ãã¯ããããã£ã¯ããããã£ã¹ãã¢ã«é
眮ããããã®ã¡ã¿æ
å ±ã¯é衚瀺ã¯ã©ã¹ã®èšè¿°åã®é
åã«ä¿åãããŸãã
- é
ãããããã£ã¯èªå·±å®çµåã®ããããã£ãã£ã¯ã·ã§ããªã«æ ŒçŽãããŸããããã®ã¡ã¿æ
å ±ã¯ä»ã®é衚瀺ã®ã¯ã©ã¹æ§é ã«ã¯æ ŒçŽãããªããªããŸããã
- é
ãããããã£ã䜿çšãããšãããããã£ã广çã«è¿œå ããã³åé€ã§ããŸãããä»ã®ã¿ã€ãã®ããããã£ã»ã©éãã¢ã¯ã»ã¹ãããŸããã
èŠçŽ ãŸãã¯ã€ã³ããã¯ã¹ä»ãããããã£
ãããŸã§ãååä»ãããããã£ã«ã€ããŠèª¬æããŸããããä»åºŠã¯æŽæ°ã§ã€ã³ããã¯ã¹ä»ããããããããã£ãåŠçãããšãã§ããæŽæ°ã¯éåžžãé
åãæäœãããšãã«äœ¿çšãããŸãã ãã®ãããªããããã£ã®ãµããŒãã¯ãååä»ãããããã£ã®ãµããŒããšåããããè€éã§ãã ã€ã³ããã¯ã¹ä»ãããããã£ã¯åžžã«èŠçŽ ã®åå¥ã®ãªããžããªã«é
眮ãããŸããã
20çš®é¡ã®èŠçŽ ããããšããäºå®ãè€éã«ããŸãïŒ
âèŠçŽ ã®ãœãªããé
åããã³ã¹ããŒã¹é
å
é
åèŠçŽ ã®æäœæ¹æ³ã®æåã®å€§ããªéãã¯ããœãªããé
åãŸãã¯ã¹ããŒã¹é
åã®ã©ã¡ããã¹ãã¬ãŒãžãšããŠäœ¿çšãããã§ãã 玢åŒä»ããããã¢ã€ãã ãåé€ããããšãããŸãã¯å®çŸ©ãããŠããªãã¢ã€ãã ãããå Žåãªã©ããªããžããªã«ç©ºã®ã¹ããŒã¹ãŸãã¯ã穎ãã衚瀺ãããŸãã ã穎ãã®ããé
åã®ç°¡åãªäŸã¯
[1,,3]
,,
[1,,3]
ã§ãã ãã®å Žåãé
åã«ã¯2çªç®ã®èŠçŽ ã¯ãããŸããã æ¬¡ã®äŸã¯ããã®åé¡ã瀺ããŠããŸãã
const o = ["a", "b", "c"]; console.log(o[1]); // "b". delete o[1]; // «». console.log(o[1]); // "undefined"; 1 . o.__proto__ = {1: "B"}; // 1 . console.log(o[0]); // "a". console.log(o[1]); // "B". console.log(o[2]); // "c". console.log(o[3]); // undefined
ã¹ããŒã¹é
åã䜿çšããŠã¢ã€ãã ãä¿åããéã®åé¡ãããäžèšã§èª¬æãããšãã¢ã¯ã»ã¹ããŠãããªããžã§ã¯ãã«ããããã£ãå«ãŸããŠããªãå Žåããããã¿ã€ããã§ãŒã³ãééããå¿
èŠãããããšãããããŸãã é
åã®èŠçŽ ãèªçµŠèªè¶³ã§ãããã€ãŸããæ¢åã®ã€ã³ããã¯ã¹ä»ãããããã£ã«é¢ããæ
å ±ãé衚瀺ã¯ã©ã¹ã«ä¿åããªãå Žåãååšããªãå€ãããŒã¯ãã
the_hole
ãšåŒã°ããç¹å¥ãªå€ãå¿
èŠã§ãã ããã¯ã
Array
ãªããžã§ã¯ã颿°ã®ããã©ãŒãã³ã¹ã«éåžžã«æªã圱é¿ãäžããŸãã ãªããžããªã«ã穎ãããªãããšãã€ãŸãèŠçŽ ãªããžããªã«é
åã®æ¬ æå€ã«é¢ããæ
å ±ãå«ãŸããŠããªãããšãããã£ãŠããå Žåããããã¿ã€ããã§ãŒã³ã§ã®äœéæ€çŽ¢ãå¿
èŠãšããã«ããŒã«ã«æäœãå®è¡ã§ããŸãã
âã¯ã€ãã¯ããã³ããã£ãã©ãªãŒèŠçŽ
é
åã®èŠçŽ ãåé¢ã§ããæ¬¡ã®å
åã¯ãå
éšè¡šçŸã«å¿ããŠãèŠçŽ ãæäœããé床ã§ãã ãé
ããã¢ã€ãã ã¯èŸæžã«ä¿åãããŸãã ãé«éãèŠçŽ ã®æäœã¯ãä»®æ³ãã·ã³ã®éåžžã®å
éšã¢ã¬ã€ã䜿çšããŠå®è¡ãããŸãã ããã§ãã¢ã€ãã ã€ã³ããã¯ã¹ã¯ã¢ã€ãã ã¹ãã¢ã®ã€ã³ããã¯ã¹ã«ããããããŸãã ãã ãããã®ãããªåçŽãªé
åã®è¡šçŸã¯ãæ¯èŒçå°æ°ã®ã»ã«ããå æãããŠããªãéåžžã«å€§ããªã¹ããŒã¹é
åã«ã¯äžçµæžãããŸãã ãã®ãããªå ŽåãèŸæžããŒã¹ã®é
å衚çŸã䜿çšããŸãã ããã«ãããã¢ã€ãã ãžã®ã¢ã¯ã»ã¹ãé
ããªããŸãããã¡ã¢ãªãç¯çŽãããŸãã
const sparseArray = []; sparseArray[9999] = "foo";
ãã®äŸã§ã¯ã10,000ãšã³ããªã®é
åã«ã¡ã¢ãªãå²ãåœãŠããšãã¡ã¢ãªäœ¿çšéã®é¢ã§ããªãç¡é§ã«ãªããŸãã 代ããã«ãV8ã¯é
å
--
ã®ããªãã¬ãããæ ŒçŽãããé
åãäœæããŸãã ãã®å Žåã®ããŒã¯
9999
ã§ãå€ã¯
foo
ããã³æšæºèšè¿°åã§ãã ããã«ãé ãã¯ã©ã¹ã«èšè¿°åã®è©³çŽ°ãæ ŒçŽããæ¹æ³ããªããããV8ã¯ç¬èªã®èšè¿°åã§ã€ã³ããã¯ã¹ä»ãããããã£ãèšå®ãããã³ã«ãèŠçŽ ãæ ŒçŽããäœéãªæ¹æ³ã䜿çšããããšã«æ³šæããå¿
èŠããããŸãã
const array = []; Object.defineProperty(array, 0, {value: "fixed", configurable: false}); console.log(array[0]); // "fixed". array[0] = "other value"; // 0. console.log(array[0]); // "fixed".
ãã®äŸã§ã¯ãæ§æäžå¯èœãªèŠçŽ ãé
åã«è¿œå ããŸããã ãã®æ
å ±ã¯ãèšè¿°åã«é¢é£ããé
ãèªåœèŠçŽ ã®ããªãã¬ããã®ãã®éšåã«æ ŒçŽãããŸãã
Array
ãªããžã§ã¯ãã®æ©èœã¯ãèŠçŽ ãèŸæžã«ä¿åãããŠããé
åã§ã¯éåžžã«é
ããªãããšã«æ³šæããããšãéèŠã§ãã
âSmiããã³Double Elements
V8ã§ã¯ãé«éèŠçŽ ã¯ããã«å¥ã®æ©èœã«ãã£ãŠåºåãããŠããŸãã ããšãã°ã
Array
åã®ãªããžã§ã¯ãã«æŽæ°ã®ã¿ãä¿åãããããé »ç¹ã«çºçããå ŽåãæŽæ°ã¯ãããã尿޿°ïŒå°æŽæ°ãsmiïŒã«çŽæ¥ãšã³ã³ãŒãããããããã¬ããŒãžã³ã¬ã¯ã¿ãŒã¯é
åãè§£æããå¿
èŠããããŸããã å¥ã®ç¹æ®ãªã±ãŒã¹ã¯ãåç²ŸåºŠã®æ°å€ã®ã¿ãå«ãé
åã§ãã å°ããªæŽæ°ãšã¯ç°ãªããæµ®åå°æ°ç¹æ°ã¯éåžžãæ°ã¯ãŒããå ããæŽæ°ãªããžã§ã¯ããšããŠè¡šãããŸãã ãã ããV8ã¯éåžžã®å粟床æ°ã
Double
åã®é
åã®åœ¢åŒã§ä¿åããäžå¿
èŠãªã¡ã¢ãªè² è·ãåé¿ããäžå¿
èŠãªèšç®ã§ã³ã³ãã¥ãŒã¿ãŒãå æããªãããã«ããŸãã æ¬¡ã®äŸã¯ãSmièŠçŽ ãšDoubleèŠçŽ ãæã€é
åã®4ã€ã®ãªãã·ã§ã³ã瀺ããŠããŸãã
const a1 = [1, 2, 3]; // Smi, const a2 = [1, , 3]; // Smi, , a2[1] const b1 = [1.1, 2, 3]; // Double, const b2 = [1.1, , 3]; // Double, , b2[1]
otherä»ã®çš®é¡ã®èŠçŽ
äžèšã§èª¬æããããšã«ããã20çš®é¡ã®ãã¡7çš®é¡ã®é
åèŠçŽ ãèšè¿°ããããšãã§ããŸããã 話ãè€éã«ããªãããã«ãåä»ãé
åã®9çš®é¡ã®èŠçŽ ãšãæååã©ãããŒã®2çš®é¡ã®èŠçŽ ã«ã€ããŠã¯èª¬æããŸããã§ããã ãŸããåŒæ°ãªããžã§ã¯ãã®2çš®é¡ã®ç¹å¥ãªèŠçŽ ã«ã€ããŠã¯èª¬æããŸããã§ããã ãããã¯æåŸã«èšåããŸããããä»ã®ã¿ã€ãã®èŠçŽ ãšåããããéèŠã§ãã
âElementAccessor
èŠçŽ ã®åã®æ°ã«å¿ããŠã
Array
ãªããžã§ã¯ãã®ãã¹ãŠã®é¢æ°ãC ++ã§20åæžãæããããšãããŸãæãã§ããªãããšã¯ååã«çè§£ã§ãããšæããŸãã ããã§ãC ++ã®ç¹å¥ãªæ©èœã®äžéšã衚瀺ãããŸãã
Array
ãªããžã§ã¯ãã«å€ãã®é¢æ°ãäœæãã代ããã«ãäž»ã«ã¹ãã¢ããèŠçŽ ã«ã¢ã¯ã»ã¹ããåçŽãªé¢æ°ã®ã¿ãå®è£
ããå¿
èŠããã
ElementAccessor
ãäœæããŸããã
ElementAccessor
ã¯ã
CRTPææ³ã䜿çšããŠã
Array
ãªããžã§ã¯ãã®é¢æ°ã®ç¹æ®ããŒãžã§ã³ãäœæããŸãã ãããã£ãŠãé
åã®
slice
ã¡ãœããã®ãããªãã®ãåŒã³åºããšãC ++ã§èšè¿°ãããçµã¿èŸŒã¿ã¡ã«ããºã ãV8ã§ã¢ã¯ãã£ãã«ãªãã
ElementAccessor
ãä»ããŠé¢æ°ã®ç¹æ®ããŒãžã§ã³ãžã®ç§»è¡ãå®è¡ãããŸãã
ç¹å®ã®èŠçŽ ãã¥ãŒçšã«æé©åãããèŠçŽ ããŒã¹ã®ã³ãŒã«è»¢éãšã«ã¹ã¿ã å®è£
âçµè«
- é«éã§ãé
åããŒã¹ã§ãäœéã§ãèŸæžããŒã¹ã®ã€ã³ããã¯ã¹ä»ãããããã£ããããŸãã
- ã¯ã€ãã¯ããããã£ã¯ããœãªããé
åããŸãã¯èŠçŽ ãåé€ããå Žåã¯ã¹ããŒã¹é
åã§è¡šãããšãã§ããŸãã
- èŠçŽ ã¯ã³ã³ãã³ãã«ç¹åãããŠããã
Array
ãªããžã§ã¯ãã®æ©èœãé«éåããã¬ããŒãžã³ã¬ã¯ã¿ãŒãäœæããã·ã¹ãã ã®è² è·ã軜æžããŸãã
ãŸãšã
V8ã§ããããã£ãã©ã®ããã«æ©èœããããçè§£ããããšã¯ãå€ãã®æé©åã®éµã§ãã JSéçºè
ã¯ãããã§èª¬æããã¡ã«ããºã ãšçŽæ¥å¯Ÿè©±ããŸããã ãã ããV8ã§ããããã£ãæäœããæ¹æ³ãç¥ã£ãŠãããšãäžéšã®éçºãã³ãã¬ãŒããä»ã®ãã³ãã¬ãŒããããé«éãªã³ãŒããæäŸããçç±ãçè§£ããã®ã«åœ¹ç«ã¡ãŸãã ããšãã°ãéåžžããªããžã§ã¯ããŸãã¯é
åã®èŠçŽ ã®ããããã£ã¿ã€ãã倿ŽãããšãV8ãæ°ããé衚瀺ã¯ã©ã¹ãäœæãããããã¿ã€ãã®ãè©°ãŸãããåŒãèµ·ãããV8ãæé©åãããã³ãŒããçæã§ããªããªããŸãã
芪æãªãèªè
ïŒ JS-codeã®ããã©ãŒãã³ã¹ãçè§£ã§ããªãã»ã©äœäžããŸãããããã®è³æã䜿çšããŠèª¬æããã³ä¿®æ£ã§ããŸããïŒ