ChucKã®è»½éã¹ã¬ãã
Chuckã®論文ãæãèªã¿ããããã¼ã ãã¼ã¸ãããã«ãããããã«ChucKã¯ãªã¢ã«ã¿ã¤ã é³å£°åæ/ä½æ²/ããã©ã¼ãã³ã¹ãç®çã¨ããã·ã¹ãã ã§ãå¼·åã«æ£ç¢ºãªæé(strongly-timed)ãªãã¨ãã¦ãªã«ãã¦ãããè«æã§ã¯ãã®æé管çã®é¨åã¨è»½éã¹ã¬ããã®é¢ä¿ã«ã¤ãã¦ã触ãããã¦ããã
ChucKã§é³ãåºãã«ã¯ãD/A Converter(dac)ã¸ä½ããã®ãªã·ã¬ã¼ã¿ã¼ãæ¥ç¶ããå¿
è¦ãªããªã·ã¬ã¼ã¿ã¼ã®è¨å®ãããå¾ãé³ããªããããæéãæå®ãããæå¾ã®é³ããªããæéæå®ã®åã¾ã§ãChucKã§ã®è»½éã¹ã¬ããã®å®è¡åä½(Shredã¨å¼ã°ãã¦ãã)ã¨ãªããé³´ããé³ã®æéæå®ããæç¹ã§é³å£°ã¨ã³ã¸ã³ã«ãã£ã¦é³å£°å¦çãããShredåãæ¿ãå¦ç(Shredulerã¨å¼ã°ãã)ã§ãã¥ã¼ã«ããShredãå¦çãããã以ä¸ã¯åä¸Shredæã®ããã¼(è«æã ã¨p.77, fig.3.34)
è¤æ°Shredã並åå®è¡ããå ´åã¯sporkã«Shredã¨ãã¦å®è¡ããé¢æ°ã渡ããOSCãMIDIçã®å¤é¨ä¿¡å·ã¤ãã³ãã¸ã®åå¿ã®ããã®ãã³ãã©ç»é²ãsporkã§è¡ãããã®è¾ºãã¯javascriptãªããã§ã¤ãã³ããã³ãã©ç»é²ããã®ã¨åããsporkã¯å å²ãã¹ãã¼ã³(spoon + fork)ã®ãã¨ãªã®ã§forkæèãã¦ãã¯ãã
以ä¸ã¯æéæå®ã®é¨åã ãæãåºããã³ã¼ãä¾ã
100::ms => now
'=>'ã¯ä»£å ¥æ¼ç®åã¿ãããªãã®ã§ãä¸è¨ã¯ã³ã¼ãå®è¡æãã100msçµéããã¾ã§å¾ æ©ãã¨ããæå³ã«ãªããã½ã¼ã¹ã¯è¦ã¦ãªããã©ä¸è¨ã®ãããªnowã¸ã®ä»£å ¥ãå®è¡ãããæç¹ã§shredulerã«å¶å¾¡ãè¿ãã¦ä»ã®shredå¦çããã¦ããã¨ãããããªè¨è¿°ãè«æä¸ã«ãã£ããnowã¸ã®durationä»£å ¥ã§ãªãme.yield();ããã¨æéãã¾ããã«ãã®å ´ã§shredulerã«å¦çãè¿ããããã®æ¸ãæ¹ã ã¨è»½éã¹ã¬ããããµãã¼ãããä¸è¬çãªããã°ã©ãã³ã°è¨èªã®å®è¡åä½åãæ¿ãã«ä¼¼ã¦ããã
ChucKã§è»½éã¹ã¬ãããæ¡ç¨ãã主ãªã¡ãªããã¯ãOSã®ã¹ã¬ããæ©æ§ã§ãªãã¦ã¼ã¶ç©ºéã®å調ã¹ã¬ããã使ããã¨ã§ã³ã¼ããæ¸ã人ã®æå³ããã¿ã¤ãã³ã°ã§Shredãå¶å¾¡ã§ãããã¨ãã¨æ¸ãã¦ãã£ã¦ããã«ã¤ãã¦ã¯æé軸ãæã¤ã¡ãã£ã¢ãæ±ããã®ãããã¨æããããã¨ã¯æ®éã®threadã ã¨dead lockæ°ã«ããã®å«ã¨ãã¹ã±ã¸ã¥ã¼ã©ãã¦ã¼ã¶ç©ºéã§åãã¦ãããã«ã¼ãã«ã«æãå ¥ããã«æé©åã§ããã¨ãæ¸ãã¦ãã£ã¦ãããã¯æ®éã®ããã°ã©ãã³ã°ã¨å¤ãããªãã
è«æä¸ã§ã¯ä»ã«ãã³ã³ãã¥ã¼ã¿ã使ã£ãä½æ²ã·ã¹ãã ã®æ´å²ã¨ããªã¢ã«ã¿ã¤ã ã«ã³ã¼ãå¤æ´åæ ããããã®VMå¨ãã®è©±ã¨ãããã©ã¼ãã³ã¹ã¨é¢ä¿ããon the fly programmingã®è©±ã¨ããã£ã¦é¢ç½ãããªæãã§ããã