
ãã®èšäºã§ã¯ãããªãçãããããžã§ã¯ãã«çŠç¹ãåœãŠãŸãã ããã¹ã¯ãªããèšèªã®ç¬èªã®ã€ã³ã¿ããªã¿ãšãããå®è¡ãããã·ã³ãæžããããšããé¡æã«ç§ã蚪ããããšããããŸãã å éšã§ã©ã®ããã«æ©èœãããã確èªããã ãã§ãã ãã®ç®æšã¯ãã»ã©æ°é«ããããŸãããç§ã¯é·ãç®±ã§ã¢ã€ãã¢ãå éãããŸããã ãã£ãšäŸ¿å©ãªèšèé£ãã欲ããã£ãã
ãã€ãŠãç§ã®å人ãWSHã§èªååã¹ã¯ãªãããæžãå¿ èŠããããšäžæºãèšã£ãŠããŸãããã圌ã¯VBScriptãšJavascriptã®ã©ã¡ããç¥ããŸããã§ããã ãããããé«è²Žãªãå®åŒåã¯ããèªèº«ã§çããâŠããªãã¯å人ãå©ããå¿ èŠãããã ãã®çµæãã³ã³ãã€ã©ãšå®è¡ãã·ã³ãäœæãããVBScriptãšJSã«é Œããã«Windows Script Hostã®ã¹ã¯ãªãããå®è¡ã§ããããã«ãªããŸããã ã«ããã®äž-ãããžã§ã¯ããšãã®å éšæ§é ãšããã°ã©ãã³ã°èšèªèªäœã®ç°¡åãªèæ¯ã
ç°¡åãªèæ¯
玳士ãç§ã¯ããªãã«ã²ã©ãç§å¯ãæããŸãã ãã®ãããªçœªãåçœããããšã¯éåžžã«æ¥ããããããšã§ãããããã«ãããããããç§ã¯åçœããŸãã ç§ã¯ã¯ã³ãšã¹ããã¯ã§ãã ã¯ããã¯ããã¯ããç§ã¯é»è²ã®ãã¬ãŒã ã¯ãŒã¯ã䜿çšããŠå€§å°ã®æ±ºå®ãæžããŸãããç§ã®è¯å¿ã¯ç§ãæ©ãŸããŸããïŒïŒïŒã
1Cã«å ããŠãç§ã¯ä»ã®èšèªãç¥ã£ãŠããŸãããç§ã¯è¥ãã®ã§ãäœè£ããããŸãã å察ã«ãåºè«ã§èšåããç§ã®ç¥ãåãã¯ãè»ã®éè·è ã§ãããåªããé»åæè¡è ã§ããã圌ãæ°éç掻ã«å ¥ã£ããšãã«ããã°ã©ããŒãšããŠåèšç·ŽãããŸããã æèœãªæè¡è ã«ãšã£ãŠããã®ãããªåèšç·Žã¯å€§ããããšã§ã¯ãªãã圌ãã¯1Cã®åéã§ããŸããããåªç§ãªå°é家ã¯ãŸã£ããè¯ãã§ãã ãããã幎霢ãšãšãã«ãæ°ãããã¯ãããžãŒãè¿œããããããšã¯ãŸããŸãé£ãããªããæ¥éã«å€åããITã®äžçããã©ããŒããããšã¯ãŸããŸãé£ãããªã£ãŠããŸãã äŒè©±ãè¡ããããšãã圌ã¯æ¬¡ã®ãããªããšãèšããŸããããã¯ããæ°ããã¹ã¯ãªããã1Cã§ããæžããªãã®ã«ã³ã³ãœãŒã«ã§å®è¡ã§ããããã«ãªããšãæ°ããèšèªãç¿åŸããã«ã¯é·ãæéãããããŸã...ãã€ã³ã¿ããªã¿ã¯ãçŽç²ã«ç 究ããå®å šã«é©çšããããªãªãšã³ããŒã·ã§ã³ãåãåããŸãã-WSHã€ã³ãã©ã¹ãã©ã¯ãã£ã§åäœãããã1Cèšèªã®ã¹ã¯ãªããã®å®è¡ã
ããã°ã©ãã³ã°èšèªã«ã€ããŠå°ã
1Cèšèªã«ã€ããŠã¯ãpromtã«ãã£ãŠç¿»èš³ãããVisual Basicã§ãããšåœŒãã¯èšããŸãã æ¬åœã«ããã§ãã 粟ç¥çã«ã¯ãèšèªã¯VBã«éåžžã«è¿ã-ããã¯åŒ±ãåä»ããOOPãªããã©ã ãåŒããã³ã¯ããŒãžã£ãæã£ãŠããŸãã ãé³ç¯ãæ§æã§ã¯ãªããèšèªãæ§æããããŸãã ããã«ããã¹ãŠã®ããŒã¯ãŒãã«ã¯å¯Ÿå¿ããè±èªããããããè±èªã®çšèªã§æžããã1Cã³ãŒããäžèŠããŠVBãšåºå¥ããããšã¯ã»ãšãã©äžå¯èœã§ãã ããã¯ã³ã¡ã³ãèšå·ã§ã-BASICã®ããã«ã¢ãã¹ãããã£ã§ã¯ãªãã2ã€ã®ã¹ã©ãã·ã¥ã§ãã
ãã®èšèªã¯ãããã·ãŒãžã£ãšé¢æ°ãåºå¥ããå€å žçãªãForãã«ãŒããšãWhileãã«ãŒããããã³å埩åã«ãŒããFor Each ... InããåããŠããŸãã ãªããžã§ã¯ãã®ããããã£ãšã¡ãœãããžã®ã¢ã¯ã»ã¹ã¯ããã€ã³ããä»ããŠãå®è¡ãããé åãžã®ã¢ã¯ã»ã¹ã¯è§æ¬åŒ§ã§å²ãŸããŸãã åã¹ããŒãã¡ã³ãã¯ã»ãã³ãã³ã§çµãããŸãã
ãã¹ã¿ãã¯ãã·ã³ããšã¯äœã§ããïŒ
ç§ã®ç¥ãéããã¹ã¿ãã¯ããã·ã³ãæãäžè¬çã§ãã ããšãã°ã.NET CLRããã³JVMä»®æ³ãã·ã³ã¯ã¹ã¿ãã¯ãããŸãã habrã«ã¯ããã®ããžãã¹ã«é¢ããå¥ã®èšäºããããŸãã ããã§ãããªã³ã¯ãä»ããŠèªè ãè¿œããããªãããã«ãããã§åœŒãã®ä»äºã®åçã説æãã䟡å€ããããšæããŸãã ã¹ã¿ãã¯ãã·ã³ã¯ãã¹ã¿ãã¯ãšããŠç·šæãããããŒã¿ã«å¯ŸããŠãã¹ãŠã®æäœãå®è¡ããŸãã åæäœã¯ãå¿ èŠãªæ°ã®ãªãã©ã³ããã¹ã¿ãã¯ãããã§ãããããããã«å¯ŸããŠã¢ã¯ã·ã§ã³ãå®è¡ããçµæãã¹ã¿ãã¯ã«ããã·ã¥ããŸãã ãã®ã¢ãããŒãã«ãããæå°éã®ã³ãã³ãã§è»œéã®ãã€ãã³ãŒããäœæã§ããŸãã ããã«ãéåžžã«é«éã«åäœããŸãã
ãã€ãã³ãŒãã¯ããã·ã³ãå®è¡ããåœä»€ã®ã»ããã§ãã
ååœä»€ã¯ã0ã255ã®ã·ã³ã°ã«ãã€ãã®ãªãã¬ãŒã·ã§ã³ã³ãŒãã§ããã®åŸã«ã¬ãžã¹ã¿ãã¡ã¢ãªã¢ãã¬ã¹ïŒ Wikipedia ïŒãªã©ã®ãã©ã¡ãŒã¿ãŒãç¶ããŸãã
ç§ãã¡ã®ãã·ã³ã§ã¯ãããŒã ã®é·ãã¯åºå®ãããŠãããæäœã³ãŒããšæäœåŒæ°ã®2ã€ã®æ°åã§æ§æãããŠããŸãã åã³ãã³ãã¯ãã¹ã¿ãã¯å ã®ããŒã¿ã«å¯Ÿããäžé£ã®ã¢ã¯ã·ã§ã³ãæå³ããŸãã
ããšãã°ãå ç®æŒç®ã1 + 2ãã®æ¬äŒŒã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
Push 1 Push 2 Add
æåã®2ã€ã®ããŒã ã¯æ¡ä»¶ãã¹ã¿ãã¯ã«é 眮ãã3çªç®ã®ããŒã ã¯è¿œå ãå®è¡ããŠçµæãã¹ã¿ãã¯ã«é 眮ããŸãã ãã®å Žåãå²ãåœãŠæäœãA = 1 + 2ãã¯æ¬¡ã®ããã«ãªããŸãã
Push 1 ; "1" Push 2 ; "2" Add ; "1" "2", . LoadVar A ; ""
Pushã³ãã³ããšLoadVarã³ãã³ãã«ã¯åŒæ°ããããAddã³ãã³ãã«ã¯åŒæ°ãå¿ èŠãªãããšãããããŸãã
ã¹ã¿ãã¯ã³ã³ãã¥ãŒãã£ã³ã°ã®å©ç¹ã¯ãæäœãå®è¡ãããé åºã§å®è¡ãããããšã§ãããæäœã®åªå é äœã«æ³šæãæãå¿ èŠã¯ãããŸããã æžããããã®ãæºããããŸãã æäœãå®è¡ããåã«ããã®ãªãã©ã³ããã¹ã¿ãã¯ã«ããã·ã¥ãããŸãã ãã®åŒã®èšè¿°æ¹æ³ã¯ãã éããŒã©ã³ãèšæ³ ããšåŒã°ããŸã
ã¹ã¿ãã¯ããããã·ã³ãäœæããã¿ã¹ã¯ã¯ããã®ãã·ã³ãç解ããå¿ èŠãªäžé£ã®åœä»€ããçºæãããããšã§ãã
ã³ã³ãã€ã©ããã€ã¹
ã³ã³ãã€ã©ã®ã¿ã¹ã¯ã¯ãæå®ãããèšèªã®ã³ãŒããããããå®è¡ãããã·ã³ã®ãã€ãã³ãŒãã«å€æããããšã§ãã ã¯ã©ã·ãã¯ã³ã³ãã€ã©ã«ã¯3ã€ã®ã³ã³ããŒãã³ãããããŸãã
- åå¥è§£æïŒããŒãµãŒïŒ
- ããŒãµãŒ
- ã³ãŒããžã§ãã¬ãŒã¿ãŒ
åå¥ã¢ãã©ã€ã¶ã¯ãå ¥åæåã®ç¡ç§©åºãªã¹ããªãŒã ãããŒã¯ã³ã«åå²ããŸãã 圌ã¯ããœãŒã¹ããã¹ãããåèªãæ°åãæååå®æ°ãæäœã®å åãæœåºããããããã¢ãããã¯ãšã³ãã£ãã£ã«å€æããŸããããã¯ãä»åŸã®äœæ¥ã«äŸ¿å©ã§ãã
ããŒãµãŒã¯ãåå¥è§£æããã°ã©ã ãä»äžããããŒã¯ã³ã®ã»ãããæå³ã®ãããã®ã§ããããšãããã°ã©ã ããããæå³ã®ãªãæåã®ã»ããã§ã¯ãªãããšã確èªããŸãã
ã¢ãã©ã€ã¶ãŒã¯ã æœè±¡æ§æããªãŒ ïŒASTïŒãæ§ç¯ããã³ãŒããžã§ãã¬ãŒã¿ãŒã®å ¥åã«äŸçµŠããŸãã
ã³ãŒããžã§ãã¬ãŒã¿ãŒã¯ãæ§æããªãŒã®ããŒãããã€ãã¹ããŠãã€ãã³ãŒããäœæããŸãã
åã3ãªã³ã¯ã¹ããŒã ã䜿çšããŠã³ã³ãã€ã©ã®èšè¿°ãéå§ããŸãããããã®ã¿ã¹ã¯ã®äžç°ãšããŠäžå¿ èŠã«ä¿®æ£ããäžå¿ èŠã«æãããŸããã ãã®ãããASTãæŸæ£ãã解æãšã³ãŒãçæãçµã¿åãããŸããã
ã«ãŒãå ã®ã³ã³ãã€ã©ã¯ãããŒãµãŒã«æ¬¡ã®ããŒã¯ã³ãèŠæ±ãããããèŠãŠãã³ãŒããçæããŸãã éäžã§ããã®ã³ã³ããã¹ãã§ããŒã¯ã³ãèš±å¯ãããŠããããšã確èªããŸãã ãã®ã¹ããŒã ã®ASTã¯åé·ã§ãã
ã¹ããŒããã·ã³
ããŒãµãŒãšã³ã³ãã€ã©ãŒãã¹ããŒããã·ã³ãšããŠå®è£ ããæ¹ã䟿å©ã§ãã 次ã®æåãæœåºãããšãããã®æåã解éããããã«åãæ¿ããå¿ èŠãããã¢ãŒãã«ã€ããŠçµè«ãäžãããŸãã ããšãã°ãæåãå ¥åã«è¡šç€ºãããå Žåãåèªèªã¿åãã¢ãŒãã«åãæ¿ããŸããæ°åã衚瀺ãããå Žåãæ°åã¢ãŒãã§èªã¿åããŸãã åç¶æ ã¯ãæå¹ãªå ¥åæåã®ã»ãããå®çŸ©ããŸãã ããŒã¯ã³ãæœåºããåŸããã·ã³ã¯åã®ç¶æ ã«ç§»è¡ããŸãã ã³ãŒãçæãã-åæ§ã«ã å ¥åIFã«è¡šç€ºãããåŸãæ¡ä»¶çæã¢ãŒãã«åãæ¿ããæåŸã«åã®ç¶æ ã«æ»ããŸãã

