
åã®2ã€ã®éšåã®ç¿»èš³ïŒ
å線第äºéšããã¯Jesse Storimerã«ããèšäºã§ã ã 圌ã¯ãUnix fuã¯ãŒã¯ã·ã§ãã ãçŽ æŽãããRubyããã¯ãåŠã³ããµãŒããŒã¹ã¿ãã¯éçºã¹ãã«ãåäžããããRubyéçºè
åãã®ãªã³ã©ã€ã³æå®€ã§è¬æŒããŠããŸãã åå è
ã®æ°ã¯éãããŠããããã空ããŠããåžããã鿥ãã§ãã ããã 圌ã¯ãŸãã ãUnixããã»ã¹ã®æäœã ã ãTCPãœã±ããã®æäœã ã ãRubyã®ã¹ã¬ããã®æäœããšããæ¬ã®èè
ã§ããããŸããRubyã³ãã¥ããã£ã®ã€ã³ã¿ãŒããªã¿ãŒã®MRIå®è£
ã«ã¯ãGILã«é¢ãã誀解ãããã€ããããŸãã ãã®èšäºã®äž»ãªè³ªåã«å¯ŸããçããèªãŸãã«ç¥ãããå ŽåãGILã¯Rubyã³ãŒããã¹ã¬ããã»ãŒãã«ããŸããã
ããããããªãã¯ç§ã®èšèãåœããåã«åãåãã¹ãã§ã¯ãããŸããã
ãã®äžé£ã®èšäºã¯ãGILãæè¡ã¬ãã«ã§äœã§ããããçè§£ãã詊ã¿ããå§ãŸããŸããã
æåã®éšåã§ã¯ãMRIå®è£
ã§äœ¿çšãããCã³ãŒãã§ç«¶åç¶æ
ã®æ¡ä»¶ãçŸããå Žæã«ã€ããŠèª¬æããŸãã ããããå°ãªããšã
Array#<<
ã¡ãœããã«ã€ããŠã¯ãGILããããåé¿ããããã§ãã
2çªç®ã®éšåã§ã¯ãGILãå®éã«MRIã®ã€ã³ã©ã€ã³ã¡ãœããã®ã¢ãããã¯ãªå®è£
ãè¡ãããšã確èªããŸãã èšãæããã°ãããã¯ç«¶åç¶æ
ã®çºçãæé€ããŸãã ãã ããããã¯ãMRIèªäœã®çµã¿èŸŒã¿é¢æ°ã«ã®ã¿é©çšãããRubyã³ãŒãã«ã¯é©çšãããŸããã ãããã£ãŠããGILã¯ãRubyã³ãŒããã¹ã¬ããã»ãŒãã§ãããšããä¿èšŒãæäŸããŸããïŒããšããçåãæ®ããŸããã
ç§ã¯ãã§ã«ãã®è³ªåã«çããŸããã ä»ãç§ã¯ããã«ã€ããŠã®èª€è§£ãæ¢ãããã§ãã
ããäžåºŠã¬ãŒã¹ã®ç¶æ
ã«ã€ããŠ
äžéšã®ããŒã¿ãè€æ°ã®ã¹ããªãŒã ã§å
±æãããŠããå Žåãç«¶åç¶æ
ãçºçããå¯èœæ§ãããããããã¯åæã«ãã®ããŒã¿ãåŠçããããšããŸãã ãããåæãªãã§ãããšãã°ãããã¯ãªãã§çºçãããšãããã°ã©ã ãäºæããªãåäœãéå§ããããŒã¿ã倱ãããå¯èœæ§ããããŸãã
äžæ©åŸéããŠãç«¶åç¶æ
ãã©ã®ããã«çºçããããæãåºããŸãããã ãã®èšäºã®ãã®éšåã§ã¯ã次ã®Rubyã³ãŒãäŸã䜿çšããŸãã
class Sheep def initialize @shorn = false end def shorn? @shorn end def shear! puts "shearing..." @shorn = true end end
ãã®ã¯ã©ã¹ã«ã¯æ°ãããã®ã¯ãããŸããã çŸã¯åºçæã«ããªãã³ã°ãããŸããã ãshearïŒãã¡ãœããã¯ãã¢ã«ãããå®è¡ããçŸããã§ã«åã蟌ãã ãã®ãšããŠããŒã¯ããŸãã

