SObjectizerãã¬ãŒã ã¯ãŒã¯ ããã®æ©èœãæ©èœãèªè ã«ç¥ã£ãŠããããC ++ãœãããŠã§ã¢ã®éçºã§SObjectizerã䜿çšããŠ14幎以äžã«ããã£ãŠåŠãã ããã€ãã®æèšã«ã€ããŠè©±ãé²ããããšãã§ããŸãã 仿¥ã¯ãã¹ããŒããã·ã³ã®åœ¢ã®ãšãŒãžã§ã³ããé©åãªéžæè¢ã§ã¯ãªãå Žåã«ã€ããŠèª¬æããŸãã 倿°ã®ãšãŒãžã§ã³ããäœæããå¯èœæ§ã¯ãããèªäœã®åé¡ã»ã©è§£æ±ºçã§ã¯ãããŸããã ãããŠãæåã®ãã®ã2çªç®ã®ãã®ãšã©ã®ããã«é¢ä¿ããŠããã...
ãã®ãããåã®3ã€ã®èšäºïŒ 1ã2ãããã³3 ïŒã§ãemail_analyzerãšãŒãžã§ã³ããéåžžã«åçŽãªã¯ã©ã¹ããå€å°ãªããšãè€éãªã¯ã©ã¹ã«çºå±ããæ§åã芳å¯ããŸããã email_analyzerã®æçµããŒãžã§ã³ãèŠãŠããå€ãã®äººãã ãããããããã¯éåžžã«é£ããããã£ãšç°¡åã§ã¯ãªãã ãããïŒããšãã質åããããšæãã
ãšãŒãžã§ã³ãã¯æéç¶æ ãã·ã³ãšããŠè¡šããããããéåžžã«å°é£ã§ããã çä¿¡ã¡ãã»ãŒãžãåŠçããã«ã¯ãå¥ã®ã¡ãœããïŒã€ãã³ããã³ãã©ãŒïŒãèšè¿°ããå¿ èŠããããŸãã ãšãŒãžã§ã³ããæ°ããã€ãã³ããã³ãã©ãéå§ããã«ã¯ãçŸåšã®ãã³ãã©ãçµäºããå¿ èŠããããŸãã ãããã£ãŠãèŠæ±ãéä¿¡ããŠå¿çãåä¿¡ããã«ã¯ããšãŒãžã§ã³ãã¯çŸåšã®ãã³ãã©ãŒãå®äºããŠãå¿çãåä¿¡ãããšãã«ãã£ã¹ãããã£ãŒãé©åãªãã³ãã©ãŒãåŒã³åºããããã«ããå¿ èŠããããŸãã ã€ãŸã 代ããã«ïŒ
void some_agent::some_event() { ... // . send< request >(receiver, reply_to, paramsâŠ); // . auto resp = wait_reply< response >(reply_to); ... // . }
ç§ã¯ãã®ããã«æžããªããã°ãªããŸããïŒ
void some_agent::some_event() { ... // . so_subscribe(reply_to).event(&some_agent::on_response); // . send< request >(receiver, reply_to, params...); // some_event . // // , . } void some_agent::on_response(const response & resp) { ... // . }
ãããã£ãŠãçµæã®email_analyzerãšãŒãžã§ã³ãã®éãšè€éãã
ãããããã®ã¢ãããŒãã«ã¯ãæžã蟌ã¿éã20ã30ïŒ åæžããããªãã¯ãããã€ããããŸãããååãšããŠç¶æ³ã¯å€ãããŸããã
ããã§ãçè§£æ§ãšã³ã³ãã¯ãæ§ã«å€§ãã圱é¿ããå¯èœæ§ãããã®ã¯ãåææäœã䌎ãç·åœ¢ã³ãŒããžã®ã³ãŒã«ããã¯ã«åºã¥ããã€ãã³ãã¢ãã«ããã®è±åŽã§ãã æ¬¡ã®ãããªãã®ïŒ
void email_analyzer(context_t ctx, string email_file, mbox_t reply_to) { try { // . auto raw_content = request_value< load_email_succeed, load_email_request >( ctx.environment().create_mbox( "io_agent" ), 1500ms, // 1.5s email_file ).content_; auto parsed_data = parse_email( raw_content ); // -checker-, // message chain, . auto check_results = create_mchain( ctx.environment() ); introduce_child_coop( ctx, disp::thread_pool::create_disp_binder( "checkers", disp::thread_pool::bind_params_t{} ), [&]( coop_t & coop ) { coop.make_agent< email_headers_checker >( check_results, parsed_data->headers() ); coop.make_agent< email_body_checker >( check_results, parsed_data->body() ); coop.make_agent< email_attach_checker >( check_results, parsed_data->attachments() ); } ); // .. , // . auto check_handler = [&]( const auto & result ) { if( check_status::safe != result.status ) throw runtime_error( "check failed: " + result ); } ); // 0.75s , // . auto r = receive( from( check_results ).total_time( 750ms ), [&]( const email_headers_check_result & msg ) { check_handler( msg ); }, [&]( const email_body_check_result & msg ) { check_handler( msg ); }, [&]( const email_attach_check_result & msg ) { check_handler( msg ); } ); // , . if( 3 != r.handled() ) throw runtime_error( "check timedout" ); // , . send< check_result >( reply_to, email_file, check_status::safe ); } catch( const exception & ) { send< check_result >( reply_to, email_file, check_status::check_failure ); } }
ããã§ããã®å ŽåãErlangãGoãªã©ã®èšèªã§ãã®åé¡ã解決ããã®ã«äŒŒããããã³ã³ãã¯ãã§çè§£ããããã³ãŒããåŸãããŸãã
ç§ãã¡ã®çµéšã¯ããšãŒãžã§ã³ããããªã¯ãšã¹ããéä¿¡ããå¯äžã®çããããã«åŸ æ©ãå§ããããšãã圢åŒã®äžé£ã®æäœãå®è¡ããç¶æ³ã§ã¯ãæéç¶æ ãã·ã³ã®åœ¢åŒã§ã®å®è£ ã¯ãã³ãŒãã®éãšè€éãã®ç¹ã§äžå©ã«ãªãããšã瀺åããŠããŸãã åçŽã«å¿çãåŸ ã£ãŠåä¿¡åŸããã«äœæ¥ãç¶ãã代ããã«ããšãŒãžã§ã³ãã¯çŸåšã®ã€ãã³ããã³ãã©ãŒãå®äºããå¿ èŠããããä»ã®ãã¹ãŠã®ã¢ã¯ã·ã§ã³ã¯å¥ã®ãã³ãã©ãŒã«ç§»åããå¿ èŠããããŸãã ãšãŒãžã§ã³ãããã®åç¶æéäžã«Nåã®é£ç¶ããéåææäœãå®è¡ããå Žåããã®ãšãŒãžã§ã³ãã¯ïŒN + 1ïŒãã³ãã©ãŒãæã£ãŠããå¯èœæ§ãé«ããªããŸãã è¯ããªãããšã¯ ãã®ãããªãšãŒãžã§ã³ãã®éçºãšä¿å®ã«ã¯ãå€ãã®æéãšãšãã«ã®ãŒãããããŸãã
ãšãŒãžã§ã³ããäœããåŸ ã£ãŠãããã³ã«ãããã€ãã®ç°ãªãã¡ãã»ãŒãžã圌ã«å±ãããšãŒãžã§ã³ããããããã«å¿çããå¿ èŠãããå Žåãç¶æ³ã¯å®å šã«ç°ãªããŸãã ããšãã°ããšãŒãžã§ã³ãã¯çŸåšã®æäœã®çµæãåŸ ã¡ããã®ç¬éã«æäœã®ã¹ããŒã¿ã¹ããã§ãã¯ããŠæ°ããæäœã®å®è¡ãèŠæ±ãããªã¯ãšã¹ãããšãŒãžã§ã³ãã«å±ãå ŽåããããŸãã ãã®å ŽåãåãšãŒãžã§ã³ãåŸ æ©æã«äºæ³ããããã¹ãŠã®ã¿ã€ãã®ã¡ãã»ãŒãžãžã®å¿çããã€ã³ãããå¿ èŠããããŸãããŸããããã«ããããšãŒãžã§ã³ãã³ãŒãã倧éãã€ç解床ã®äœãããŒãã«ã«éåžžã«è¿ éã«å€ããå¯èœæ§ããããŸãã
SObjectizerã¯çŸåšãã¹ããŒããã·ã³ã®åœ¢åŒã§ã®ã¿ãšãŒãžã§ã³ãããµããŒãããŠãããããé©çšããããšãŒãžã§ã³ãã®ããžãã¯ãã¹ããŒããã·ã³ã«ã©ã®çšåºŠåœãŠã¯ãŸãããæ éã«è©äŸ¡ããå¿ èŠããããŸãã ããŸãè¯ããªãå ŽåãSObjectizerã¯æè¯ã®éžæã§ã¯ãªããããããŸãããã³ã«ãŒãã³ã䜿çšãããœãªã¥ãŒã·ã§ã³ãèŠãã®ã¯çã«ããªã£ãŠããŸãã ããšãã°ã boost.fiberãŸãã¯Synca ïŒ Habrã«ã¯è峿·±ãèšäºããããŸããïŒ No. 1ããã³No. 2 ïŒã
ãã®ãããããã·ãªãŒãºãSObjectizerïŒã·ã³ãã«ããã³ã³ãã¬ãã¯ã¹ãã®åã®3ã€ã®èšäºã¯ãäžæ¹ã§SObjectizerã®æ©èœã瀺ããŠããŸãããäžæ¹ã§ãã©ãã«è¡ãããšãã§ããããèŠãããšãã§ããŸããåé¡ã解決ããå¥ã®ã¢ãããŒãããããŸãã ããšãã°ãã³ã«ãŒãã³ã®åœ¢ã§ãšãŒãžã§ã³ãã䜿çšããããšãçã«ããªã£ãŠããæéç¶æ ãã·ã³ã®åœ¢ã§ãšãŒãžã§ã³ãã䜿çšãå§ããå Žåã
ããããå€ãã®å Žåãã³ã«ãŒãã³ãã¹ããŒããã·ã³ãããåçæ§ãé«ãå ŽåãSObjectizerãã³ã«ãŒãã³ãšããŠãšãŒãžã§ã³ãããµããŒãããªãã®ã¯ãªãã§ããïŒ ããã«ã¯ããã€ãã®é倧ãªçç±ããããŸããæè¡çããã³çµç¹çã§ãã ãããããã³ã«ãŒãã³ãC ++èšèªã®äžéšã§ãã£ãå ŽåãSObjectizerã®ã³ã«ãŒãã³ãšãŒãžã§ã³ãã¯ãã§ã«ããã§ããã ããããä»¥æ¥ C ++ã®ã³ã«ãŒãã³ã¯çŸåšããµãŒãããŒãã£ã®ã©ã€ãã©ãªãä»ããŠã®ã¿å©çšå¯èœã§ããããããã¯ã¯æãåçŽã§ã¯ãããŸãããSObjectizerã«ãã®æ©èœã远å ããããšã¯æ¥ãã§ã¯ãããŸããã ããã«ããã®åé¡ã«ã¯ãŸã£ããç°ãªãåŽé¢ããããŸãã ããããããã«ã€ããŠè©±ãã«ã¯ãé ãããè¡ãå¿ èŠããããŸã...
ãããããããSObjectizerã®æåã®ããŒãžã§ã³ãçºå£²ããããšããç§ãã¡ã¯ä¿³åªã¢ãã«ããŒã¹ã®ããŒã«ãæåã«æã«å ¥ããå€ãã®æ°åè ãšåãééããç¯ããŸããïŒãããã¿ããšã«ãšãŒãžã§ã³ããäœæã§ãããªãããããäœæããå¿ èŠããããŸãã ã¿ã¹ã¯ã®å®è¡ã¯ããšãŒãžã§ã³ããšããŠæç€ºããå¿ èŠããããŸãã ãã®ã¿ã¹ã¯ã1ã€ã®èŠæ±ã®ã¿ãåä¿¡ãã1ã€ã®åçã®ã¿ãéä¿¡ããããšã«ããå Žåã§ãã äžè¬çã«ãæ°ããæ©äŒããã®é ãã¯ãããªããçªç¶ãäžçã«ã¯ãšãŒãžã§ã³ã以å€ã®äœè ã§ããªãããšããæèŠã«åºå·ãå§ããããã§ãã
ããã¯ããã€ãã®è² ã®çµæããããããŸããã
ãŸããã¢ããªã±ãŒã·ã§ã³ã³ãŒãã¯ãç§ãã¡ãæãã§ããããããããå€ããããè€éã§ããããšãããããŸããã çµå±ã®ãšãããéåæã¡ãã»ãŒãžã¯æå€±ã®å¯Ÿè±¡ãšãªãã1ã€ã®åæåŒã³åºããæžã蟌ãããšãã§ããå Žæã§ã¯ãèŠæ±ã¡ãã»ãŒãžã®éä¿¡ãå¿çã¡ãã»ãŒãžã®åŠçãèŠæ±ãŸãã¯å¿çã®æå€±ã蚺æããããã®ã¿ã€ã ã¢ãŠãã®åšãã«éãšwereããããŸããã ã³ãŒããåæãããšãååã®ã±ãŒã¹ã®ã©ããã§ãã¡ãã»ãŒãžã«å¯Ÿããå¯Ÿè©±ãæ£åœåãããããšã倿ããŸããã ããã§ãããŒã¿ã¯ç°ãªãã¯ãŒã¯ãããŒéã§è»¢éãããŸããã ãããŠãæ®ãã®å Žæã§ã¯ã倿°ã®å°ããªãšãŒãžã§ã³ãã1ã€ã®å€§ããªãšãŒãžã§ã³ãã«ããŒãžããéåžžã®åæé¢æ°åŒã³åºããéããŠãã®äžã®ãã¹ãŠã®æäœãå®è¡ããããšãã§ããŸããã
第äºã«ããšãŒãžã§ã³ãäžã«æ§ç¯ãããã¢ããªã±ãŒã·ã§ã³ã®åäœã¯ãç£èŠããã®ãã¯ããã«é£ãããäºæž¬ããã®ãããã«é£ããããšã倿ããŸããã è¯ãäŸãã¯ã倧ããªé³¥ã®çŸ€ãã®é£è¡ã芳å¯ããããšã§ããåã ã®åäœã®è¡åã®èŠåã¯åçŽã§çè§£ã§ããŸããã矀ãå šäœã®è¡åãäºæž¬ããããšã¯ã»ãšãã©äžå¯èœã§ãã ãã®ãããæ°äžäººã®ãšãŒãžã§ã³ããåæã«ç掻ããã¢ããªã±ãŒã·ã§ã³ã§ã¯ããããããå®å šã«çè§£å¯èœãªæ¹æ³ã§æ©èœããŸãããå ±åäœæ¥ã®è€å广ã¯äºæž¬ã§ããªãå ŽåããããŸãã
ãŸã æªãã®ã¯ãã¢ããªã±ãŒã·ã§ã³ã§äœãèµ·ãã£ãŠããããçè§£ããããã«å¿ èŠãªæ å ±éã®å¢å ã§ãã email_analyzerã®äŸãèŠãŠã¿ãŸãããã åäžã®analyser_managerãšãŒãžã§ã³ãã¯ããã¥ãŒã§åŸ æ©ããŠãããªã¯ãšã¹ãã®ç·æ°ã皌åäžã®email_analyzerãšãŒãžã§ã³ãã®ç·æ°ããã¥ãŒã§ãªã¯ãšã¹ããåŸ æ©ããæå°ãæå€§ãããã³å¹³åæéïŒãªã¯ãšã¹ãåŠçæéãšåæ§ïŒãªã©ã®æ å ±ãæäŸã§ããŸãã ãããã£ãŠãanalyzer_managerã®ã¢ã¯ãã£ããã£ã®ç£èŠã¯åé¡ã§ã¯ãããŸããã ããããåã ã®email_analyzerããã®æ å ±ã®åéãéçŽãããã³åŠçã¯ãã§ã«å°é£ã§ãã ããã«ããããã®è¬å€ãå°é£ã§ããã»ã©ããã®å¯¿åœã¯çããªããŸãã
ãã®ãããã¢ããªã±ãŒã·ã§ã³å ã®ãšãŒãžã§ã³ãã®æ°ãå°ãªãã»ã©ããšãŒãžã§ã³ãã远跡ãããããªããäœãã©ã®ããã«çºçããã©ã®ããã«çºçããããçè§£ãããããªããç¹å®ã®æ¡ä»¶ã§ã®ã¢ããªã±ãŒã·ã§ã³ã®åäœãäºæž¬ãããããªããŸãã
第äžã«ãæ°äžäººã®ãšãŒãžã§ã³ããå éšã«ããã¢ããªã±ãŒã·ã§ã³ã§æã çºçããäºæž¬äžèœæ§ã«ãããã¢ããªã±ãŒã·ã§ã³ãéšåçãŸãã¯å®å šã«åäœäžèœãªç¶æ ã«ãªãå¯èœæ§ããããŸãã
å žåçãªã±ãŒã¹ïŒ10äžäººã®ãšãŒãžã§ã³ãã®ã¢ããªã±ãŒã·ã§ã³ã ãããã¯ãã¹ãŠã宿çãªã¡ãã»ãŒãžã®å©ããåããŠãæäœã®ã¿ã€ã ã¢ãŠããå¶åŸ¡ããŸãã ãããŠãããæç¹ã§ãããšãã°2äžäººã®ãšãŒãžã§ã³ãã®ã¿ã€ã ã¢ãŠããããã«å§ãŸããŸãã ãããã£ãŠãåŠççšã®ã¡ãã»ãŒãžãã¥ãŒã¯ãäœæ¥ã¹ã¬ããäžã§èšãã¿ãŸãã ãããã®ãã¥ãŒã¯ã¬ã€ã¯ããå§ããåãšãŒãžã§ã³ãã¯ã¡ãã»ãŒãžãåä¿¡ããŠââåŠçããŸãã ãããããããã®2äžã®ã¡ãã»ãŒãžãåŠçãããŠããéã«ãæéãããããããŠãã¿ã€ããŒããããã«2äžã®ã¡ãã»ãŒãžãå°çããŸãã ããã¯ããŸã ãã¥ãŒã«ããå€ãã¡ãã»ãŒãžã®äžéšã«è¿œå ãããŸãã 圌ã«ã¯ãã¹ãŠãåŠçããæéããªããããã«2äžä»¶ã®ã¡ãã»ãŒãžãå°çããããšã¯æããã§ãã ç ã¢ããªã±ãŒã·ã§ã³ã¯æ£çŽã«åäœããããšããŠããããã§ãããåŸã ã«äœäžããŠå®å šã«åäœããªããªããŸãã
ç§ãã¡ã®ãããžã§ã¯ãã§SObjectizerã䜿çšããæåã®æ®µéã§ãã®ã¬ãŒããæ©ããçµæã100äžäººã®ãšãŒãžã§ã³ããäœæããæ©äŒã¯ãç§ãã¡ã®å®è·µã§æ±ããããŠãããã®ãããããŒã±ãã£ã³ã°ã®åŒŸäžžã§ãããšããçµè«ã«éããŸãã* ã ãŸãã SEDA-wayãšããŠç¥ãããããã«ãªã£ããã®ã¢ãããŒãã«ãããå¶åŸ¡ãã¯ããã«ç°¡åã§ãäºæž¬å¯èœãªåäœãããã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ã§ããŸãã
ã¢ã¯ã¿ãŒã¢ãã«ãšçµã¿åãããŠSEDAã¢ãããŒãã䜿çšããããšã®æ¬è³ªã¯ãã·ãŒã±ã³ã·ã£ã«æäœã®ãã§ãŒã³å šäœãå®è¡ããã¢ã¯ã¿ãŒãäœæãã代ããã«ãåæäœã«å¯ŸããŠ1ã€ã®ã¢ã¯ã¿ãŒãäœæãããã€ãã©ã€ã³ã§æ§ç¯ããããšã§ãã é»åã¡ãŒã«ã¢ãã©ã€ã¶ãŒã®äŸã§ã¯ãé»åã¡ãŒã«ã³ã³ãã³ããé æ¬¡ããŠã³ããŒããããã®ã³ã³ãã³ããè§£æããã³åæããemail_analyzerãšãŒãžã§ã³ããå®è¡ãã代ããã«ãè€æ°ã®ã¹ããŒãžãšãŒãžã§ã³ããäœæã§ããŸãã 1ã€ã®ã¹ããŒãžãšãŒãžã§ã³ããèŠæ±ãã¥ãŒãå¶åŸ¡ããŸãã æ¬¡ã®æ®µéã®ãšãŒãžã§ã³ãã¯ãã¡ãŒã«ã䜿çšãããã¡ã€ã«ã®ã¢ããããŒãæäœãåŠçããŸãã æ¬¡ã®ã¹ããŒãžã®ãšãŒãžã§ã³ãã¯ãããŒããããã³ã³ãã³ããè§£æããŸãã æ¬¡ã¯åæã§ãã çãªã©
éèŠãªç¹ã¯ã以åã®å®è£ ã§ã¯ãemail_analyzerèªäœããã¹ãŠã®æäœãéå§ããŸããã1ã€ã®ç¹å®ã®é»åã¡ãŒã«ã«å¯ŸããŠã®ã¿ã§ãã ãŸããSEDAã¢ãããŒãã§ã¯ãæäœããšã«1ã€ã®ãšãŒãžã§ã³ãããããŸãããåãšãŒãžã§ã³ãã¯äžåºŠã«è€æ°ã®ã¡ãŒã«ã«å¯ŸããŠãããè¡ãããšãã§ããŸãã ã¡ãªã¿ã«ããã®SEDAã¢ãããŒãã®çè·¡ã¯IOãšãŒãžã§ã³ããšããŠã®äŸã§ãèŠãããšãã§ããŸããããã¯SEDAã®ã¹ããŒãžãšãŒãžã§ã³ãã«ãããŸããã
ãããã£ãŠãSEDAããã®ã¢ã€ãã¢ãç©æ¥µçã«äœ¿çšãå§ãããšããã¹ããŒãžãšãŒãžã§ã³ãã¯æéç¶æ ãã·ã³ãšããŠéåžžã«äŸ¿å©ã«å®è£ ãããããšã倿ããŸããã ããç¹å®ã®ç¬éã«ã圌ãã¯ç°ãªãå ¥ã£ãŠãã圱é¿ãåŸ ã¡ããã®ç¶æ ã«å¿ããŠãããã«åå¿ããªããã°ãªããŸããã ããã§ãç§ãã¡ã®æèŠã§ã¯ãé·æçã«ã¯æéç¶æ ãã·ã³ã¯ã³ã«ãŒãã³ããã䟿å©ã§ãã
ãšããã§ãSObjectizerã«æåã«ç²Ÿéãã人ã«ãã°ãã°æ³šæãæããã1ã€ã®ãã€ã³ãã«æ³šæããããšãã§ããŸãããšãŒãžã§ã³ãã®åé·æ§ã§ãã å®éãSObjectizerã®ãšãŒãžã§ã³ãã¯ååãšããŠãå°ãªããšãã³ã³ã¹ãã©ã¯ã¿ãŒãæã€å¥åã®C ++ã¯ã©ã¹ã§ããã³ã³ã¹ãã©ã¯ã¿ãŒã§åæåããå¿ èŠã®ãããã£ãŒã«ããããã€ããããso_define_agentïŒïŒã¡ãœãããåå®çŸ©ãããããã€ãã®ã€ãã³ããã³ãã©ãŒãå¥ã ã«ãªããŸãã¡ãœãã...åçŽãªå Žåãããããã¹ãŠãå ¬å¹³ãªæ§æãªãŒããŒãããã«ã€ãªããããšã¯æããã§ãã ããšãã°ãJust :: Thread Proã§ã¯ãåçŽãªã¢ã¯ã¿ãŒãã¬ãŒã¯æ¬¡ã®ããã«ãªããŸãã
ofstream log_file("..."); actor logger_actor( [&log_file] { for(;;) { actor::receive().match<std::string>([&](std::string s) { log_file << s << endl; } ); } } );
äžæ¹ãSObjectizerã§ã¯ããšãŒãžã§ã³ããèšè¿°ããããã«åŸæ¥ã®ã¢ãããŒãã䜿çšããå Žåãæ¬¡ã®ãããªããšãè¡ãå¿ èŠããããŸãã
class logger_actor : public agent_t { public : logger_actor( context_t ctx, ostream & stream ) : agent_t{ctx}, stream_{stream} {} virtual void so_define_agent() override { so_subscribe_self().event( &logger_actor::on_message ); } private : ostream & stream_; void on_message( const std::string & s ) { stream_ << s << endl; } }; ... ofstream log_file("..."); env.introduce_coop( [&log_file]( coop_t & coop ) { coop.make_agent< logger_actor >( log_file ); } );
æããã«ãSObjectizerã«ã¯ãã£ãšå€ãã®èœæžãããããŸãã ãã ããé説ã¯ãSEDAã¢ãããŒãã«åºå·ãããšãå€ãã®ãšãŒãžã§ã³ããååšãããç°ãªãã¿ã€ãã®ã¡ãã»ãŒãžãåŠçã§ããå ŽåããšãŒãžã§ã³ãã³ãŒãã¯éåžžã«æ¥éã«èšåŒµãããšããããšã§ãã ããã¯ããšãŒãžã§ã³ãã®äœæ¥ã®è«çïŒååãšããŠãããè€éïŒãåå ã§ããããšãŒãžã§ã³ãããã°èšé²ãç£èŠãªã©ã®è¿œå äºé ã§æºããããŠãããšããäºå®ãåå ã§ãã ãããŠããã§ããšãŒãžã§ã³ãã®ã¡ã€ã³ã¢ããªã±ãŒã·ã§ã³ã³ãŒããæ°çŸè¡ä»¥äžã®ããªã¥ãŒã ãæã£ãŠããå ŽåãSObjectizeråŽããã®æ§æãªãŒããŒãããã®ãµã€ãºã¯ãŸã£ããéèŠã§ã¯ãªãããšãããããŸãã ããã«ããšãŒãžã§ã³ãã倧ããè€éã«ãªãã»ã©ããã®è¡šçŸã¯å¥ã®C ++ã¯ã©ã¹ã®åœ¢åŒã§ããæçã«ãªããŸãã ããã¡ãã®äŸã§ã¯ãããã¯èŠããŸãããããæŠéãã³ãŒãã§ã¯éåžžã«åŒ·ãæããããŸãïŒããã§ã¯ãäŸãã°ãæãé£ããå®éã®ãšãŒãžã§ã³ãã§ã¯ãªãå°ããªäŸ ïŒã
ãããã£ãŠãå®éã®çµéšã«åºã¥ããŠãã¢ã¯ã¿ãŒã¢ãã«ãšSEDAã¢ãããŒããé©åã«çµã¿åããããšãæéãªãŒãããã³ã®åœ¢åŒã§ãšãŒãžã§ã³ãã衚çŸããããšã¯å®å šã«éåžžã®ãœãªã¥ãŒã·ã§ã³ã§ãããšããçµè«ã«éããŸããã ãã¡ããããã®ãããªæ±ºå®ã¯ã衚çŸåã®ç¹ã§ã³ã«ãŒãã³ã«å€±ãããŸãã ããããäžè¬ã«ãã¹ããŒããã·ã³ã®åœ¢åŒã®ãšãŒãžã§ã³ãã¯éåžžã«ããŸãæ©èœããç¹å¥ãªåé¡ãåŒãèµ·ããããšã¯ãããŸããã ããããã microexamplesã§ã®ã¢ã¯ã¿ãŒã¢ãã«ã®å®è£ ã«å¯ŸããããŸããŸãªã¢ãããŒããæ¯èŒããããšãé€ããŸãã
èšäºã®çµããã«ãèªè ã«èšŽããããšæããŸãã ãšãŒãžã§ã³ãã®ãªãŒããŒããŒããªã©ã®éåæã¡ãã»ãŒãžã«åºã¥ããçžäºäœçšã®ã¡ã«ããºã ã®ãã®ãããªéèŠãªåé¡ã«è§Šããããšããèšç»ã®èšäºããã1ã€ãããŸãã åæã«ãSObjectizerããšãŒãžã§ã³ãã®ãšã©ãŒã«ã©ã®ããã«å¿çãããã瀺ããŸãã ããããèŽè¡ã®æèŠãç¥ãããšã¯è峿·±ãã§ããããããªãã奜ããªãã®ãå«ããªãã®ãç§ããã£ãšç¥ãããããšã ããã¯ã次ã®èšäºã®æºåãšSObjectizerèªäœã®éçºã®äž¡æ¹ã§å€§ãã«åœ¹ç«ã¡ãŸãã
*ç§ãã¡ã¯ç§ãã¡ã®çµéšã«ã€ããŠè©±ããŠããããšã匷調ããŸãã æããã«ãã¢ã¯ã¿ãŒã¢ãã«ã䜿çšããŠä»ã®åé¡ã解決ããä»ã®ããŒã ã¯ãã¢ããªã±ãŒã·ã§ã³ã§å€æ°ã®ã¢ã¯ã¿ãŒãæ£åžžã«äœ¿çšã§ããŸãã ãããŠãããã«ã¯ãŸã£ããåå¯Ÿã®æèŠããããŸãã