ä»®æ³ãã·ã³ããã€ã¹
å¯èŠæ§ã³ã³ããã¹ã
ãã¹ãŠã®å€æ°ãšã¡ãœããã¯åžžã«äœããã®ã³ã³ããã¹ãã«å±ããŸãã ã¡ãœããå ã«ã¯ãã°ããŒãã«ã³ã³ããã¹ããã¢ãžã¥ãŒã«ã³ã³ããã¹ããããã³ããŒã«ã«ã³ã³ããã¹ãããããŸãã å®è¡æã«ã¢ã¯ã»ã¹ã§ããå©çšå¯èœãªïŒå¯èŠã®ïŒååã®ã¹ã¿ãã¯ãå€æããŸãã ãã®ã¹ã¿ãã¯ã¯ãã³ã³ãã€ã«ããã³å®è¡æã«ã¢ã¯ãã£ãã«åäœããŠããŸããããã«ãã¢ã€ãã¢ãéçºãã contextsã®ã€ã³ã¹ã¿ã³ã¹ãäœæã§ãããšæ³å®ãããšãã¢ãžã¥ãŒã«æ§ãèªç¶ã«çºçããŸãã ã¡ãœãããå€æ°ã®ã»ãããªã©ãç¹å®ã®ã¢ãžã¥ãŒã«ãããå Žåããã®ã¢ãžã¥ãŒã«ã®ãã¹ãŠã®ã³ãŒããæ©èœããã³ã³ããã¹ãããããŸãã ããã§ãåãã¢ãžã¥ãŒã«ã®2ã€ã®ã€ã³ã¹ã¿ã³ã¹ãäœæããå Žåãå®éã«ã¯åãã¯ã©ã¹ã®2ã€ã®ã€ã³ã¹ã¿ã³ã¹ãäœæããŸãã ãããããç¬èªã®ã³ã³ããã¹ããåç §ããç¬èªã®ç¶æ ãæã¡ãŸãã
1Cã®ããã¥ã¡ã³ãã§ã¯ãããçŽæ¥è¿°ã¹ãŠããŸãããã芳å¯ãããåäœããã1Cã©ã³ã¿ã€ã ã§ã®ã¢ãžã¥ãŒã«ã®å®è¡ã¯ãã®ããã«æ©èœãããšçµè«ä»ããããšãã§ããŸãã ã©ã³ã¿ã€ã ã¯ãªããžã§ã¯ãã®ã€ã³ã¹ã¿ã³ã¹ã§ã¯åäœããŸããããå¿ èŠã«å¿ããŠä»®æ³ãã·ã³ã«ãæ¥ç¶ãããã³ã³ããã¹ãã§ã¯åäœããŸãã
èšæ¶
ãã·ã³ã®æ¡ä»¶ä»ããã¡ã¢ãªãã¯ããã·ã³ã«æ¥ç¶ãããŠããã³ã³ããã¹ãã®ãªã¹ãã§ãã åã³ã³ããã¹ãã«ã¯ãç¬èªã®çªå·ãšç¶æ ïŒå€æ°ã®ç¹å®ã®å€ïŒããããŸãã å€æ°ãèªã¿æžãããã³ãã³ãã«ã¯ãã³ã³ããã¹ãããŒãã«ã«ã»ã«çªå·ã®åœ¢åŒã®åŒæ°ããããŸãã è¡šã®åãšã³ããªã¯ãã¢ã¯ã·ã§ã³ãå®è¡ãããã³ã³ããã¹ãå ã®ã³ã³ããã¹ãçªå·ãšå€æ°çªå·ã説æããŠããŸããçŽ¢åŒ | ã³ã³ããã¹ãçªå· | å¯å€æ° |
---|---|---|
0 | 0 | 0 |
1 | 0 | 1 |
2 | 1 | 3 |
ããšãã°ãã³ãã³ãPushVar 1ãåä¿¡ãããå Žåãã€ã³ããã¯ã¹1ã®ããŒãã«ã§ã¯ãã³ã³ããã¹ã0ããå€æ°çªå·1ãååŸãããšããã¬ã³ãŒããéžæãããŸãã
å€æ°ã¯ãæ¥ç¶ãããåã³ã³ããã¹ãããã·ã³ã«äŒããåçŽãªé åã§ãã ãã·ã³ã¯ãã®é åããããŒã¿ãèªã¿æžãããæ¥ç¶ãããã³ã³ããã¹ãã®ç¶æ ãå€æŽããŸãã ã©ã®ãããªã³ã³ããã¹ããæ¥ç¶ãããŠãããã¯é¢ä¿ãããŸãã-äœããã®ã¯ã©ã¹ãŸãã¯ã°ããŒãã«ã³ã³ããã¹ãã®ã€ã³ã¹ã¿ã³ã¹ã§ãã ãã·ã³ã¯å€æ°ãå€æŽã§ããŸãããããã¯éèŠã§ã¯ãªãå€æ°ã®çš®é¡ã§ãã
åŒã³åºãå±¥æŽ
ã³ãŒãå®è¡ã¯ãããããããã¬ãŒã ãã䜿çšããŠç·šæãããŸããåããã¬ãŒã ãã¯ãããŒã«ã«å€æ°ã®ã»ãããšçŸåšã®åœä»€ãžã®ãã€ã³ã¿ãŒã§ãã ã¡ãœãããåŒã³åºããããšãçŸåšã®ãã¬ãŒã ãã¹ã¿ãã¯ã«ããã·ã¥ãããŸãã ãããã£ãŠãåŒã³åºãæã®ãã·ã³ã®ç¶æ ãä¿åãããŸãã
次ã«ãããŒã«ã«å€æ°ã®ç©ºã®é åãšåŒã³åºãããã¡ãœããã®å é ã«çããåœä»€çªå·ã§æ°ãããã¬ãŒã ã圢æãããŸãã ãã®æ°ãããã¬ãŒã ã¯çŸåšã®ãã®ã«ãªããããããã³ãã³ãå®è¡ã®ãµã€ã¯ã«ãç¶ããŸãã
Returnã³ãã³ãã«å°éãããšãçŸåšã®ãã¬ãŒã ã¯ïŒç¯å²å€ã«ãªã£ãããŒã«ã«å€æ°ã®å€ãšãšãã«ïŒç Žæ£ããã以åã®ç¶æ ã§ä¿åããããã¬ãŒã ãã³ãŒã«ã¹ã¿ãã¯ããååŸãããã³ãã³ãå®è¡ãµã€ã¯ã«ãã³ãŒã«ãã€ã³ãããç¶è¡ãããŸãã
ã¡ãœããåŒã³åºãã䌎ãæ¬äŒŒã³ãŒãã®ãã©ã°ã¡ã³ãã
0: Push 1 1: Push 2 2: Add 3: Return 4: Nop 5: Nop 6: Call 0 7: LoadVar
çŸåšã®åœä»€ã6çªã§ãããšããŸããããã¯ã¢ãã¬ã¹0ãžã®åŒã³åºãã§ãããââãŒã«ã«å€æ°ãšçŸåšã®åœä»€çªå·ã¯åŒã³åºãã¹ã¿ãã¯ã«æ ŒçŽãããŸãã 次ã«ãå¶åŸ¡ã¯ã¢ãã¬ã¹0ã«è»¢éããã次ã«ã¢ãã¬ã¹6ã«æ»ãã次ã®åœä»€ã«ããã«ç§»è¡ããŸãã
ããŒã ã®å®è£
ã³ãã³ãã®å®è£ ã¯ãã¹ãŠMachineInstanceã¯ã©ã¹ã®ã¡ãœããã§ããããããã®ã¡ãœãããžã®ãã€ã³ã¿ãŒã¯ãªãã¬ãŒã·ã§ã³ã³ãŒãã®é åã«é 眮ãããŸãã 次ã®ã³ãã³ããé åããã®çªå·ã§ååŸãããšããå®è£ ãžã®ãã€ã³ã¿ãŒãæœåºããããã®å®è£ ãå®è¡ãããŸãã éäžã§ãäŸå€åŠçãå®è¡ãããŸãã
ã³ãã³ãå®è¡ã®ã¡ã€ã³ãµã€ã¯ã«
private void ExecuteCode() { while (true) { try { MainCommandLoop(); break; } catch (RuntimeException exc) { if (_exceptionsStack.Count == 0) throw; var handler = _exceptionsStack.Pop(); SetFrame(handler.handlerFrame); _currentFrame.InstructionPointer = handler.handlerAddress; _lastException = exc; } } } private void MainCommandLoop() { try { while (_currentFrame.InstructionPointer >= 0 && _currentFrame.InstructionPointer < _module.Code.Length) { var command = _module.Code[_currentFrame.InstructionPointer]; _commands[(int)command.Code](command.Argument); } } catch (RuntimeException) { throw; } catch (Exception exc) { throw new ExternalSystemException(exc); } }
å®è¡å¯èœãŠãããããã€ã¹
ãã®ãã·ã³ã¯ã1ã€ã®æ°å€åŒæ°ãæã€ã³ãã³ãã䜿çšããŸãã åã³ãã³ãã¯ãæäœã³ãŒããšåŒæ°ã«ãã£ãŠæ±ºå®ããããã®è§£éã¯ã³ãã³ãèªäœã«äŸåããŸãã ã³ãã³ãã®ã·ã¹ãã å šäœãšå®è¡å¯èœã¢ãžã¥ãŒã«ã®æ§é ã¯ããã®ååã«åºã¥ããŠããŸãã
æåã«ã1Cã®ãœãŒã¹ã¢ãžã¥ãŒã«ã®æ§æãæ€èšããŸãã
3ã€ã®ç°ãªãã»ã¯ã·ã§ã³ããããŸãã