sheep = Sheep.new 5.times.map do Thread.new do unless sheep.shorn? sheep.shear! end end end.each(&:join)
ãã®ã³ãŒãã¯ãæ°ããçŸãªããžã§ã¯ããäœæãã5ã€ã®ã¹ã¬ãããçæããŸãã ãããã¯ããããããããžãåæãããŠãããã©ããããã§ãã¯ããåæãããŠããªãå Žåã¯ãshearïŒã¡ãœãããåŒã³åºããŸãã
以äžã¯ãMRI 2.0ã§ãã®ã³ãŒããæ°åå®è¡ããçµæã§ãã
$ ruby check_then_set.rb shearing... $ ruby check_then_set.rb shearing... shearing... $ ruby check_then_set.rb shearing... shearing...
æã
ã1å¹ã®çŸã2ååãããŸãïŒ
GILã«ãããã³ãŒããè€æ°ã®ã¹ã¬ããã§ãæ£åžžã«åäœãããããšãã§ãããšç¢ºä¿¡ããŠããå Žåã¯ãããã§åé¡ãããŸããã GILã¯ãããªãä¿èšŒãããããŸããã ã¹ã¯ãªãããæåã«å®è¡ãããšãã¯æåŸ
ããçµæãåŸãããŸãããæ¬¡åã¯çµæãæåŸ
ãããŠããªãã£ãããšã«æ³šæããŠãã ããã ãã®äŸãåŒãç¶ãå®è¡ãããšãããã«ããã€ãã®ãªãã·ã§ã³ã衚瀺ãããŸãã
ãããã®äºæããªãçµæã¯ãRubyã³ãŒãã®ç«¶åç¶æ
ã®çµæã§ãã å®éãããã¯ããªãäžè¬çãªèšèšãšã©ãŒãã¿ãŒã³ã§ããããcheck-then-set race conditionããšããç¬èªã®ååãæã£ãŠããŸãã ãã®å Žåã2ã€ä»¥äžã®ã¹ã¬ãããç¹å®ã®å€ããã§ãã¯ããæåã®å€ã«åºã¥ããŠä»ã®å€ãèšå®ããŸãã ã¢ãããã¯æ§ãä¿èšŒãããã®ãäœããªãããã2ã€ã®ã¹ããªãŒã ãã倿€èšŒããã§ãŒãºãçµãŠãäž¡æ¹ããæ°ããå€ã®èšå®ããã§ãŒãºãå®äºããããšã¯å®å
šã«å¯èœã§ãã
ã¬ãŒã¹ã¹ããŒã¿ã¹ã®èªè
ãããä¿®æ£ããæ¹æ³ãèŠãåã«ããããèªèããæ¹æ³ãçè§£ããŠã»ããã
@brixenã«ã¯ãåæå®è¡ã®ã³ã³ããã¹ãã§ã€ã³ã¿ãŒãªãŒãã®çšèªã説æãã矩åããããŸãã ããã¯æ¬åœã«åœ¹ã«ç«ã¡ãŸãã
ã³ã³ããã¹ãã®åãæ¿ãã¯ãã³ãŒãã®ã©ã®è¡ã§ãçºçããå¯èœæ§ãããããšã«æ³šæããŠãã ããã ããã¹ã¬ããããå¥ã®ã¹ã¬ããã«åãæ¿ãããšããããã°ã©ã ãåå¥ã®ãããã¯ã®ã»ããã«åå²ãããŠãããšæ³åããŠãã ããã ãã®äžé£ã®ãããã¯ã®ã»ããã¯ãã€ã³ã¿ãŒãªãŒãçšã®ã»ããã§ãã
äžæ¹ã§ã¯ãã³ãŒãã®åè¡ã®åŸã«ã³ã³ããã¹ãã®åãæ¿ããçºçããå¯èœæ§ããããŸãïŒ ãã®ãããªäº€äºãããã¯ã®ã»ããã«ã¯ãããããã«1è¡ã®ã³ãŒããå«ãŸããŸãã äžæ¹ãã¹ããªãŒã ã®æ¬æã§ã¯ã³ã³ããã¹ãã®åãæ¿ãããŸã£ããè¡ãããªãå¯èœæ§ããããŸãã ãã®å Žåãå亀äºãããã¯ã«å®å
šãªã¹ããªãŒã ã³ãŒãããããŸãã ãããã®äž¡æ¥µç«¯ã®éã«ã¯ãããã°ã©ã ã亀äºã®ãããã¯ã«ã¹ã©ã€ã¹ããæ¹æ³ã«é¢ããå€ãã®ãªãã·ã§ã³ããããŸãã
ãããã®ä»£æ¿ã®ããã€ãã¯åé¡ãããŸããã ãã¹ãŠã®ã³ãŒãè¡ãç«¶åç¶æ
ã«ãªãããã§ã¯ãããŸããã ããããå¯èœãªä»£æ¿ãããã¯ã®ã»ãããšããŠããã°ã©ã ãæç€ºããããšã¯ãç«¶åç¶æ³ããã€çºçããããçè§£ããã®ã«åœ¹ç«ã¡ãŸãã äžé£ã®ã°ã©ãã£ã«ã«ãªã¹ããŒã ã䜿çšããŠããã®ã³ãŒãã2ã€ã®ã¹ã¬ããã§å®è¡ããæ¹æ³ã瀺ããŸãã
ãã€ã¢ã°ã©ã ãåçŽã«ããããã«ããshearïŒãã¡ãœããåŒã³åºãããã®ã³ãŒãã«çœ®ãæããŸããããã®ã¹ããŒã ãæ€èšããŠãã ããã ã¹ããªãŒã Aã®äº€äºã®ãããã¯ã¯èµ€ã§åŒ·èª¿è¡šç€ºããããããã¯Bã¯éã§åŒ·èª¿è¡šç€ºãããŸãã
次ã«ãã³ã³ããã¹ãåãæ¿ããã·ãã¥ã¬ãŒãããããšã§ããã®ã³ãŒããã©ã®ããã«ä»£æ¿ãããããèŠãŠã¿ãŸãããã æãåçŽãªã±ãŒã¹ã§ã¯ãå®è¡äžã«ã¹ã¬ãããäžæãããªãå Žåãããã¯ç«¶åç¶æ
ãåŒãèµ·ããããæåŸ
ãããçµæãåŸãããŸãã æ¬¡ã®ããã«ãªããŸãã

