https://redmine.ruby-lang.org/https://redmine.ruby-lang.org/favicon.ico?17113305112010-08-22T07:58:01ZRuby Issue Tracking SystemRuby master - Feature #3731: Easier Embedding API for Rubyhttps://redmine.ruby-lang.org/issues/3731?journal_id=129342010-08-22T07:58:01Zasher (Asher Haig)asher@ridiculouspower.com
<ul></ul><p>What is difficult about this?</p>
<p>Example:</p>
<pre><code class="c syntaxhl" data-language="c"><span class="cp">#include</span> <span class="cpf"><ruby.h></span><span class="cp">
</span>
<span class="kt">int</span> <span class="nf">main</span><span class="p">(</span> <span class="kt">int</span> <span class="n">argc</span> <span class="n">__attribute__</span><span class="p">((</span><span class="n">unused</span><span class="p">)),</span> <span class="kt">char</span> <span class="o">*</span><span class="n">argv</span><span class="p">[]</span> <span class="n">__attribute__</span><span class="p">((</span><span class="n">unused</span><span class="p">))</span> <span class="p">)</span> <span class="p">{</span>
<span class="n">ruby_init</span><span class="p">();</span>
<span class="c1">// Ruby Options are just like /usr/bin/ruby</span>
<span class="c1">// interpreter name, script name, argv ...</span>
<span class="kt">char</span><span class="o">*</span> <span class="n">options</span><span class="p">[]</span> <span class="o">=</span> <span class="p">{</span> <span class="s">""</span><span class="p">,</span> <span class="s">"rpdom_test.rb"</span><span class="p">,</span> <span class="p">};</span>
<span class="kt">void</span><span class="o">*</span> <span class="n">node</span> <span class="o">=</span> <span class="n">ruby_options</span><span class="p">(</span> <span class="mi">2</span><span class="p">,</span> <span class="n">options</span> <span class="p">);</span>
<span class="k">return</span> <span class="n">ruby_run_node</span><span class="p">(</span> <span class="n">node</span> <span class="p">);</span>
<span class="p">}</span>
</code></pre>
<p>Struck me as potentially a documentation issue, but the actual functionality I think is pretty straightforward?</p>
<p>Asher</p> Ruby master - Feature #3731: Easier Embedding API for Rubyhttps://redmine.ruby-lang.org/issues/3731?journal_id=129412010-08-22T17:36:03ZBeoran (Beoran Aegul)beoran@rubyforge.org
<ul></ul><p>Dear Asher,</p>
<p>Well, I certainly agree documentation should be improved for this use case! :)</p>
<p>However, the problem with what you suggest is that it doesn't work more than once.</p>
<p>For example; I get a segmentation violation (crash) with a "You may encounter a bug of Ruby interpreter."<br>
on the second call to ruby_run_node();<br>
if I try this on a ruby1.9.1 p0:</p>
<pre><code class="c syntaxhl" data-language="c"><span class="cp">#include</span> <span class="cpf"><ruby.h></span><span class="cp">
</span>
<span class="n">RUBY_GLOBAL_SETUP</span>
<span class="kt">int</span> <span class="nf">main</span><span class="p">(</span> <span class="kt">int</span> <span class="n">argc</span> <span class="n">__attribute__</span><span class="p">((</span><span class="n">unused</span><span class="p">)),</span> <span class="kt">char</span> <span class="o">*</span><span class="n">argv</span><span class="p">[]</span> <span class="n">__attribute__</span><span class="p">((</span><span class="n">unused</span><span class="p">))</span> <span class="p">)</span> <span class="p">{</span>
<span class="n">RUBY_INIT_STACK</span>
<span class="n">ruby_init</span><span class="p">();</span>
<span class="p">{</span>
<span class="kt">char</span><span class="o">*</span> <span class="n">options</span><span class="p">[]</span> <span class="o">=</span> <span class="p">{</span> <span class="s">""</span><span class="p">,</span> <span class="s">"-e"</span><span class="p">,</span> <span class="s">"puts 'hello'"</span> <span class="p">};</span>
<span class="kt">void</span><span class="o">*</span> <span class="n">node</span> <span class="o">=</span> <span class="n">ruby_options</span><span class="p">(</span> <span class="mi">2</span><span class="p">,</span> <span class="n">options</span> <span class="p">);</span>
<span class="kt">char</span><span class="o">*</span> <span class="n">options2</span><span class="p">[]</span> <span class="o">=</span> <span class="p">{</span> <span class="s">""</span><span class="p">,</span> <span class="s">"-e"</span><span class="p">,</span> <span class="s">"puts 'world'"</span> <span class="p">};</span>
<span class="kt">void</span><span class="o">*</span> <span class="n">node2</span> <span class="o">=</span> <span class="n">ruby_options</span><span class="p">(</span> <span class="mi">2</span><span class="p">,</span> <span class="n">options2</span> <span class="p">);</span>
<span class="n">ruby_run_node</span><span class="p">(</span> <span class="n">node</span> <span class="p">);</span>
<span class="n">ruby_run_node</span><span class="p">(</span> <span class="n">node2</span> <span class="p">);</span>
<span class="p">}</span>
<span class="p">}</span>
</code></pre>
<p>It may be that this bug is fixed in later versions, but I still have to install them to try.</p>
<p>Another problem is that it's a rather unwieldy API. It's nicer if you can run multiple scripts, or call rb_eval_string multiple times.<br>
It's also nice if you can catch syntax errors in the ruby files loaded and handle them on the C side.</p>
<p>Kind Regards,</p>
<p>B.</p> Ruby master - Feature #3731: Easier Embedding API for Rubyhttps://redmine.ruby-lang.org/issues/3731?journal_id=130152010-08-27T12:38:46Zshyouhei (Shyouhei Urabe)shyouhei@ruby-lang.org
<ul><li><strong>Status</strong> changed from <i>Open</i> to <i>Feedback</i></li></ul> Ruby master - Feature #3731: Easier Embedding API for Rubyhttps://redmine.ruby-lang.org/issues/3731?journal_id=247362012-03-18T18:06:47Znahi (Hiroshi Nakamura)nakahiro@gmail.com
<ul><li><strong>Description</strong> updated (<a title="View differences" href="/journals/24736/diff?detail_id=18046">diff</a>)</li><li><strong>Category</strong> set to <i>core</i></li><li><strong>Status</strong> changed from <i>Feedback</i> to <i>Open</i></li><li><strong>Assignee</strong> set to <i>ko1 (Koichi Sasada)</i></li><li><strong>Target version</strong> set to <i>2.0.0</i></li></ul> Ruby master - Feature #3731: Easier Embedding API for Rubyhttps://redmine.ruby-lang.org/issues/3731?journal_id=248722012-03-18T18:46:39Zshyouhei (Shyouhei Urabe)shyouhei@ruby-lang.org
<ul><li><strong>Status</strong> changed from <i>Open</i> to <i>Assigned</i></li></ul> Ruby master - Feature #3731: Easier Embedding API for Rubyhttps://redmine.ruby-lang.org/issues/3731?journal_id=274302012-06-26T04:38:16Zko1 (Koichi Sasada)
<ul></ul><p>I'll write document for embedding Ruby on your application.<br>
At first, in Japanese,<br>
Second, translate in English.<br>
Please revise it after I finished.</p> Ruby master - Feature #3731: Easier Embedding API for Rubyhttps://redmine.ruby-lang.org/issues/3731?journal_id=316512012-10-27T05:48:39Zko1 (Koichi Sasada)
<ul><li><strong>Priority</strong> changed from <i>Normal</i> to <i>5</i></li></ul><p>Ah, sorry for pending.<br>
I need one more body (brain?) of myself.</p> Ruby master - Feature #3731: Easier Embedding API for Rubyhttps://redmine.ruby-lang.org/issues/3731?journal_id=336952012-11-24T09:39:55Zmame (Yusuke Endoh)mame@ruby-lang.org
<ul><li><strong>Target version</strong> changed from <i>2.0.0</i> to <i>2.6</i></li></ul><p>ko1, I think you are not divided yet.</p>
<p>This looks a big feature. I'm setting this to next minor.<br>
Please try it if you have time after you finished other tasks.</p>
<p>--<br>
Yusuke Endoh <a href="mailto:mame@tsg.ne.jp" class="email">mame@tsg.ne.jp</a></p> Ruby master - Feature #3731: Easier Embedding API for Rubyhttps://redmine.ruby-lang.org/issues/3731?journal_id=686562017-12-25T18:14:58Znaruse (Yui NARUSE)naruse@airemix.jp
<ul><li><strong>Target version</strong> deleted (<del><i>2.6</i></del>)</li></ul> Ruby master - Feature #3731: Easier Embedding API for Rubyhttps://redmine.ruby-lang.org/issues/3731?journal_id=1073322024-03-20T00:22:48Zmatheusrich (Matheus Richard)matheusrichardt@gmail.com
<ul></ul><p><a class="user active user-mention" href="https://redmine.ruby-lang.org/users/18">@mame (Yusuke Endoh)</a> <a class="user active user-mention" href="https://redmine.ruby-lang.org/users/17">@ko1 (Koichi Sasada)</a>, is this still needed given that we have mruby?</p>