- å€æ°ã»ã¯ã·ã§ã³ã§ã¯ããã¹ãŠã®ã¢ãžã¥ãŒã«ã¬ãã«å€æ°ã宣èšãããŠããŸãã ã¢ãžã¥ãŒã«å ã®ã©ãã«ã§ãèŠãããã®ã
- ã¢ãžã¥ãŒã«ã¡ãœããã¯ãå®éã«ã¯ã³ãŒããæã€ããã·ãŒãžã£ãšé¢æ°ã§ã
- ã¢ãžã¥ãŒã«ã®æ¬äœã¯ãã¢ãžã¥ãŒã«ã®ããŒãæã«å®è¡ãããã³ãŒãã§ãã åŠåã¯åœŒããå§ãŸããŸãã
ã¢ãžã¥ãŒã«ã®æ¬äœã¯æ¬è³ªçã«ååã®ãªãã¡ãœããã§ãããããå€æ°ã®å®£èšãšå®è¡å¯èœã³ãŒããšãã2çš®é¡ã®ç°çš®æ§é ããååšããªããšèšããŸãã
å®æ°
æããã«ããã¹ãŠã®æäœã¯ããã€ãã®å€ã§å®è¡ãããŸãã 次ã«ãå€ã¯å€æ°ãšå®æ°ã§è¡šãããŸãã å®æ°ã«ã¯ãæ°åãæååãæ¥ä»ãããŒã¯ãŒã
ã
ããã³
ãªãã©ã«ãå«ãŸããŸãã
2ãš2ãã³ã³ãã¥ãŒã¿ãŒã«è¿œå ããã«ã¯ãã2ããšã¯äœããã©ãã§å ¥æã§ãããã説æããå¿ èŠããããŸãã ãã®ç®çã®ããã«ãã³ãŒãã§äœ¿çšããããã¹ãŠã®å®æ°ã®èª¬æã¯ãã³ã³ãã€ã«ãããã¢ãžã¥ãŒã«ã«å«ãŸããŠããŸãã ã³ãŒãã«ã
= ""
ããšè¡šç€ºãããŠããå Žåããã®åèªãHelloãã¯å®æ°ã®ãªã¹ãã«å«ãŸããŠããã¯ãã§ãã
å€æ°
å€æ°åã¯ãã¹ã³ãŒããèš±å¯ããããã«ã³ã³ãã€ã«æã«ã®ã¿éèŠã§ãã å®è¡æã«ã¯ãå€æ°åã¯å¿ èŠãããŸããã å€æ°ã®é åã«ã¡ã¢ãªãå²ãåœãŠãã«ã¯ããããã®æ°ã®ã¿ãç¥ãã ãã§ååã§ãã ãã·ã³ãå®è¡ããããšãå€æ°ã®é åãäœæãããçªå·ã§ã¢ã¯ã»ã¹ãããŸãã ã³ã³ãã€ã«ãããã¢ãžã¥ãŒã«ã§ã¯ãå€æ°ã®æ°ã®ã¿ã瀺ãããŸãã
ãã ããå€æ°ã䜿çšãããšãå°ãè€éã«ãªããŸãã å®éã«ã¯ãã¢ãžã¥ãŒã«å€æ°ã«å ããŠãã¢ãžã¥ãŒã«å€ã®ã©ããã§å®£èšãããŠããã°ããŒãã«å€æ°ããããŸãã äžèšã®ããã«-ç®ã«èŠããååã®ã¹ã¿ãã¯ããããã³ã³ãã€ã©ã¯ãããååã«äŒããšã宣èšãããååã®ã¹ã¿ãã¯ã§ãããæ¢ããŸãã çè«çã«ã¯ãããã€ãã®ç¬ç«ããã©ã€ãã©ãªãç¬èªã®ããããã£ãšé¢æ°ã§æ¥ç¶ã§ããŸãããããã¯ã¯ã©ã€ã¢ã³ãã¹ã¯ãªããã«è¡šç€ºãããŸãã