ã€ãã³ãã®é åºãé çªã«è¡šç€ºãããããã«ãåè·¯ãæŽçããŸããã GILã¯å®è¡å¯èœã³ãŒãã®åšãã®ãã¹ãŠã忢ããããã2ã€ã®ã¹ã¬ãããå®éã«äžŠè¡ããŠåäœããããšã¯ã§ããŸããã ãã®å Žåã®ã€ãã³ãã¯ãäžããäžã«é çªã«é²ã¿ãŸãã
ãã®ããŒããŒã·ã§ã³ã§ã¯ãã¹ã¬ããAã¯ãã¹ãŠã®äœæ¥ãå®äºããã¹ã±ãžã¥ãŒã©ã¯ã³ã³ããã¹ããã¹ã¬ããBã«åãæ¿ããŸããã¹ã¬ããAã¯ãã§ã«æ£åžžã«çŸãåãåããç¶æ
倿°ãæŽæ°ããŠãããããã¹ã¬ããBã¯äœãããŸããã
ããããå¿
ãããããã»ã©åçŽã§ã¯ãããŸããã ã¹ã±ãžã¥ãŒã©ã¯ãã€ã§ãã³ã³ããã¹ããåãæ¿ããããšãã§ããŸãã ä»åã¯å¹žéã§ããã
äºæ³å€ã®çµæããããããããåå£ãªäŸãèŠãŠã¿ãŸãããã

