RubyInstallerã®Ruby2.0ã§RubyInlineã¨Ocraã使ã£ã¦exeåãã
Rubyã®ã³ã¼ãå
ã«Cã®ã³ã¼ããåãè¾¼ãã§ããã®é¨åã ãCã³ã³ãã¤ã©ã§ã³ã³ãã¤ã«ãã¦æ¡å¼µã©ã¤ãã©ãªåããå¼ã³åºãããããRubyInlineã®ä»æãã§ãããWindowsã§ãã¾ãåããªãã¨ããOcraã§exeåããã®ããã¾ããããªãã¨ããè²ã
ãã£ãããæè¿ã®ãã¯æ¹åããã¦ãã®ããªã¼ã¨æã£ã¦è©¦ãã¦ã¿ãã
2010å¹´ã«åããã¨ã試ããäººãæ¢ã«ãã¦ã
RubyInlineを使ったRubyのスクリプトをocraで実行ファイルにする(まとめ)
ç¾å¨ãRubyInlineã®Ruby1.9以é対å¿ãOcraã®åä½ä¸è¯ã«ã¤ãã¦ã¯è§£æ¶ããã¦ããããã§ãããã«ããã¦ããæ¹æ³ã®ãã¡ã
ã»èªåã®ã³ã¼ãã§ENVãè¨å®ãã
ã»RubyInlineã®ã¿ã¤ã ã¹ã¿ã³ãå¤å®ä¿®æ£
ã®2ç¹ã ãã§RubyInlineã使ã£ãã³ã¼ããOcraã§exeåã§ããããã ã
ãªããä»å使ããµã³ãã«ã³ã¼ãã¯Ruby1.9.1でRubyInline動かしたã§ä½¿ããã¦ãããã®ããã¡ãã£ã¨éãã®ã§å¦çãæ¸ããã¦ENVæå®ã追å ãããã®ã§ããã
ãµã³ãã«ã³ã¼ã
ENV['INLINEDIR'] = File.dirname(File.expand_path(__FILE__)) def benchmark s = "a" * 1000 test = Test.new t = Time.now 1000.times{test.string_xor(s, s)} Time.now - t end class Test def string_xor(str1, str2) result = str1.clone str1.length.times do |i| result[i] = str2[i] end result end end b1 = benchmark begin require 'inline' class Test inline do |builder| #RSTRING(str1) -> ptr ã RSTRING_PTR(str1) ã«å¤æ´ã len ãã以ä¸åæ§ã builder.c <<-EOF VALUE string_xor(VALUE str1, VALUE str2) { VALUE result = rb_str_new(RSTRING_PTR(str1), RSTRING_LEN(str1)); int i; for (i = 0; i < RSTRING_LEN(str1); i++) { RSTRING_PTR(result)[i] ^= RSTRING_PTR(str2)[i]; } return result; } EOF end end end b2 = benchmark p b1 p b2 p b1/b2
ãã®ã³ã¼ãã®ãã¡ãä¸çªä¸ã«ãããã®ãexeåããã®ã«å¿ è¦ãªãã®ã§ãããexeåããªããªãç¡ãã¦ãåãã
æé
RubyInstallerã§Ruby2.0ãå ¥ãã¦ãDevkitãå ¥ããããã§ãRubyInlineã¨Ocraãgemã§ã¤ã³ã¹ãã¼ã«ããã
gem install RubyInline gem install Ocra
ãC:\Ruby200\lib\ruby\gems\2.0.0\gems\RubyInline-3.12.2\lib\inline.rbãã®532è¡ç®ãä¿®æ£ããã
# unless so_exists and File.mtime(rb_file) < File.mtime(so_name) then unless so_exists and File.mtime(rb_file) <= File.mtime(so_name) then
ããã¯ãexeå®è¡æã«å±éããããã¡ã¤ã«ãåãã¿ã¤ã ã¹ã¿ã³ãã«ãªã£ã¦ããã¨RubyInlineãã³ã³ãã¤ã«ãããã¨ããããã§ãåããªãã³ã³ãã¤ã«ããªãããã«ããä¿®æ£ã§ããããã¡ã¤ã«ã®å±éã¯ãªã¢ã«ãªæéãããããããã²ãã£ã¨ããã¨å±éã¿ã¤ãã³ã°ããµã¤ãºã«ãã£ã¦æéããºã¬ã¦å®è¡æã«ã¨ã©ã¼ãåºããããããªããããã¯å¼·å¶çã«ã³ã³ãã¤ã«ããªããããããªãªãã·ã§ã³ã欲ããã¨ãããããã®ããããããã
ãããã¦ããã¦ã
ocra hoge.rb
ã¨ããã¨ããã®ãã£ã¬ã¯ããªä»¥ä¸ã«.ruby_inlineãã£ã¬ã¯ããªãä½ããã¦ãCã®ã³ã¼ãã¨ã³ã³ãã¤ã«çµæã®soãåºåããããåãè¾¼ãã exeãã¡ã¤ã«ãã§ããããã
ç¨éãªã©
æè¿ã®Rubyã¯éãã®ã§ãç¸å½éãè¨ç®ã大éã«éä¸ãããããªãã¸ãã¯ã§ãªããã°å¿
è¦ãªãããããããã¨ã¯æãã®ã ããç¨éçã«ã¯çµè·¯æ¢ç´¢ã¨ããæå·åã¨ããå§ç¸®ã¨ãï¼Shaderã§ã¯ã§ããªããããªç»åç·¨éãé«éã«ãããSoundEffectã®é³çæãé«éã«ãããDXRubyã®å
鍿§é ä½ãç´æ¥æä½ãã¦é«éãªãã£ã©ç§»åè¨ç®ã¨ããã¾ããæ®éã®ç¨éã§ã¯ãªããããªæ°ããããªãã
ããããCã³ã¼ããåãè¾¼ããã¨ãå¿
è¦ã«ãªãç¶æ³ã¨ãããã®ãããã¾ã©ããããã¨ããã¨ãç¡ããã¨ã¯ç¡ããã ãããã©ãããªããªãç¡ãã ããã
ææ®µã¯ããã«è¶ãããã¨ã¯ãªãããããããããã¨ãã§ãããã¨è¦ãã¦ããç¨åº¦ã§ããã®ãããããªãã