ã³ãŒãã§å€æ°ã䜿çšãããŠããå Žåããã·ã³ã¯ãã®å€æ°ãã©ã®ã³ã³ããã¹ãã«å±ããŠããããç¥ãå¿ èŠããããŸãã ããŒã ã«ã¯æ°å€åŒæ°ã1ã€ãããªãããããã®å€æ°ã宣èšãããã³ã³ããã¹ãã1ã€ã®åŒæ°ã䜿çšããŠæ±ºå®ããå¿ èŠããããŸãã ãã®ç®çã®ããã«ã å€æ°ã®ããŒãã«ãã¢ãžã¥ãŒã«ã«å°å ¥ãããŸããã ããŒãã«ã®åãšã³ããªã«ã¯ãã³ã³ããã¹ãå ã®ã³ã³ããã¹ãçªå·ãšå€æ°çªå·ãå«ãŸããŸãã ã³ãã³ãåŒæ°ã¯ãå€æ°ããŒãã«å ã®ã¬ã³ãŒãçªå·ãšããŠæ±ãããŸãïŒãã¡ã¢ãªãã»ã¯ã·ã§ã³ãåç §ïŒã
ã¹ã¿ãã¯å€æ°æäœ
private void PushVar(int arg) { var vm = _module.VariableRefs[arg]; var scope = _scopes[vm.ContextIndex]; _operationStack.Push(scope.Variables[vm.CodeIndex]); NextInstruction(); } private void LoadVar(int arg) { var vm = _module.VariableRefs[arg]; var scope = _scopes[vm.ContextIndex]; scope.Variables[vm.CodeIndex].Value = BreakVariableLink(_operationStack.Pop()); NextInstruction(); }
æ¹æ³
ã¡ãœããã¯ããã·ãŒãžã£ãšãã¡ã³ã¯ã·ã§ã³ã«åããããŸã ã åŸè ã¯å€ãè¿ãå ŽåããããŸãã ããã©ã«ãã§ã¯ããã©ã¡ãŒã¿ãŒã¯åç §ã«ãã£ãŠã¡ãœããã«æž¡ãããŸãã å€ã§æž¡ãã«ã¯ãã¡ãœãããã©ã¡ãŒã¿ãããŒã¯ãŒããZnachãã§ç€ºãå¿ èŠããããŸãïŒBASICã®ByValã«é¡äŒŒïŒã
ã³ã³ãã€ã«ãããã¢ãžã¥ãŒã«ã«ã¯ãã¡ãœããã®ãã©ã¡ãŒã¿ãŒããããã®ãã€ã³ãã£ã³ã°ãæ»ãå€ã®ååšãªã©ã«é¢ããæ å ±ãå«ãŸããŠããŸãã åã¡ãœããã«ã¯ç¬èªã®çªå·ããããŸãã ããã«ãåã¡ãœããã«ã€ããŠããã®ã¡ãœããã®ããŒã«ã«å€æ°ã®æ°ã瀺ãããŸãã
å€æ°ãªã©ã®ã¡ãœããã¯ãã¢ãžã¥ãŒã«ã®å€éšã«ããïŒã€ãŸããã°ããŒãã«ã«å®£èšãããŠããïŒããšãã§ããŸãã ã¡ãœãããžã®ã¢ã¯ã»ã¹ã¯ãå€æ°ã®å Žåãšåãæ¹æ³ã§ç·šæãããŸã-åŒã³åºãããã¡ãœããã眮ãããŠããã³ã³ããã¹ããå®çŸ©ãã察å¿è¡šãéããŠã
ã¢ãžã¥ãŒã«ã®æçµæ§é
äžèšã®ãã¹ãŠãçµã¿åãããŠãã³ã³ãã€ã«æžã¿ã¢ãžã¥ãŒã«ã®æ¬¡ã®æ§é ãååŸããŸãã