ãã®å Žåãåé¡ã®åå ãšãªã£ãæç¹ã§ã³ã³ããã¹ãã®åãæ¿ããçºçããŸãã ã¹ããªãŒã Aã¯ç¶æ
ããã§ãã¯ããã«ãããéå§ããŸãã ãã®åŸãã¹ã±ãžã¥ãŒã©ã¯ã³ã³ããã¹ããåãæ¿ããã¹ã¬ããBãå®è¡ãéå§ããŸãããã¹ã¬ããAã¯æ¢ã«çŸãåã£ãŠããŸãããã¹ããŒã¿ã¹ãã©ã°ãæŽæ°ããããšãã§ããŠããªããããã¹ã¬ããBã¯ããã«ã€ããŠäœãç¥ããŸããã
ã¹ããªãŒã Bã¯ç¶æ
ããã§ãã¯ããçŸãåã蟌ãŸããŠããªããšå€æããåã³åãåããŸãã ãã®åŸãã³ã³ããã¹ãã¯ã¹ã¬ããAã«åãæ¿ãããã¹ã¬ããAãå®è¡ãå®äºããŸãã ã¹ã¬ããBã¯ã¹ããŒã¿ã¹ãã©ã°ãèšå®ããŸãããå²ãèŸŒã¿æã®ç¶æ
ã®ã¿ãèšæ¶ãããããã¹ã¬ããAã¯ãããå床è¡ããŸãã
çŸã2ååæããããšããäºå®ã¯ããããåŠçããã®ã«å€§ããªåé¡ãšã¯æããªããããããŸããããã¢ã«ãŠã³ãã«çœ®ãæããŠãäžæºã®é¡§å®¢ãç²åŸããããã«åãã¢ã«ããã«æéãæãã ãã§ååã§ãïŒ
ãããã®ããšã®é決å®çãªæ§è³ªã瀺ãå¥ã®äŸãå
±æããŸãã