ã³ã³ãã€ã«åŸãã¢ãžã¥ãŒã«ã¯æ¬¡ãå«ãæ§é ã«ãªããŸãã
- ã¢ãžã¥ãŒã«ã¬ãã«å€æ°ã®æ°
- å®æ°ã®ãªã¹ã
- ã¡ãœãã眲åãªã¹ã
- ã¢ãžã¥ãŒã«ã®ãã€ãã³ãŒã
- å¯å€ããã
- ã¡ãœããããã
- ã¢ãžã¥ãŒã«ïŒã¢ãžã¥ãŒã«æ¬äœïŒãžã®ãšã³ããªãã€ã³ãã§ããã¡ãœããã®çªå·
å€ãæäœãã
1Cèšèªã«ã¯å³å¯ãªåæå®ã¯ãããŸããã å€æ°ã¯ãå€ãå²ãåœãŠããããšåãååŸããŸãã ä»»æã®å€ã¯ãæ¬è³ªçã«ãŠãããŒãµã«ã¿ã€ãVARIANTã§ãã æäœãå®è¡ãããšãããŠãããŒãµã«å€ã¯ç®çã®ã¿ã€ãã§äžããããŸãã ããšãã°ãç®è¡æŒç®ãæ°å€ã«ãã£ã¹ãããããšããããã³ããŒã«æŒç®-ããŒã«å€ã«ãã£ã¹ãããããšãã
次ã®åºæ¬çãªå€ã¿ã€ããååšããŸãã
- æªå®çŸ©
- ã²ã
- æ°
- æ¥ä»
- ããŒã«å€
- 察象
- çš®é¡
åŸè ã¯ãåãæäœããããã®ããªããã£ãåã§ãïŒ.NETã®
System.Type
ã¢ããã°ïŒ
ãŠãããŒãµã«å€ã¯ã
IValue
ã€ã³ã¿ãŒãã§ã€ã¹ã§è¡šãããŸãã
interface IValue : IComparable<IValue>, IEquatable<IValue> { DataType DataType { get; } TypeDescriptor SystemType { get; } double AsNumber(); DateTime AsDate(); bool AsBoolean(); string AsString(); TypeDescriptor AsType(); IRuntimeContextInstance AsObject(); }
ãã®ã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšãããšãå€ã®å®éã®ã¿ã€ãã確èªããããåºæ¬çãªã¿ã€ãã«ãã£ã¹ããããã§ããŸãã ãã®ãããªåæžã¯ãããšãã°ç®è¡æŒç®ãå®è¡ããããã«å¿ èŠã§ãã ç¹å®ã®ã¿ã€ãã®å€ãå®è£ ããã¯ã©ã¹èªäœã¯ããã®å€ãååºæ¬ã¿ã€ãã«ãã£ã¹ãããããšããŸãã
åŒãè©äŸ¡ããå Žåãæçµçµæã®ã¿ã€ãã¯ãæåã®ãªãã©ã³ãã®ã¿ã€ãã«ãã£ãŠæ±ºãŸããŸãã ãããã£ãŠãåŒ
"12345" + 10
ã¯æååã®çµæãçæããã¯ãã§ãã å ç®ãå®è¡ãããšã2çªç®ã®åŒæ°ãæååã«ãã£ã¹ããããé£çµãå®è¡ãããŸãã
å¯Ÿç §çã«ãæäœ
10 + "12345"
ã¯ãæåå "12345"ãæ°å€ã«ãã£ã¹ãããããšããŸãã ãã®ãã£ã¹ããäžå¯èœãªå ŽåãäŸå€ãNumberåãžã®ãã£ã¹ããšã©ãŒããçºçããŸãã
äžèšã®äŸã§ã¯ãNumberåãå®è£ ããã¯ã©ã¹ã§AsStringïŒïŒã¡ãœãããåŒã³åºãããStringåãå®è£ ããã¯ã©ã¹ã§AsNumberïŒïŒã¡ãœãããåŒã³åºãããŸãã
å ç®æäœ
private void Add(int arg) { var op2 = _operationStack.Pop(); var op1 = _operationStack.Pop(); var type1 = op1.DataType; if (type1 == DataType.String) { var result = op1.AsString() + op2.AsString(); _operationStack.Push(ValueFactory.Create(result)); } else if (type1 == DataType.Date && op2.DataType == DataType.Number) { var date = op1.AsDate(); var result = date.AddSeconds(op2.AsNumber()); _operationStack.Push(ValueFactory.Create(result)); } else { // . var result = op1.AsNumber() + op2.AsNumber(); _operationStack.Push(ValueFactory.Create(result)); } NextInstruction(); }
ãªããžã§ã¯ãã®ããããã£ãšã¡ãœãããžã®ã¢ã¯ã»ã¹
åãªããžã§ã¯ãã«ã¯ãããã€ã³ããä»ããŠãã¢ã¯ã»ã¹ã§ããããããã£ãšã¡ãœãããå«ããããšãã§ããŸãã åŒã³åºãã¯ååã§å®è¡ãããŸãã ååã§ã¢ã¯ã»ã¹ããä»çµã¿ã¯ããªããžã§ã¯ãã«å¿ èŠãªã¡ã³ããŒãããããããã«ã¢ã¯ã»ã¹ã§ãããã©ããã確èªã§ããç¹å¥ãªã€ã³ã¿ãŒãã§ã€ã¹ã§è¡šãããŸãã
interface IRuntimeContextInstance { bool IsIndexed { get; } IValue GetIndexedValue(IValue index); void SetIndexedValue(IValue index, IValue val); int FindProperty(string name); bool IsPropReadable(int propNum); bool IsPropWritable(int propNum); IValue GetPropValue(int propNum); void SetPropValue(int propNum, IValue newVal); int FindMethod(string name); MethodInfo GetMethodInfo(int methodNumber); void CallAsProcedure(int methodNumber, IValue[] arguments); void CallAsFunction(int methodNumber, IValue[] arguments, out IValue retValue); }
ããããã£ãŸãã¯ã¡ãœããã«ã¢ã¯ã»ã¹ãããšãããªããžã§ã¯ãã¯ãã®ããããã£/ã¡ãœããã®çªå·ãæ±ããããŸãã 次ã«ããã®çªå·ã«ãã£ãŠãããããã£ã®å¯èªæ§ãšå¯èªæ§ãã¡ãœãããã©ã¡ãŒã¿ã®æ°ãæ»ãå€ã®ååšãªã©ã«ã€ããŠãªã¯ãšã¹ããè¡ãããŸãã ãã®æ å ±ãèŠã€ããåŸãåŒã³åºããè¡ãããŸãã
ããããã£ã®å Žåãããã¯å€ã®èšå®ãŸãã¯èªã¿åãã§ãã ã¡ãœããã®å Žåãããã·ãŒãžã£ãšããŠã®åŒã³åºããŸãã¯é¢æ°ãšããŠã®åŒã³åºãã åŸè ã®å Žåãè¿ãããå€ã¯ä»®æ³ãã·ã³ã¹ã¿ãã¯ã«ããã·ã¥ãããŸãã
ã³ã³ããã¹ããšããŠãªããžã§ã¯ããæäœããããŸãã¯ãã®é
äžèšã§ã ã³ã³ããã¹ãã®ã€ã³ã¹ã¿ã³ã¹ãšããŠã¢ãžã¥ãŒã«æ§ãšãªããžã§ã¯ãã®äœæã«èšåããŸããã æå³ã®è©³çŽ°ãšãããã€ã³ããä»ããããªããžã§ã¯ããžã®ã¢ããŒã«ãã©ã®ããã«æ§æãããŠãããã詳ããèŠãŠã¿ãŸãããã
é¢æ°ã®ç¹å®ã®ã©ã€ãã©ãªããããšæ³åããŠãã ããã ãã®ã©ã€ãã©ãªããé¢æ°ãåŒã³åºããŠãçµæã楜ããããšãã§ããŸãã ããã§ãã©ã€ãã©ãªããããªãã¯ã¡ãœãããšããããã£ã®ã»ãããæã€ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ã§ãããšæ³åããŠãã ããã ãã®ã€ã³ã¹ã¿ã³ã¹ã¯ãç¥èŠã§ããªãããã«ã¹ã³ãŒãã«ãåã蟌ãŸãããŠãããããã€ã³ã¹ã¿ã³ã¹ã¡ãœãããã°ããŒãã«é¢æ°ã§ãããã®ããã«çŽæ¥åŒã³åºããŸãã
"
MathLibrary
"ã¯ã©ã¹ã®ã€ã³ã¹ã¿ã³ã¹ãã¹ã³ãŒãã¹ã¿ãã¯ã«æ¥ç¶ãããŠããå ŽåãSinãCosãããã³Sqrté¢æ°ãçŽæ¥åŒã³åºãããšãã§ããŸãã ãããã¯ãã©ã€ãã©ãªã¬ãã«ã®ã©ããã§å®£èšãããéåžžã®ã¡ãœãããšããŠè¡šç€ºãããŸãã
= Sin(X); // Sin , , .
次ã«ãéã®æäœãè¡ããŸãããã äœããã®ã¹ã¯ãªãããèšè¿°ããå Žåãããèªäœãã³ã³ããã¹ãã§ãã ã³ãŒããæ©èœããç¯å²ãæäŸããŸãã ãããããã®ã¹ã¯ãªããã®ã€ã³ã¹ã¿ã³ã¹ãäœæããŠå€æ°ã«æžã蟌ããšã©ããªããŸããïŒ ãã®ã¹ã¯ãªããã¯ç¬èªã®ããããã£ãšã¡ãœãããæã€ã¯ã©ã¹ã§ããããªããžã§ã¯ãã®ããã«æäœã§ããããšãããããŸããã å€éšã¹ã¯ãªãããã¡ã€ã«ãæ¥ç¶ïŒã€ã³ããŒãïŒããæ©èœã¯ããã®ååã«åºã¥ããŠæ§ç¯ãããŠããããªããžã§ã¯ãã®å Žåãšåæ§ã«åäœããŸã-ã€ã³ã¹ã¿ã³ã¹ã®äœæãã¡ãœããã®åŒã³åºããªã©ã
åæã«ãã¹ã¯ãªããAãã¹ã¯ãªããBãåŒã³åºããšãBãå¯äžã®ã¹ã¯ãªããã§ãããã®ããã«ã³ãŒãBã®ã³ã³ããã¹ããšå®è¡ãé²è¡ãããããã¹ã¯ãªããBããã·ã³ã®ã¡ã¢ãªã«æ¥ç¶ãããŸãã ã¢ãžã¥ãŒã«Bããæ»ããšãåæãããå®è¡ã¯ã¹ã¯ãªããAã«é²ã¿ãŸãã
ãã€ãã³ãŒãã®äŸ
以äžã¯ããã€ãã³ãŒãå ã®ç¹å®ã®æäœã®å®è¡ãã©ã®ããã«ç·šæããããã®äŸã§ãã
è¿œå ãšå²ãåœãŠ
= 1; = 2; = + ;
.constants 0 :type: Number, val: 1 1 :type: Number, val: 2 .code 0 :(PushConst 0) ; 0 1 :(LoadLoc 0) ; 0 2 :(PushConst 1) ; 1 3 :(LoadLoc 1) ; 1 4 :(PushLoc 0) ; 0 5 :(PushLoc 1) ; 1 6 :(Add 0) ; 7 :(LoadLoc 2) ; 2
åææ¡ä»¶ã«ãŒãïŒå®è¡äžïŒ
= 1; < 5 = + 1; ;
.constants 0 :type: Number, val: 1 1 :type: Number, val: 5 .code 0 :(PushConst 0) 1 :(LoadLoc 0) ; 2 :(PushLoc 0) ; ( ) 3 :(PushConst 1) 4 :(Less 0) ; "" â1 ( 5) 5 :(JmpFalse 11) ; - , ( 11) 6 :(PushLoc 0) ; = + 1 7 :(PushConst 0) 8 :(Add 0) 9 :(LoadLoc 0) 10 :(Jmp 2) ; 11 :(Nop 0) ;
ç¶æ
1 > 2 = 1; = 0; ;
.constants 0 :type: Number, val: 1 1 :type: Number, val: 2 2 :type: Number, val: 0 .code 0 :(PushConst 0) 1 :(PushConst 1) 2 :(Greater 0) ; "" 3 :(JmpFalse 7) ; - "" 4 :(PushConst 0) ; 5 :(LoadLoc 0) 6 :(Jmp 9) ; , 7 :(PushConst 2) ; 8 :(LoadLoc 0) 9 :(Nop 0);
ã¡ãœããåŒã³åºã
("");
.constants 0 :type: String, val: .code 0 :(PushConst 0) ; 1 :(ArgNum 1) ; 2 :(CallProc 1) ; , 1 .procmap 0 :(1,2) 1 :(0,4) ; 1 0 4.
WSHã«ã€ããŠã¯ã©ãã§ãããïŒ
WSHã¹ã¯ãªããã€ã³ãã©ã¹ãã©ã¯ãã£ã¯ãå€æ°ã®COMãªããžã§ã¯ãã«ãã£ãŠè¡šãããŸãã ãããã®ãªããžã§ã¯ãã¯ãIDispatchã䜿çšããŠååã§ã¡ã³ããŒã«ã¢ã¯ã»ã¹ããããšã«ãããã¹ã¯ãªããèšèªããã¢ã¯ã»ã¹ã§ããŸãã äœã«ã䌌ãŠããŸãããïŒ
IDispatchã®å°ããªã©ãããŒãäœæããã ãã§ååã§ããããã«ããããã·ã³ã¯åè¿°ã®IRuntimeContextInstanceã€ã³ã¿ãŒãã§ã€ã¹ãä»ããŠãããã®COMãªããžã§ã¯ããæäœã§ããŸãã
å³ã¯ãã¹ã¯ãªããã®ãããã°ã«äœ¿çšãããã¹ãã¢ããªã±ãŒã·ã§ã³ãŠã£ã³ããŠã瀺ããŠããŸããScripting.FileSystemObjectãªããžã§ã¯ãã䜿çšããŠãã©ã€ãã©ãã«ãäžèŠ§è¡šç€ºããã¹ã¯ãªãããå®è¡ããŸã

ãã¡ãããçŸæç¹ã§ã¯ããã¹ãŠã®WSHæ©èœãå®å šã«å®è£ ãããŠããããã§ã¯ãªãããã®ãšã³ãžã³ãå®å šã«çœ®ãæããããšã¯ã§ããŸãããããšãã°ããªã¢ãŒããã·ã³ã§WSHãªããžã§ã¯ããäœæããæ¹æ³ã¯ãããŸãããããã«æ·±ãæãäžãããšãããã«å€ãã®ããšãã§ããŸããããã«ãããããããã»ãšãã©ã®ããŒã«ã«ã¿ã¹ã¯ã§ã¯ããã®ãšã³ãžã³ã¯éåžžã«é©ããŠããããã«æããŸãã
ãœãŒã¹ãšãã®
ãããžã§ã¯ãå šäœã¯ã2ã€ã®ã¢ããªã±ãŒã·ã§ã³ãšãè»ã®ãšã³ãžã³ãåããdllã§æ§æãããŠããŸãã
TestAppã¢ããªã±ãŒã·ã§ã³ã¯ãGUIããŒã¹ã®è£å©ããŒã«ã§ããããšã³ãžã³ãè©Šãããã¹ãã¹ã¯ãªãããèšè¿°ããå®è¡ãå®è¡ã§ããŸãã
oscriptã³ã³ãœãŒã«ã¢ããªã±ãŒã·ã§ã³ã¯ãã¡ã€ã³ã®ã³ãã³ãã©ã€ã³ããŒã«ã§ãã
ãã©ã¡ãŒã¿ãªãã§å®è¡ãããšããµããŒããããŠããã³ãã³ãoscriptã衚瀺ãããŸãã
ãŸããã¹ã¯ãªãããšå®è¡äžã®ã¢ããªã±ãŒã·ã§ã³ã1ã€ã®ã¢ãžã¥ãŒã«ã«çµåããŠãåå¥ã®exeãã¡ã€ã«ãååŸãããšããèãæ¹ããããŸããããããããŸã§ã圌ã®æã¯å±ããŸããã§ããã
ãœãŒã¹ã³ãŒãã¯bitbucketã§å ¥æã§ããŸããããã«ã¯ãå©çšå¯èœãªèšèªããŒã«ã«é¢ããçããŠã£ãããããŸãã
åäœã確èªããããããœãŒã¹ããã³ã³ãã€ã«ããããªã人-setup.exe
çãçµè«
ãããžã§ã¯ãã®ãã¬ãŒã ã¯ãŒã¯å ã§ã1Cèšèªã®ã¹ã¯ãªããã®ã€ã³ã¿ãŒããªã¿ãŒãéçºãããŸãããããã«ã¯ã1Cã®ã¹ã¯ãªãããšãã©ã³ã¹ã¬ãŒã¿ãŒãå®è¡ããŠä»®æ³ãã·ã³ã®ãã€ãã³ãŒãã«å€æããã¹ã¿ãã¯ä»®æ³ãã·ã³ãå«ãŸããŸãã
ããã©ãŒãã³ã¹ã¯å ã®ãã®ãšã»ãŒåçã§ãããããèã®äžã§äœãããã¢ããã¥ã¢ã®ãããžã§ã¯ãã§ãããšèãããªããçµæã¯è¯ããšèããããšãã§ãããšæããŸããç§ã¯é床ã«ã€ããŠã®çå£ãªç 究ã¯è¡ããŸããã§ãããèå³ã®ããã«ãæ°åŠãšå€æ°ã®é床ãæ¯èŒããããšãã§ããŸãããããã¯ãã§ã«å°ãå¥ã®ãããã¯ã§ãã
ãã®äœåãçããã«ãšã£ãŠèå³æ·±ããã®ã§ãã£ãããšãé¡ã£ãŠããŸãããããžã§ã¯ããåå²ããæ¹å€ããŠãã ãããç§ã¯åãã§ããŸããããã°ã£ãŠã
PS 1Cã«é¢ããèšäºãžã®ã³ã¡ã³ãã«ã¯ãããã·ã¢èªã§æŒç®åãæžãã«ã¯ã©ãããã°ããã§ããïŒããšããã¡ãã»ãŒãžããããŸãã