åã¹ã¬ãããæ°åå°ãå®è¡ãããããã«ãã³ã³ããã¹ãã¹ã€ããã远å ããŸããã ããã°ã©ã ã®ã©ã®è¡ã§ãã³ã³ããã¹ãã®åãæ¿ããå¯èœã§ããããšãçè§£ããå¿
èŠããããŸãã ãããã®åãæ¿ãã¯ãã³ãŒããå®è¡ããããã³ã«ç°ãªãã¿ã€ãã³ã°ã§çºçããå¯èœæ§ãããããã1åã®å埩ã§ç®çã®çµæãåŸãããšãã§ããæ¬¡ã®å埩ã§ã¯äºæããªãçµæãåŸãããšãã§ããŸãã
ã¬ãŒã¹ã®ç¶æ
ãèããã®ã¯æ¬åœã«è¯ãããšã§ãã ãã«ãã¹ã¬ããã³ãŒããèšè¿°ãããšãã¯ãããã°ã©ã ããããã¯ã«åå²ã§ããããšãèæ
®ããããŸããŸãªä»£æ¿ã®åœ±é¿ãèæ
®ããå¿
èŠããããŸãã ãããã®äžéšã誀ã£ãçµæã«ã€ãªããå¯èœæ§ããããšæãããå Žåã¯ãã¢ãããŒããåèãããããã¥ãŒããã¯ã¹ãä»ããŠåæãéå§ããå¿
èŠããããŸãã
ããã¯ã²ã©ãã§ãïŒ
ãã¥ãŒããã¯ã¹ã远å ããã ãã§ããã®ã³ãŒããã¹ã¬ããã»ãŒãã«ã§ããããšãäŒããã®ãé©åã ãšæãããŸãã ã¯ããããªãã¯æ¬åœã«
ãããè¡ãããšãã§ããŸããããããã²ã©ãã¢ãããŒãã§ããããšãç§ã®ãã€ã³ãã蚌æããããã«ãç¹ã«æ¬¡ã®äŸãçšæããŸããã ãã®ãããªã³ãŒãããã«ãã¹ã¬ããå®è¡çšã«äœæããªãã§ãã ããã
ãªããžã§ã¯ããžã®ãªã³ã¯ãæã€è€æ°ã®ã¹ã¬ãããããããã®å€æŽãè¡ããã³ã«ã倿Žã®éäžã§ã³ã³ããã¹ããåãæ¿ããããšã®çµæãé²ãããã«é©åãªå Žæã«ããã¯ããªãå Žåãåé¡ãçºçããŸãã
ãã ããã³ãŒãããããã¯ããã«ç«¶åç¶æ
ãåé¿ã§ããŸãã ãã¥ãŒã䜿çšãã1ã€ã®ãœãªã¥ãŒã·ã§ã³ã次ã«ç€ºããŸãã
require 'thread' class Sheep
以åãšãŸã£ããåãã§ãããããsheepã¯ã©ã¹ã®å®è£
ãåé€ããŸããã çŸåšã1é ã®çŸãšåœŒå¥³ã®æ¯åãã®ã¬ãŒã¹ã§ç°ãªãã¹ããªãŒã ãäžç·ã«äœ¿çšãã代ããã«ãåæãæäŸãããã¥ãŒãç»å ŽããŸããã
ãã®ã³ãŒããMRIãŸãã¯ä»ã®å®éã®äžŠåRubyå®è£
ã§å®è¡ãããšãæ¯åäºæãããçµæãçæãããŸãã ãã®ã³ãŒãã§ã¯ç«¶åç¶æ
ãè§£æ¶ããŸããã ãã¹ãŠã®ã¹ã¬ãããå€ããå°ãªããåæã«
Queue#pop
ãåŒã³åºããŸããããã®ã³ãŒãã¯å
éšãã¥ãŒããã¯ã¹ã䜿çšããŠãäžåºŠã«1ã€ã®ã¹ã¬ããã®ã¿ãçŸãååŸã§ããããã«ããŸãã
ãã®1ã€ã®ã¹ããªãŒã ãçŸãååŸãããšããã«ãç«¶åç¶æ
ã¯æ¶æ»
ããŸãã ãã£ã1ã€ã®ã¹ã¬ããã§ã圌ãšç«¶äºããããšã¯ãããããŸããïŒ
ãããã¯ãã代ããã«ãã¥ãŒã䜿çšããããšãææ¡ããçç±ã¯ããã¥ãŒã誀ã£ãŠäœ¿çšããã®ãããé£ããããã§ãã ããã¯ã§ã¯ããåãã®ãšãããééããç¯ããããã§ãã æ£ãã䜿çšããªããšããããããã¯ãããã©ãŒãã³ã¹äœäžãªã©ã®æ°ããåé¡ãçºçããŸãã ããŒã¿æ§é ã®äœ¿çšã¯ãæœè±¡åã®äœ¿çšã«äŒŒãŠããŸãã ããªãããŒãªãã®ãããå¶éããŸãããããã·ã³ãã«ãªAPIãååŸããŸãã
é
å»¶åæå
ç§ã¯ãé
å»¶åæåããcheck-then-set race conditionãã®å¥ã®åœ¢åŒã§ããããšãããã«ææããŸãã
||=
æŒç®åã¯æ¬¡ã®ããã«å±éãããŸãã
@logger ||= Logger.new
å±éãããããŒãžã§ã³ãèŠãŠãåé¡ãçºçããå¯èœæ§ã®ããå ŽæãèããŸãã è€æ°ã®ã¹ã¬ããããããåæãè¡ãããŠããªãå Žåã
@logger
ãæ°ååæåãããå¯èœæ§ã¯
@logger
ã«ãããŸãã ãã¡ããããã®å Žå
@logger
2ååæåããŠãåé¡ã¯ãããŸããããåé¡ã®åå ãšãªãã³ãŒãã«åæ§ã®ãã°ããããŸãã
åå°
æåŸã«ãããªãèªèº«ã®ããã«ããã€ãã®æèšãåŠãã§ã»ããã
5人äž4人ã®ããã°ã©ãã¯ããã«ãã¹ã¬ããããã°ã©ãã³ã°ã§ã¯ãã¹ãŠãæ£ããè¡ãããšã¯éåžžã«é£ããããšã«åæããŸãã
æåŸã«ãGILãä¿èšŒããŠããã®ã¯ãMRIã«çµã¿èŸŒãŸããã¡ãœããå®è£
ãã¢ãããã¯ã§ããããšã ãã§ãïŒãã ãã
èœãšã穎ããããŸã ïŒã ãã®æ¯ãèãã¯æã
å©ãã«ãªããŸãããGILã¯å®éã«ã¯Rubyéçºè
åãã®å
ç¢ãªAPIãšããŠã§ã¯ãªããMRIèªäœãå
éšçã«ä¿è·ããããã«èšèšãããŠããŸãã
ãããã£ãŠãGILã¯ã¹ã¬ããã®å®å
šæ§ã®åé¡ã解決ããŸããã å
ã»ã©èšã£ãããã«ããã«ãã¹ã¬ããããã°ã©ã ãæ£ããäœæããããšã¯å°é£ã§ãããæ¯æ¥è€éãªåé¡ã解決ããŠããŸãã è€éãªåé¡ã«å¯ŸåŠããããã®1ã€ã®ãªãã·ã§ã³ã¯æœè±¡åã§ãã
ããšãã°ãã³ãŒãã§HTTPãªã¯ãšã¹ããè¡ãå¿
èŠãããå Žåããœã±ããã䜿çšããå¿
èŠããããŸãã ããããããã¯ããã°ãããšã©ãŒãçºçãããããããéåžžã¯çŽæ¥äœ¿çšããŸããã 代ããã«ãæœè±¡åã䜿çšããŸãã HTTPã¯ã©ã€ã¢ã³ãã¯ãããå¶éãããã·ã³ãã«ãªAPIãæäŸãããœã±ããã§ã®äœæ¥ãé ããäžå¿
èŠãªãšã©ãŒããç§ãæããŸãã
æ£ãããã«ãã¹ã¬ãããååŸããããšãå°é£ãªå Žåã¯ãçŽæ¥äœ¿çšããªãã§ãã ããã
ãããã°ã©ã ã«æ°ããã¹ã¬ããã远å ããå Žåããããã5ã€ã®æ°ãããã°ã远å ããã§ããããã ãã€ã¯ã»ããŒãã
ã¹ããªãŒã ã®åšå²ã«ã¯ãŸããŸãæœè±¡åãèŠãããŸãã Rubyã³ãã¥ããã£ãç²åŸããã¢ãããŒãã¯ã¢ã¯ã¿ãŒã¢ãã«ã§ããã
Celluloidã®åœ¢åŒã§æãäžè¬çãªå®è£
ãè¡ãããŠããŸãã 䞊è¡åŠçããªããã£ããRubyãªããžã§ã¯ãã¢ãã«ã«æ¥ç¶ããåªããæœè±¡åãæäŸããŸãã Celluloidã¯ãã³ãŒããã¹ã¬ããã»ãŒãã§ããããšãç«¶åç¶æ
ããªãããšãä¿èšŒããŸãããããã®ç¹ã«é¢ãããã¹ããã©ã¯ãã£ã¹ãå«ãŸããŠããŸãã
圌㫠ãã£ã³ã¹ãäžãã
ããšã匷ãå§ããã
ç§ãã¡ã話ããŠãããããã®åé¡ã¯ãRubyãMRIã«ç¹æã®ãã®ã§ã¯ãããŸããã ããã¯ããã«ãã³ã¢ããã°ã©ãã³ã°ã®äžçã«ãããçŸå®ã§ãã ããã€ã¹ã®ã³ã¢ã®æ°ã¯å¢ãç¶ããŠããã ãã§ãMRIã¯ãŸã ããã«å¯Ÿå¿ããŠããŸããã ããã€ãã®ä¿èšŒã«ããããããããã«ãã¹ã¬ããããã°ã©ãã³ã°ã§GILã䜿çšããããšã¯ééã£ãŠããããã§ãã ããã¯MRIæé·ç
ã®äžéšã§ãã JRubyãRubinusãªã©ã®ä»ã®å®è£
ã¯å®éã«åæ£ããŠåäœããGILã¯ãããŸããã
äžŠè¡æ§ã®æœè±¡åãçµã¿èŸŒãŸããå€ãã®æ°ããèšèªããããŸãã å°ãªããšããŸã ãRubyã«ã¯ãããŸããã æœè±¡åã®ãã1ã€ã®å©ç¹ã¯ãå®è£
ãæ¹åã§ãããšåæã«ãã³ãŒãã倿Žãããªãããšã§ãã ããšãã°ããã¥ââãŒã®å®è£
ãããã¯ã®äœ¿çšãåãé€ããå Žåãã³ãŒãã¯å€æŽãªãã§ã¡ãªããã享åããŸãã
ä»ã®ãšãããRubyããã°ã©ããŒã¯ãããã®åé¡ãèªåã§è§£æ±ºããæ¹æ³ãåŠã¶ã¹ãã§ãïŒ äžŠè¡æ§ã«ã€ããŠåŠç¿ããŸãã ç«¶åç¶æ
ã®åå ãç¥ãã ã³ãŒãã亀äºã®ãããã¯ãšããŠæ³åããŠãã ãããããã¯åé¡ã®è§£æ±ºã«åœ¹ç«ã¡ãŸãã
æåŸã«ã仿¥ã®äžŠè¡æ§ã«é¢ããäœæ¥ã®ã»ãšãã©ããã説æããåŒçšã远å ããŸãã
ãäžç·ã«ä»äºãããªããã¹ããŒã¿ã¹ãå
±æãããã¹ããŒã¿ã¹ãå
±æããã
åæã«ããŒã¿æ§é ã䜿çšãããšãããããµããŒããããŸãã ã¢ã¯ã¿ãŒã¢ãã«ã¯ãã®èãããµããŒãããŠããŸãã GoãErlangãªã©ã®èšèªã®åæå®è¡æ§ã®åºç€ã«ãªããŸãã
Rubyã¯ãä»ã®èšèªã§æ©èœãããã®ãšããããèªåèªèº«ã«è¿œå ããæ¹æ³ãç£èŠããå¿
èŠããããŸãã Rubyéçºè
ãšããŠã仿¥ããäœããå§ããããšãã§ããŸããããããã®ã¢ãããŒãã詊ããŠããµããŒãããŠãã ããã ããå€ãã®äººã
ãåå ããããšã§ããããã®ã¢ãããŒãã¯Rubyã®æ°ããæšæºã«ãªãå¯èœæ§ããããŸãã
ãã®èšäºã®äžæžããåæããŠããããã©ã€ã¢ã³ã»ã·ã©ã€ã«æè¬ããŸãã