Ruby Issue Tracking System: Issueshttps://redmine.ruby-lang.org/https://redmine.ruby-lang.org/favicon.ico?17113305112023-03-08T15:24:57ZRuby Issue Tracking System
Redmine Ruby master - Bug #19485 (Closed): Unexpected behavior in squiggly heredocshttps://redmine.ruby-lang.org/issues/194852023-03-08T15:24:57Zjemmai (Jemma Issroff)
<p>Based on <a href="https://ruby-doc.org/3.2.1/syntax/literals_rdoc.html" class="external">the squiggly heredoc documentation</a>, I found the following to be unexpected behavior. Explicitly, the documentation specifies, "The indentation of the least-indented line will be removed from each line of the content."</p>
<p>After running:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="no">File</span><span class="p">.</span><span class="nf">write</span><span class="p">(</span><span class="s2">"test.rb"</span><span class="p">,</span> <span class="s2">"p <<~EOF</span><span class="se">\n\t</span><span class="s2">a</span><span class="se">\n</span><span class="s2"> b</span><span class="se">\n</span><span class="s2">EOF</span><span class="se">\n</span><span class="s2">"</span><span class="p">)</span>
</code></pre>
<p>and then <code>ruby test.rb</code>, I get the following output:</p>
<pre><code>"\ta\nb\n"
</code></pre>
<p>The least-indented line above is <code> b</code>, however, no leading whitespace is removed from the line containing <code>\ta</code>.</p>
<p>For another example:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="no">File</span><span class="p">.</span><span class="nf">write</span><span class="p">(</span><span class="s2">"test.rb"</span><span class="p">,</span> <span class="s2">"p <<~EOF</span><span class="se">\n\t</span><span class="s2">A</span><span class="se">\n</span><span class="s2"> </span><span class="se">\t</span><span class="s2">B</span><span class="se">\n</span><span class="s2">EOF</span><span class="se">\n</span><span class="s2">"</span><span class="p">)</span>
</code></pre>
<p><code>ruby test.rb</code> gives:</p>
<pre><code>"A\nB\n"
</code></pre>
<p>In this case, the <code>\t</code> was removed from the line containing <code>A</code>, but more whitespace than that (<code> \t</code>) was removed from the line containing <code>B</code>.</p>
<p>After seeing the first example, I assumed that the documentation was out of date, and that I should fix it to read that <code>\t</code> would never be converted into space characters in order to remove leading whitespace. But after the second example, it seems like this is a bug in removing leading whitespace.</p>
<p>Can someone please explain what the rules should be on squiggly heredocs? I can implement a fix to adhere to the rules, or can update the documentation, I am just unsure of what the rules should be because the above two examples reflect unexpected behavior in two distinct ways.</p> Ruby master - Bug #19481 (Closed): make: *** No rule to make target 'defs/universal.mk'. Stop.https://redmine.ruby-lang.org/issues/194812023-03-07T08:05:43Zduerst (Martin Dürst)duerst@it.aoyama.ac.jp
<p>When I tried to compile Ruby with <code>make up; make</code>, I got the message in the Subject.<br>
The line before said:<br>
<code>GNUmakefile:30: defs/universal.mk: No such file or directory</code></p>
<p>Below is the start of the output. git seems to correctly download new stuff. But apparently something is missing. I hope this problem can be fixed soon.</p>
<pre><code>duerst@Kloentalersee:~/15ruby$ make up; make
remote: Enumerating objects: 4839, done.
remote: Counting objects: 100% (4839/4839), done.
remote: Compressing objects: 100% (2467/2467), done.
remote: Total 4839 (delta 3132), reused 2965 (delta 2049), pack-reused 0
Receiving objects: 100% (4839/4839), 3.20 MiB | 2.53 MiB/s, done.
Resolving deltas: 100% (3132/3132), completed with 391 local objects.
From git.ruby-lang.org:ruby
cb40432c74..f68580890f master -> origin/master
a4ab9921a1..0602df301c ruby_3_1 -> origin/ruby_3_1
31819e82c8..f93c7b9f58 ruby_3_2 -> origin/ruby_3_2
8f9b896b51..926b22ef5c refs/notes/commits -> refs/notes/commits
Updating cb40432c74..f68580890f
Fast-forward
</code></pre> Ruby master - Bug #19462 (Closed): MJIT not enabled with universal macOS x86_64 + arm64 buildhttps://redmine.ruby-lang.org/issues/194622023-02-23T21:05:11Zbenhamilton (Ben Hamilton)
<p>I'm trying to build a universal macOS x86_64 + arm64 ruby from upstream @ ae9e1aee59b0db1e61aa0473556165f9fd719cde on x86_64 macOS Ventura 13.2, Xcode 14.2, Apple clang version 14.0.0 (clang-1400.0.29.202).</p>
<p>When I run <code>autoconf && ./configure --with-arch=x86_64,arm64</code>, MJIT support is <code>yes</code> and YJIT support is <code>no</code> (I assume YJIT is disabled because I'm building for arm64):</p>
<pre><code>Configuration summary for ruby version 3.3.0
* Installation prefix: /usr/local
* exec prefix: ${prefix}
* arch: universal-darwin22
* site arch: ${arch}
* RUBY_BASE_NAME: ruby
* ruby lib prefix: ${libdir}/${RUBY_BASE_NAME}
* site libraries path: ${rubylibprefix}/${sitearch}
* vendor path: ${rubylibprefix}/vendor_ruby
* target OS: darwin22
* compiler: clang
* with thread: pthread
* with coroutine: universal
* enable shared libs: no
* dynamic library ext: bundle
* CFLAGS: -fdeclspec ${optflags} ${debugflags} ${warnflags}
* LDFLAGS: -L. -fstack-protector-strong
* DLDFLAGS: -Wl,-multiply_defined,suppress
* optflags: -O3 -fno-fast-math
* debugflags: -ggdb3
* warnflags: -Wall -Wextra -Wextra-tokens \
-Wdeprecated-declarations -Wdivision-by-zero \
-Wdiv-by-zero -Wimplicit-function-declaration \
-Wimplicit-int -Wmisleading-indentation \
-Wpointer-arith -Wshorten-64-to-32 \
-Wwrite-strings -Wold-style-definition \
-Wmissing-noreturn -Wno-cast-function-type \
-Wno-constant-logical-operand -Wno-long-long \
-Wno-missing-field-initializers \
-Wno-overlength-strings -Wno-parentheses-equality \
-Wno-self-assign -Wno-tautological-compare \
-Wno-unused-parameter -Wno-unused-value \
-Wunused-variable -Wundef
* strip command: strip -A -n
* install doc: rdoc
* MJIT support: yes
* YJIT support: no
* man page type: doc
* BASERUBY -v: ruby 2.6.10p210 (2022-04-12 revision 67958) \
[universal.x86_64-darwin22]
</code></pre>
<p>However, when I compile with <code>make -j2</code>, I see that it's disabled:</p>
<pre><code>% make -j2
BASERUBY = /usr/bin/ruby --disable=gems
CC = clang
LD = ld
LDSHARED = clang -dynamiclib
CFLAGS = -fdeclspec -O3 -fno-fast-math -ggdb3 -Wall -Wextra -Wextra-tokens -Wdeprecated-declarations -Wdivision-by-zero -Wdiv-by-zero -Wimplicit-function-declaration -Wimplicit-int -Wmisleading-indentation -Wpointer-arith -Wshorten-64-to-32 -Wwrite-strings -Wold-style-definition -Wmissing-noreturn -Wno-cast-function-type -Wno-constant-logical-operand -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-parameter -Wno-unused-value -Wunused-variable -Wundef -pipe -arch x86_64 -arch arm64
XCFLAGS = -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fstack-protector-strong -fno-strict-overflow -fvisibility=hidden -DRUBY_EXPORT -fPIE -I. -I.ext/include/universal-darwin22 -I./include -I. -I./enc/unicode/15.0.0
CPPFLAGS = -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT
DLDFLAGS = -Wl,-multiply_defined,suppress -fstack-protector-strong -Wl,-pie -framework CoreFoundation -arch x86_64 -arch arm64
SOLIBS = -ldl -lobjc -lpthread
LANG = en_US.UTF-8
LC_ALL =
LC_CTYPE =
MFLAGS = - --jobserver-fds=3,4 -j
RUSTC = rustc
YJIT_RUSTC_ARGS = --crate-name=yjit --crate-type=staticlib --edition=2021 -g -C lto=thin -C opt-level=3 -C overflow-checks=on '--out-dir=/Users/benhamilton/Developer/OpenSource/ruby/yjit/target/release/' ./yjit/src/lib.rs
Apple clang version 14.0.0 (clang-1400.0.29.202)
Target: x86_64-apple-darwin22.3.0
Thread model: posix
InstalledDir: /Applications/Xcode_14.2.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin
[snip]
building .ext/include/universal-darwin22/rb_mjit_min_header-3.3.0-x86_64.h
building .ext/include/universal-darwin22/rb_mjit_min_header-3.3.0-arm64.h
This compiler (clang -fdeclspec -g -pipe -arch arm64 -w) looks not supported for MJIT. Giving up to generate MJIT header.
This compiler (clang -fdeclspec -g -pipe -arch x86_64 -w) looks not supported for MJIT. Giving up to generate MJIT header.
</code></pre>
<p>The problem is here:</p>
<ul>
<li><a href="https://github.com/ruby/ruby/blob/1fdaa0666086529b3aae2d509a2e71c4247c3a12/common.mk#L260" class="external">https://github.com/ruby/ruby/blob/1fdaa0666086529b3aae2d509a2e71c4247c3a12/common.mk#L260</a></li>
<li><a href="https://github.com/ruby/ruby/blob/1fdaa0666086529b3aae2d509a2e71c4247c3a12/tool/transform_mjit_header.rb#L24" class="external">https://github.com/ruby/ruby/blob/1fdaa0666086529b3aae2d509a2e71c4247c3a12/tool/transform_mjit_header.rb#L24</a></li>
<li><a href="https://github.com/ruby/ruby/blob/1fdaa0666086529b3aae2d509a2e71c4247c3a12/tool/transform_mjit_header.rb#L174" class="external">https://github.com/ruby/ruby/blob/1fdaa0666086529b3aae2d509a2e71c4247c3a12/tool/transform_mjit_header.rb#L174</a></li>
</ul>
<p>This logic runs <code>vm.c</code> through the C preprocessor and looks through the output for the <code>__clang__</code> preprocessor macro.</p>
<p>However, <code>clang</code>'s C preprocessor only prints macro values with the <code>-dM</code> flag. We can add this flag, but it won't work with the MSVC compiler, so we need to only add it for gcc/clang.</p> Ruby master - Bug #19234 (Closed): [3.2.0dev] YJIT code GC can lead to crasheshttps://redmine.ruby-lang.org/issues/192342022-12-14T10:17:59Zbyroot (Jean Boussier)byroot@ruby-lang.org
<p>Filing this bug here in case some people may have observed it too and may have more information, and also to keep track of it for the upcoming 3.2.0 release.</p>
<p>After changing some settings on our CI to make sure YJIT's <code>code_gc</code> would trigger, we discovered that it sometimes cause crashes.</p>
<p>The crash can take many different form (e.g. <code>[BUG] Segmentation fault at 0x00005604a8e78006</code> or <code>[BUG] Illegal instruction at 0x0000aaaacc0ce4c0</code>), and happens on both <code>x86</code> and <code>arm64</code>.</p>
<p>It however happens very consistently on our CI, but only after running for 15 to 20 minutes and we haven't been able to reduce it to a local reproduction script.</p>
<p>When it happens however the backtrace isn't really helpful:</p>
<pre><code>-- C level backtrace information -------------------------------------------
/usr/local/ruby/bin/real-ruby(rb_print_backtrace+0x11) [0x5604a8a6df7d] vm_dump.c:770
/usr/local/ruby/bin/real-ruby(rb_vm_bugreport) vm_dump.c:1065
/usr/local/ruby/bin/real-ruby(rb_bug_for_fatal_signal+0xee) [0x5604a8ba927e] error.c:813
/usr/local/ruby/bin/real-ruby(sigsegv+0x4d) [0x5604a89c3ded] signal.c:964
/lib/x86_64-linux-gnu/libpthread.so.0(__restore_rt+0x0) [0x7fb5b4285420]
[0x5604acd31079]
</code></pre>
<p>Like regular GC bugs, it is likely that the code GC need to trigger at a very specific place for the bug to happen. Our attempts at triggering it manually with <code>RubyVM::YJIT.code_gc</code> or to set the executable memory very low to trigger it more often didn't allow for a simpler reproduction.</p>
<p>Both <a class="user active user-mention" href="https://redmine.ruby-lang.org/users/10073">@k0kubun (Takashi Kokubun)</a> and <a class="user active user-mention" href="https://redmine.ruby-lang.org/users/16806">@alanwu (Alan Wu)</a> are investigating it right now.</p> Ruby master - Feature #18980 (Closed): Re-reconsider numbered parameters: `it` as a default block...https://redmine.ruby-lang.org/issues/189802022-08-26T10:31:25Zk0kubun (Takashi Kokubun)takashikkbn@gmail.com
<a name="Problem"></a>
<h2 >Problem<a href="#Problem" class="wiki-anchor">¶</a></h2>
<p>Numbered parameters (<code>_1</code>, <code>_2</code>, ...) look like unused local variables and I don't feel motivated to use them, even though I need this feature very often and always come up with <code>_1</code>.</p>
<pre><code class="rb syntaxhl" data-language="rb"><span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">].</span><span class="nf">each</span> <span class="p">{</span> <span class="nb">puts</span> <span class="n">_1</span> <span class="p">}</span>
</code></pre>
<p>I have barely used it in the last 2~3 years because it looks like a compromised syntax. I even hesitate to use it on IRB.</p>
<details>
<summary>Why I don't use <code>_1</code></summary>
<p>I'm not clever enough to remember the order of parameters. Therefore, when a block has multiple parameters, I'd always want to name those parameters because which is <code>_1</code> or <code>_2</code> is not immediately obvious. Thus I would use this feature only when a block takes a single argument, which is actually pretty common.</p>
<p>If I use <code>_1</code>, it feels like there might be a second argument, and you might waste time to think about <code>_2</code>, even if <code>_2</code> doesn't exist, which is a cognitive overhead. If you use <code>it</code>, it kinda implies there's only a single argument, so you don't need to spend time remembering whether <code>_2</code> exists or not. It is important for me that there's no number in <code>it</code>.</p>
</details>
<a name="Proposal"></a>
<h2 >Proposal<a href="#Proposal" class="wiki-anchor">¶</a></h2>
<ul>
<li>Ruby 3.3: Warn <code>it</code> method calls without a receiver, arguments, or a block.</li>
<li>Ruby 3.4: Introduce <code>it</code> as follows.</li>
</ul>
<a name="Specification"></a>
<h3 >Specification<a href="#Specification" class="wiki-anchor">¶</a></h3>
<pre><code class="rb syntaxhl" data-language="rb"><span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">].</span><span class="nf">each</span> <span class="p">{</span> <span class="nb">puts</span> <span class="n">it</span> <span class="p">}</span>
</code></pre>
<p><code>it</code>s behavior should be as close to <code>_1</code> as possible. <code>it</code> should treat array arguments in the same way as <code>_1</code>. <code>it</code> doesn't work in a block when an ordinary parameter is defined. <code>it</code> is implemented as a special case of <code>getlocal</code> insn, not a method. <code>it</code> without an argument is considered <code>_1</code> or a normal local variable if defined. <code>it</code> is considered a method call only when it has any positional/keyword/block arguments.</p>
<details>
<summary>Full specification</summary>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="c1"># Ruby 3.4</span>
<span class="k">def</span> <span class="nf">foo</span>
<span class="n">it</span> <span class="c1">#=> method call</span>
<span class="n">_1</span> <span class="c1">#=> method call</span>
<span class="mi">1</span><span class="p">.</span><span class="nf">times</span> <span class="k">do</span>
<span class="nb">p</span> <span class="n">it</span> <span class="c1">#=> 0</span>
<span class="n">it</span> <span class="o">=</span> <span class="s2">"foo"</span>
<span class="nb">p</span> <span class="n">it</span> <span class="c1">#=> "foo"</span>
<span class="nb">p</span> <span class="n">_1</span> <span class="c1">#=> 0</span>
<span class="n">_1</span> <span class="o">=</span> <span class="s2">"foo"</span> <span class="c1"># Syntax Error</span>
<span class="nb">p</span> <span class="n">_1</span> <span class="c1">#=> N/A</span>
<span class="nb">p</span> <span class="n">foo</span> <span class="c1">#=> method call</span>
<span class="n">foo</span> <span class="o">=</span> <span class="mi">1</span>
<span class="nb">p</span> <span class="n">foo</span> <span class="c1">#=> local var</span>
<span class="n">it</span> <span class="s2">"foo"</span> <span class="k">do</span> <span class="c1"># method call (rspec)</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="mi">1</span><span class="p">.</span><span class="nf">times</span> <span class="k">do</span> <span class="o">||</span>
<span class="nb">p</span> <span class="n">_1</span> <span class="c1"># Syntax Error</span>
<span class="n">it</span> <span class="c1"># method call</span>
<span class="k">end</span>
<span class="mi">1</span><span class="p">.</span><span class="nf">times</span> <span class="k">do</span>
<span class="p">[</span><span class="s2">"Foo"</span><span class="p">].</span><span class="nf">any?</span> <span class="p">{</span><span class="o">||</span> <span class="n">it</span> <span class="p">}</span> <span class="c1"># method call</span>
<span class="k">end</span>
<span class="n">yield_1_and_2</span> <span class="k">do</span> <span class="c1"># yield 1, 2</span>
<span class="nb">p</span> <span class="n">_1</span> <span class="c1">#=> 1</span>
<span class="nb">p</span> <span class="n">it</span> <span class="c1">#=> 1</span>
<span class="k">end</span>
<span class="n">yield_ary</span> <span class="k">do</span> <span class="c1"># yield [1, 2]</span>
<span class="nb">p</span> <span class="n">_1</span> <span class="c1">#=> [1, 2]</span>
<span class="nb">p</span> <span class="n">it</span> <span class="c1">#=> [1, 2]</span>
<span class="k">end</span>
<span class="mi">1</span><span class="p">.</span><span class="nf">times</span> <span class="k">do</span>
<span class="nb">p</span> <span class="p">[</span><span class="n">_1</span><span class="p">,</span> <span class="n">it</span><span class="p">]</span> <span class="c1"># Syntax Error</span>
<span class="nb">p</span> <span class="p">[</span><span class="n">_2</span><span class="p">,</span> <span class="n">it</span><span class="p">]</span> <span class="c1"># Syntax Error</span>
<span class="k">end</span>
<span class="k">end</span>
</code></pre>
</details>
<a name="Past-discussions"></a>
<h2 >Past discussions<a href="#Past-discussions" class="wiki-anchor">¶</a></h2>
<ul>
<li>[Feature <a class="issue tracker-2 status-5 priority-4 priority-default closed" title="Feature: default variable name for parameter (Closed)" href="https://redmine.ruby-lang.org/issues/4475">#4475</a>] default variable name for parameter: Proposed <code>it</code>, and merged as <code>@1</code>.
<ul>
<li>2019/03/13: <a href="https://docs.google.com/document/d/e/2PACX-1vTUCmj7aUdnMAdunG0AZo0AdWK-9jvfXcB7DWYmzGtmPc0IuIPGn7eLARoR5tBd6XUUB08W-hH74k-T/pub" class="external">DevelopersMeeting20190311Japan</a>
</li>
<li>2019/04/17: <a href="https://docs.google.com/document/d/1hw6Xca8arG6b0V63zvWnNEtxIjEjEVzS10KXGhzZpI8/pub" class="external">DevelopersMeeting20190417Japan</a>
</li>
<li>2019/04/20: <a href="https://youtu.be/5eAXAUTtNYU?t=3118" class="external">Ruby Committers vs the World</a>
</li>
</ul>
</li>
<li>[Feature <a class="issue tracker-5 status-7 priority-4 priority-default closed" title="Misc: Reconsider numbered parameters (Feedback)" href="https://redmine.ruby-lang.org/issues/15723">#15723</a>] Reconsider numbered parameters: Renamed <code>@1</code> to <code>_1</code>.
<ul>
<li>2019/08/29: <a href="https://docs.google.com/document/d/1XypDO1crRV9uNg1_ajxkljVdN8Vdyl5hnz462bDQw34/edit?usp=sharing" class="external">DevelopersMeeting20190829Japan</a>
</li>
</ul>
</li>
<li>[Feature <a class="issue tracker-2 status-5 priority-4 priority-default closed" title="Feature: `it` as a default block parameter (Closed)" href="https://redmine.ruby-lang.org/issues/15897">#15897</a>] <code>it</code> as a default block parameter: Proposed <code>it</code>, and got closed because <code>_1</code> was merged.</li>
<li>[Feature <a class="issue tracker-2 status-5 priority-4 priority-default closed" title="Feature: Re-reconsider numbered parameters: `it` as a default block parameter (Closed)" href="https://redmine.ruby-lang.org/issues/18980">#18980</a>] Re-reconsider numbered parameters: (this ticket)
<ul>
<li>2022/09/08: <a href="https://youtu.be/ajm3lr6Y9yE?si=yyWGiZHoUWqZiTaS&t=2920" class="external">Ruby Committers vs the World</a>
</li>
</ul>
</li>
</ul>
<a name="Compatibility"></a>
<h3 >Compatibility<a href="#Compatibility" class="wiki-anchor">¶</a></h3>
<p><code>it</code> has not necessarily been rejected by Matz; he just said <a href="https://bugs.ruby-lang.org/issues/4475#note-6" class="external">it's difficult to keep compatibility</a> and <a href="https://bugs.ruby-lang.org/issues/15723#note-2" class="external"><code>it</code> or <code>this</code> <em>could</em> break existing code</a>. It feels like everybody thinks <code>it</code> is the most beautiful option but is not sure if <code>it</code> breaks compatibility. But, in reality, does <code>it</code>?</p>
<p>The following cases have been discussed:</p>
<ul>
<li>
<code>it</code> method, most famously in RSpec: You almost always pass a positional and/or block argument to RSpec's <code>it</code>, so the conflict is avoided with my proposal. You virtually never use a completely naked <code>it</code> (<a href="https://bugs.ruby-lang.org/issues/15897#note-29" class="external">comment</a>).</li>
<li>
<code>it</code> local variable: With the specification in my proposal, the existing code can continue to work if we consider <code>it</code> as a local variable when defined.</li>
</ul>
<p>With the specification in my proposal, existing code seems to break if and only if you call a method <code>#it</code> without an argument. But it seems pretty rare (reminder: a block given to an RSpec test case is also an argument). It almost feels like people are too afraid of compatibility problems that barely exist or have not really thought about options to address them.</p>
<p>Also, you could always experiment with just showing warnings, which doesn't break any compatibility. Even if it takes 2~3 years of a warning period, I'd be happy to use that in 3 years.</p>
<a name="Confusion"></a>
<h3 >Confusion<a href="#Confusion" class="wiki-anchor">¶</a></h3>
<p>We should separately discuss incompatible cases and "works but confusing" cases. Potential confusion points:</p>
<ul>
<li>RSpec's <code>it "tests something" do ... end</code> vs <code>it</code> inside the <code>do ... end</code>
</li>
<li>
<code>it</code> could be a local variable or <code>_1</code>, depending on the situation</li>
</ul>
<p>My two cents: You'd rarely need to write <code>it</code> directly under RSpec's <code>it</code> block, and you would just name a block argument for that case. In a nested block under a test case, I don't think you'd feel <code>it</code> is RSpec's. When you use a local variable <code>it = 1</code>, you'd use the local variable in a very small scope or few lines because otherwise, it'd be very hard to figure out what the local variable has anyway. So you'd likely see the assignment <code>it = 1</code> near the use of the local variable and you could easily notice <code>it</code> is not <code>_1</code>. If not, such code would be confusing and fragile even without this feature. The same applies when <code>it</code> is a method/block argument.</p>
<p>I believe it wouldn't be as confusing as some people think, and you can always choose to not use <code>it</code> in places where <code>it</code> is confusing.</p> Ruby master - Bug #18808 (Closed): Cannot compile ruby 3.1.2 on powerpc64le-linux without disabli...https://redmine.ruby-lang.org/issues/188082022-05-26T14:52:54Znpn (John Davis)
<p>The system I am trying to compile on is a ppc64el system running RedHat 7 (3.10.0-1160.62.1.el7.ppc64le). I can successfully compile on a x86_64 system running the same version RedHat 7 (3.10.0-1160.62.1.el7.x86_64)</p>
<p>When I configure with the following, make completes fine, but if I remove the <code>--disable-jit-support</code> it fails with the following error.</p>
<pre><code> ./configure --enable-shared --enable-load-relative --disable-install-doc --prefix=$RUBY_PREFIX --exec-prefix=$RUBY_PREFIX/rh_ppc --disable-jit-support
building rb_mjit_header.h
rb_mjit_header.h updated
building .ext/include/powerpc64le-linux/rb_mjit_min_header-3.1.2.h
error in final header file:
In file included from /tmp/20220525-12786-q2ndz2.c:1:0:
/tmp/20220525-12786-vf3xbh.h:16627:1: error: multiple storage classes in declaration specifiers
__attribute__ ((__visibility__("default"))) extern
^
compilation terminated due to -Wfatal-errors.
make: *** [.ext/include/powerpc64le-linux/rb_mjit_min_header-3.1.2.h] Error 1
</code></pre> Ruby master - Bug #18277 (Closed): buffer error (Zlib::BufError) in Zlib::Deflate#deflate when us...https://redmine.ruby-lang.org/issues/182772021-10-30T13:25:30ZEregon (Benoit Daloze)
<p>To repro:</p>
<pre><code>$ git clone https://github.com/Shopify/yjit-bench.git
$ cd yjit-bench
$ ruby --jit -I./harness benchmarks/hexapdf/benchmark.rb
...
Bundle complete! 1 Gemfile dependency, 4 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.
/home/eregon/prefix/ruby-master/lib/ruby/gems/3.1.0/gems/hexapdf-0.16.0/lib/hexapdf/filter/flate_decode.rb:94:in `deflate': buffer error (Zlib::BufError)
from /home/eregon/prefix/ruby-master/lib/ruby/gems/3.1.0/gems/hexapdf-0.16.0/lib/hexapdf/filter/flate_decode.rb:94:in `block in encoder'
</code></pre>
<p>This fails every time with MJIT, and it does not fail without MJIT or with YJIT (on ruby master @ cda8bc3657).</p>
<p>It fails on master MJIT: <code>ruby 3.1.0dev (2021-10-23T04:38:40Z master cda8bc3657) +JIT [x86_64-linux]</code></p>
<p>It works with 3.0.2 MJIT: <code>ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) +JIT [x86_64-linux]</code>.</p> Ruby master - Feature #18229 (Closed): Proposal to merge YJIThttps://redmine.ruby-lang.org/issues/182292021-09-27T19:12:32Zmaximecb (Maxime Chevalier-Boisvert)maxime.chevalierboisvert@shopify.com
<a name="Background"></a>
<h1 >Background<a href="#Background" class="wiki-anchor">¶</a></h1>
<p>YJIT is a new open source JIT compiler for CRuby. The project is led by a small team at Shopify in collaboration with developers from GitHub. The key advantages of this project are that the compiler delivers very fast warm-up and has fine grain control over the entire compiler pipeline.</p>
<p>This JIT translates YARV instructions to machine code and employs a technique known as <a href="https://drops.dagstuhl.de/opus/volltexte/2015/5219/pdf/9.pdf" class="external">Lazy Basic Block Versioning (LBBV)</a> in order to specialize code based on types seen at run-time and reduce generated code size without needing to do static type analysis. The YJIT project was <a href="https://www.youtube.com/watch?v=PBVLf3yfMs8" class="external">presented at RubyKaigi 2021</a>.</p>
<a name="Limitations"></a>
<h1 >Limitations<a href="#Limitations" class="wiki-anchor">¶</a></h1>
<p>YJIT works by translating YARV instructions to x86 machine code. YJIT doesn’t support all YARV instructions, but is able to gracefully handle unknown instructions by returning control of execution back to the CRuby interpreter.</p>
<p>Today, YJIT only targets x86-64 architecture. We may support ARM64 in the future, but due to the nature of the compiler design, we can’t easily support as many platforms as MJIT. Still, we anticipate that x86-64 and ARM64 will cover the needs of the vast majority of users, from PCs to servers to Apple M1s to cell phones and even Raspberry Pis.</p>
<a name="Advantages"></a>
<h1 >Advantages<a href="#Advantages" class="wiki-anchor">¶</a></h1>
<p>YJIT has very fast warmup and can produce good real-world benchmark results when compared to other JITs. There are still many options for improving performance further.</p>
<a name="Integration-with-MRI"></a>
<h1 >Integration with MRI<a href="#Integration-with-MRI" class="wiki-anchor">¶</a></h1>
<p>YJIT can’t work fully as a “plug-in” JIT. It requires some modifications to CRuby, mostly related to compilation and invalidation. For example, YJIT needs callbacks so it can be notified when the constant state changes or when BOPs are redefined. These modifications are quite modest and could be advantageous for MJIT or other JITs in the future. YJIT’s implementation is contained in the yjit_*.c files with very few modifications to CRuby.</p>
<a name="Benchmarks"></a>
<h1 >Benchmarks<a href="#Benchmarks" class="wiki-anchor">¶</a></h1>
<p>YJIT optimizes a number of common benchmarks well. Here are some results compared to the CRuby interpreter without MJIT, <a href="https://speed.yjit.org/benchmarks/bench-2021-09-27-071059" class="external">current as of Sept 2021</a>:</p>
<p>activerecord: 1.37x<br>
jekyll: 1.12x<br>
liquid-render: 1.27x<br>
mail gem: 1.09x<br>
psych-load: 1.29x<br>
Kokubun's railsbench: 1.16x<br>
optcarrot: 1.68x<br>
Chris Seaton's lee benchmark: 1.41x</p>
<p>Source code for these benchmarks can be found at <a href="https://github.com/Shopify/yjit-bench" class="external">https://github.com/Shopify/yjit-bench</a> under "benchmarks".</p>
<a name="TODO-Known-Bugs"></a>
<h1 >TODO / Known Bugs<a href="#TODO-Known-Bugs" class="wiki-anchor">¶</a></h1>
<p>We have been running YJIT in production, but it is still experimental. Some key features are currently missing, the most important being “code GC”. Currently, any generated code that is invalidated (or becomes “unusable”) is not collected, nor is the memory allocated for that code reclaimed. This is rarely a problem in practice because most Ruby programs generate a fixed amount of code, but it is a problem that we want to fix in the short to medium term. This is an area which is currently under development.</p>
<a name="Stability-and-Compatibility"></a>
<h1 >Stability and Compatibility<a href="#Stability-and-Compatibility" class="wiki-anchor">¶</a></h1>
<p>MRI’s full suite of tests including RubySpec tests pass with YJIT enabled. We’ve tested YJIT against our production application (Shopify’s StoreFront Renderer) and all tests pass there as well. Finally, GitHub has tested YJIT against their test suite and all tests pass. We’ve deployed YJIT to production on a subset of servers and seen performance improvements. See more details here.</p>
<a name="Merging-Proposal"></a>
<h1 >Merging Proposal<a href="#Merging-Proposal" class="wiki-anchor">¶</a></h1>
<p>Despite some of the limitations and TODO’s listed here, we would like to propose merging YJIT so that we can get feedback from the rest of the community as well as add “integration points” for other JIT implementations.</p>
<p>We’ve intentionally made as few changes to MRI as possible to support integrating YJIT. We’re committed to continue developing YJIT, but intentionally kept the changes to MRI small in order to ease the burden on upstream maintainers.</p>
<p>YJIT will be disabled by default and require an experimental command-line flag (<code>--yjit</code>) to be set.</p> Ruby master - Bug #18142 (Closed): Segmentation fault with Ruby 3.0.2https://redmine.ruby-lang.org/issues/181422021-09-02T00:07:05Zhsbt (Hiroshi SHIBATA)hsbt@ruby-lang.org
<p>This may be similar with <a href="https://bugs.ruby-lang.org/issues/17584" class="external">https://bugs.ruby-lang.org/issues/17584</a></p>
<p>I got the following error with Ruby 3.0.2+jit and fcgid gem, tDiary-5.1.6.</p>
<pre><code>[BUG] Segmentation fault at 0x0000000000000027
ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [x86_64-linux]
-- Machine register context ------------------------------------------------
RIP: 0x00007f2f63217468 RBP: 0x0000561b53017178 RSP: 0x00007f2f5f444d40
RAX: 0x0000000000000027 RBX: 0x0000000000000000 RCX: 0x0000000000000000
RDX: 0x0000561b53083b20 RDI: 0x0003aaa100140005 RSI: 0x0000561b519c2fa8
R8: 0x0000000000000001 R9: 0x000000000000007c R10: 0x00007f2f580008d0
R11: 0x00007f2f58000080 R12: 0x00007f2f63393e00 R13: 0x0000000000000001
R14: 0x0000000000000028 R15: 0x000000000000009a EFL: 0x0000000000010246
-- C level backtrace information -------------------------------------------
/home/hsbt/.rbenv/versions/3.0.2/lib/libruby.so.3.0(rb_print_backtrace+0x11) [0x7f2f63375d73] vm_dump.c:758
/home/hsbt/.rbenv/versions/3.0.2/lib/libruby.so.3.0(rb_vm_bugreport) vm_dump.c:998
/home/hsbt/.rbenv/versions/3.0.2/lib/libruby.so.3.0(rb_bug_for_fatal_signal+0xf4) [0x7f2f63180e04] error.c:786
/home/hsbt/.rbenv/versions/3.0.2/lib/libruby.so.3.0(sigsegv+0x4d) [0x7f2f632ccc4d] signal.c:960
/lib/x86_64-linux-gnu/libc.so.6(0x7f2f62efe210) [0x7f2f62efe210]
/home/hsbt/.rbenv/versions/3.0.2/lib/libruby.so.3.0(rb_mjit_inlinable_iseq+0x38) [0x7f2f63217468] mjit_compile.c:451
/home/hsbt/.rbenv/versions/3.0.2/lib/libruby.so.3.0(set_compiling_iseqs+0x64) [0x7f2f631effae] mjit_worker.c:758
/home/hsbt/.rbenv/versions/3.0.2/lib/libruby.so.3.0(set_compiling_iseqs) mjit_worker.c:739
/home/hsbt/.rbenv/versions/3.0.2/lib/libruby.so.3.0(convert_unit_to_func+0x6c5) [0x7f2f631f2b35] mjit_worker.c:1199
/home/hsbt/.rbenv/versions/3.0.2/lib/libruby.so.3.0(CRITICAL_SECTION_START+0x0) [0x7f2f631f3469] mjit_worker.c:1488
/home/hsbt/.rbenv/versions/3.0.2/lib/libruby.so.3.0(mjit_worker) mjit_worker.c:1491
/home/hsbt/.rbenv/versions/3.0.2/lib/libruby.so.3.0(mjit_worker+0x1e) [0x7f2f6330d78e] thread_pthread.c:1942
/lib/x86_64-linux-gnu/libpthread.so.0(start_thread+0xd9) [0x7f2f62e82609]
/lib/x86_64-linux-gnu/libc.so.6(clone+0x43) [0x7f2f62fda293]
</code></pre>
<p>Full of log is here: <a href="https://gist.github.com/hsbt/5a3ce854820f8ab726a7d017dda2e7dd" class="external">https://gist.github.com/hsbt/5a3ce854820f8ab726a7d017dda2e7dd</a></p> Ruby master - Bug #18058 (Closed): 3.1.0-dev with MJIT enabled Zlib::BufError during `gem install`https://redmine.ruby-lang.org/issues/180582021-08-02T11:45:11Zbyroot (Jean Boussier)byroot@ruby-lang.org
<p>It doesn't always happen (maybe 5-10% of the cases), but since I added MJIT to our CI builds I've been seeing this error a lot.</p>
<p>I was able to reproduce it in <code>docker run -it rubylang/ruby:master-nightly-bionic</code> after 15 or so tries:</p>
<pre><code># ruby -v
ruby 3.1.0dev (2021-08-01T00:54:36Z master 605421f4eb) [x86_64-linux]
# gem uninstall bundler -v 2.2.21; env RUBYOPT="--enable-jit --jit-max-cache=10000 --jit-min-calls=10 $RUBYOPT" gem install --no-document --user-install bundler -v 2.2.21
Successfully uninstalled bundler-2.2.21
WARNING: You don't have /root/.local/share/gem/ruby/3.1.0/bin in your PATH,
gem executables will not run.
Exception while verifying /usr/local/lib/ruby/gems/3.1.0/cache/bundler-2.2.21.gem
ERROR: While executing gem ... (Zlib::BufError)
buffer error
</code></pre>
<p>e.g.</p>
<pre><code>$ docker run -it rubylang/ruby:master-nightly-bionic bash -c 'while env RUBYOPT="--enable-jit --jit-max-cache=10000 --jit-min-calls=10 $RUBYOPT" gem install --no-document --user-install bundler -v 2.2.21; do gem uninstall bundler -v 2.2.21; done'
Fetching bundler-2.2.21.gem
WARNING: You don't have /root/.local/share/gem/ruby/3.1.0/bin in your PATH,
gem executables will not run.
Successfully installed bundler-2.2.21
1 gem installed
Successfully uninstalled bundler-2.2.21
WARNING: You don't have /root/.local/share/gem/ruby/3.1.0/bin in your PATH,
gem executables will not run.
Successfully installed bundler-2.2.21
1 gem installed
Successfully uninstalled bundler-2.2.21
WARNING: You don't have /root/.local/share/gem/ruby/3.1.0/bin in your PATH,
gem executables will not run.
Successfully installed bundler-2.2.21
1 gem installed
Successfully uninstalled bundler-2.2.21
WARNING: You don't have /root/.local/share/gem/ruby/3.1.0/bin in your PATH,
gem executables will not run.
Successfully installed bundler-2.2.21
1 gem installed
Successfully uninstalled bundler-2.2.21
WARNING: You don't have /root/.local/share/gem/ruby/3.1.0/bin in your PATH,
gem executables will not run.
Successfully installed bundler-2.2.21
1 gem installed
Successfully uninstalled bundler-2.2.21
WARNING: You don't have /root/.local/share/gem/ruby/3.1.0/bin in your PATH,
gem executables will not run.
Successfully installed bundler-2.2.21
1 gem installed
Successfully uninstalled bundler-2.2.21
WARNING: You don't have /root/.local/share/gem/ruby/3.1.0/bin in your PATH,
gem executables will not run.
Successfully installed bundler-2.2.21
1 gem installed
Successfully uninstalled bundler-2.2.21
WARNING: You don't have /root/.local/share/gem/ruby/3.1.0/bin in your PATH,
gem executables will not run.
Successfully installed bundler-2.2.21
1 gem installed
Successfully uninstalled bundler-2.2.21
WARNING: You don't have /root/.local/share/gem/ruby/3.1.0/bin in your PATH,
gem executables will not run.
Successfully installed bundler-2.2.21
1 gem installed
Successfully uninstalled bundler-2.2.21
WARNING: You don't have /root/.local/share/gem/ruby/3.1.0/bin in your PATH,
gem executables will not run.
Exception while verifying /usr/local/lib/ruby/gems/3.1.0/cache/bundler-2.2.21.gem
ERROR: While executing gem ... (Zlib::BufError)
buffer error
</code></pre> Ruby master - Bug #17995 (Closed): Slow down when mjit and Ractor are being used at same timehttps://redmine.ruby-lang.org/issues/179952021-06-17T03:28:47Znekoyama32767 (Jinsong Yu)
<p>When using --jit and Ractor at same time, benchmark would be slow down with recursion function such like Tarai function an Fibonacci function.<br>
The slow down is confirmed under both gcc(linux) and mingw64(windows MSYS2).</p>
<p>Test environment:<br>
Cpu:Ryzen9 <a href="mailto:5900HS@3.3Ghz" class="email">5900HS@3.3Ghz</a> 8core/16thread<br>
Memory:32GB@3200Mhz<br>
OS:Ubuntu 21.04/Windows 10</p>
<p>Because of this cpu has 8 physic core,the parallel thread number is set to 8</p>
<p>Slow down is also confirmed with using only ractor (without sequence running).</p>
<p>When runing 'par' before 'seq' and using --mjit,'seq' is more slower than runing 'seq' berfore 'par'</p>
<p>Tarai function</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">def</span> <span class="nf">tarai</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">z</span><span class="p">)</span> <span class="o">=</span>
<span class="n">x</span> <span class="o"><=</span> <span class="n">y</span> <span class="p">?</span> <span class="n">y</span> <span class="p">:</span> <span class="n">tarai</span><span class="p">(</span><span class="n">tarai</span><span class="p">(</span><span class="n">x</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">z</span><span class="p">),</span>
<span class="n">tarai</span><span class="p">(</span><span class="n">y</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="n">z</span><span class="p">,</span> <span class="n">x</span><span class="p">),</span>
<span class="n">tarai</span><span class="p">(</span><span class="n">z</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">))</span>
<span class="nb">require</span> <span class="s1">'benchmark'</span>
<span class="no">Benchmark</span><span class="p">.</span><span class="nf">bm</span> <span class="k">do</span> <span class="o">|</span><span class="n">x</span><span class="o">|</span>
<span class="c1"># sequential version</span>
<span class="n">x</span><span class="p">.</span><span class="nf">report</span><span class="p">(</span><span class="s1">'seq'</span><span class="p">){</span> <span class="mi">8</span><span class="p">.</span><span class="nf">times</span><span class="p">{</span> <span class="n">tarai</span><span class="p">(</span><span class="mi">14</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="p">}</span> <span class="p">}</span>
<span class="c1"># parallel version</span>
<span class="n">x</span><span class="p">.</span><span class="nf">report</span><span class="p">(</span><span class="s1">'par'</span><span class="p">){</span>
<span class="mi">8</span><span class="p">.</span><span class="nf">times</span><span class="p">.</span><span class="nf">map</span> <span class="k">do</span>
<span class="no">Ractor</span><span class="p">.</span><span class="nf">new</span> <span class="p">{</span> <span class="n">tarai</span><span class="p">(</span><span class="mi">14</span><span class="p">,</span> <span class="mi">7</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="p">}</span>
<span class="k">end</span><span class="p">.</span><span class="nf">each</span><span class="p">(</span><span class="o">&</span><span class="ss">:take</span><span class="p">)</span>
<span class="p">}</span>
<span class="k">end</span>
</code></pre>
<p>Fibonacci function</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">def</span> <span class="nf">fib</span><span class="p">(</span><span class="n">n</span><span class="p">)</span>
<span class="k">if</span> <span class="n">n</span><span class="o">==</span><span class="mi">1</span> <span class="k">then</span> <span class="k">return</span> <span class="mi">1</span> <span class="k">end</span>
<span class="k">if</span> <span class="n">n</span><span class="o">==</span><span class="mi">2</span> <span class="k">then</span> <span class="k">return</span> <span class="mi">1</span> <span class="k">end</span>
<span class="n">fib</span><span class="p">(</span><span class="n">n</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span><span class="o">+</span><span class="n">fib</span><span class="p">(</span><span class="n">n</span><span class="o">-</span><span class="mi">2</span><span class="p">)</span>
<span class="k">end</span>
<span class="nb">require</span> <span class="s1">'benchmark'</span>
<span class="no">Benchmark</span><span class="p">.</span><span class="nf">bm</span> <span class="k">do</span> <span class="o">|</span><span class="n">x</span><span class="o">|</span>
<span class="c1"># sequential version</span>
<span class="n">x</span><span class="p">.</span><span class="nf">report</span><span class="p">(</span><span class="s1">'fib:seq'</span><span class="p">){</span> <span class="mi">8</span><span class="p">.</span><span class="nf">times</span><span class="p">{</span> <span class="n">fib</span><span class="p">(</span><span class="mi">40</span><span class="p">)</span> <span class="p">}</span> <span class="p">}</span>
<span class="c1"># parallel version</span>
<span class="n">x</span><span class="p">.</span><span class="nf">report</span><span class="p">(</span><span class="s1">'fib:par '</span><span class="p">){</span>
<span class="mi">8</span><span class="p">.</span><span class="nf">times</span><span class="p">.</span><span class="nf">map</span> <span class="k">do</span>
<span class="no">Ractor</span><span class="p">.</span><span class="nf">new</span> <span class="p">{</span><span class="n">fib</span><span class="p">(</span><span class="mi">40</span><span class="p">)</span> <span class="p">}</span>
<span class="k">end</span><span class="p">.</span><span class="nf">each</span><span class="p">(</span><span class="o">&</span><span class="ss">:take</span><span class="p">)</span>
<span class="p">}</span>
<span class="k">end</span>
</code></pre> Ruby master - Bug #17836 (Closed): JIT fails to create a precompiled header with Clanghttps://redmine.ruby-lang.org/issues/178362021-04-27T23:33:40Zxtkoba (Tee KOBAYASHI)
<p>A log message:</p>
<pre><code>Creating precompiled header
Starting process: /usr/lib/llvm/12/bin/clang /usr/lib/llvm/12/bin/clang --target=x86_64-pc-linux-gnu -w -funwind-tables -fdeclspec -Wfatal-errors -fPIC -shared -w -pipe -Oz -fno-fast-math -emit-pch -o /tmp/_ruby_mjit_hp16974u0.h.gch /var/tmp/ruby/xxx/include/ruby-3.1.0/x86_64-linux/rb_mjit_min_header-3.1.0.h
clang-12: fatal error: cannot specify -o when generating multiple output files
</code></pre>
<p>According to <a href="https://lists.boost.org/boost-users/2017/01/87080.php" class="external">https://lists.boost.org/boost-users/2017/01/87080.php</a>, the <code>-c</code> option is (sometimes) needed to emit PCH with Clang. A patch is attached for that.</p> Ruby master - Bug #17584 (Closed): Segmentation fault with Ruby 3.0https://redmine.ruby-lang.org/issues/175842021-01-26T12:10:19Zhsbt (Hiroshi SHIBATA)hsbt@ruby-lang.org
<p>In last week, I update Ruby 3.0 from Ruby 2.6.6 for my application. After that, I got the segmentation fault with following error.</p>
<pre><code>[BUG] Segmentation fault at 0x0000000000000046
ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [x86_64-linux]
-- Machine register context ------------------------------------------------
RIP: 0x00007fddf4e032f7 RBP: 0x00007fddf10314e0 RSP: 0x00007fddf10313b0
RAX: 0x0000000000000036 RBX: 0x0000000000000032 RCX: 0x0000000000000000
RDX: 0x0000000000000001 RDI: 0x00007fddf1031cc0 RSI: 0x00007fddf4f47250
R8: 0x0000000000000001 R9: 0x0000556a5d1fe6f0 R10: 0x0000556a5b9daf38
R11: 0x0000556a5cba899a R12: 0x0000556a5d1fe6f0 R13: 0x0000000000000028
R14: 0x0000000000000028 R15: 0x00007fddf4f846d4 EFL: 0x0000000000010246
-- C level backtrace information -------------------------------------------
/home/hsbt/.rbenv/versions/3.0.0/lib/libruby.so.3.0(rb_print_backtrace+0x11) [0x7fddf4f61773] vm_dump.c:758
/home/hsbt/.rbenv/versions/3.0.0/lib/libruby.so.3.0(rb_vm_bugreport) vm_dump.c:998
/home/hsbt/.rbenv/versions/3.0.0/lib/libruby.so.3.0(rb_bug_for_fatal_signal+0x162) [0x7fddf4d6dc72] error.c:786
/home/hsbt/.rbenv/versions/3.0.0/lib/libruby.so.3.0(sigsegv+0x4d) [0x7fddf4eb893d] signal.c:960
/lib/x86_64-linux-gnu/libc.so.6(0x7fddf4aeb210) [0x7fddf4aeb210]
/home/hsbt/.rbenv/versions/3.0.0/lib/libruby.so.3.0(precompile_inlinable_iseqs+0x127) [0x7fddf4e032f7] mjit_compile.c:525
/home/hsbt/.rbenv/versions/3.0.0/lib/libruby.so.3.0(mjit_compile+0x36e) [0x7fddf4e03dae] mjit_compile.c:581
/home/hsbt/.rbenv/versions/3.0.0/lib/libruby.so.3.0(CRITICAL_SECTION_START+0x0) [0x7fddf4dde6a2] mjit_worker.c:1163
/home/hsbt/.rbenv/versions/3.0.0/lib/libruby.so.3.0(convert_unit_to_func) mjit_worker.c:1166
/home/hsbt/.rbenv/versions/3.0.0/lib/libruby.so.3.0(CRITICAL_SECTION_START+0x0) [0x7fddf4ddf0f9] mjit_worker.c:1426
/home/hsbt/.rbenv/versions/3.0.0/lib/libruby.so.3.0(mjit_worker) mjit_worker.c:1429
/home/hsbt/.rbenv/versions/3.0.0/lib/libruby.so.3.0(mjit_worker+0x1e) [0x7fddf4ef944e] thread_pthread.c:1941
/lib/x86_64-linux-gnu/libpthread.so.0(start_thread+0xd9) [0x7fddf4a6f609]
/lib/x86_64-linux-gnu/libc.so.6(clone+0x43) [0x7fddf4bc7293]
</code></pre>
<p>Full of log is here: <a href="https://gist.github.com/hsbt/05690e5c6915efdee47c623a3b829c5a" class="external">https://gist.github.com/hsbt/05690e5c6915efdee47c623a3b829c5a</a></p> Ruby master - Bug #17008 (Feedback): JIT enabled on Windows can cause constant conhost pop-upshttps://redmine.ruby-lang.org/issues/170082020-07-03T19:46:36ZAWiederin (Aubrey Wiederin)
<p>I'm unsure of the min requirements for it to happen, but at least for ruby embedded in a gui mingw32 application, enabling JIT causes a conhost.exe popup for every gcc call, repeatedly stealing focus.<br>
The easy fix is to add the CREATE_NO_WINDOW flag to CreateChild calls in win32.c, line 1326 in particular.</p>
<p>(Only somewhat related: It'd probably help performance if a single conhost could be shared among gcc calls, instead of letting Windows make a new one for each.)</p> Ruby master - Misc #16956 (Closed): Attributes for MJIT's optimizationhttps://redmine.ruby-lang.org/issues/169562020-06-12T09:55:49Zk0kubun (Takashi Kokubun)takashikkbn@gmail.com
<a name="Whats-this-ticket"></a>
<h1 >What's this ticket?<a href="#Whats-this-ticket" class="wiki-anchor">¶</a></h1>
<p>A text explaining what attributes MJIT uses for optimizations and why they're needed.<br>
This is written here in case people want to comment on this in a way that can notify me.</p>
<a name="Current-state"></a>
<h1 >Current state<a href="#Current-state" class="wiki-anchor">¶</a></h1>
<a name="The-per-insn-attribute-we-currently-have-and-MJIT-uses"></a>
<h2 >The per-insn attribute we currently have and MJIT uses<a href="#The-per-insn-attribute-we-currently-have-and-MJIT-uses" class="wiki-anchor">¶</a></h2>
<pre><code>* leaf: indicates that the instruction is "leaf" i.e. it does
not introduce new stack frame on top of it.
If an instruction handles sp, that can never be a leaf.
</code></pre>
<a name="MJITs-optimizations-which-rely-on-leaf"></a>
<h2 >MJIT's optimizations which rely on leaf<a href="#MJITs-optimizations-which-rely-on-leaf" class="wiki-anchor">¶</a></h2>
<ul>
<li>PC motion skip
<ul>
<li>If leaf, an insn doesn't see cfp->pc because an exception is not thrown and an arbitrary method which may see lineno isn't called. This place also checks catch_except_p=false to make sure catch table of this iseq is not used.</li>
<li><a href="https://github.com/ruby/ruby/blob/daea41c3df0d63eda553c92c0ca29eaceb6d5828/tool/ruby_vm/views/_mjit_compile_pc_and_sp.erb#L10-L13" class="external">https://github.com/ruby/ruby/blob/daea41c3df0d63eda553c92c0ca29eaceb6d5828/tool/ruby_vm/views/_mjit_compile_pc_and_sp.erb#L10-L13</a></li>
</ul>
</li>
<li>Deoptimization check skip
<ul>
<li>If leaf, an arbitrary method which may invalidate (i.e. TracePoint or GC.compact) the current code may not be called.</li>
<li><a href="https://github.com/ruby/ruby/blob/daea41c3df0d63eda553c92c0ca29eaceb6d5828/tool/ruby_vm/views/_mjit_compile_insn.erb#L61-L71" class="external">https://github.com/ruby/ruby/blob/daea41c3df0d63eda553c92c0ca29eaceb6d5828/tool/ruby_vm/views/_mjit_compile_insn.erb#L61-L71</a></li>
</ul>
</li>
<li>Frame push omission on method inlining
<ul>
<li>If leaf, any cfp won't be pushed to the stack. Thus pushing a cfp (which could be a base of what'd be pushed if it were not leaf) for an all-leaf inlined method can be skipped. Also we need the same guarantee as "PC motion skip" because cfp->pc (and even existence of a frame, when it's about callstack) won't be maintained at all.</li>
<li><a href="https://github.com/ruby/ruby/blob/daea41c3df0d63eda553c92c0ca29eaceb6d5828/mjit_compile.c#L377-L378" class="external">https://github.com/ruby/ruby/blob/daea41c3df0d63eda553c92c0ca29eaceb6d5828/mjit_compile.c#L377-L378</a></li>
</ul>
</li>
</ul>
<a name="Fine-grained-speculations"></a>
<h2 >Fine-grained speculations<a href="#Fine-grained-speculations" class="wiki-anchor">¶</a></h2>
<ul>
<li>(1) leaf: A cfp may not be pushed to the stack</li>
<li>(2) An arbitrary method may not be called
<ul>
<li>Obviously this is guaranteed by (1).</li>
</ul>
</li>
<li>(3) An exception may not be thrown
<ul>
<li>MJIT assumes this from (2). This is legitimate because rb_raise calls rb_exc_new3 => rb_class_new_instance => rb_obj_call_init_kw => rb_funcallv_kw.</li>
</ul>
</li>
<li>(4) <code>mjit_call_p = false</code> may not be set
<ul>
<li>a.k.a. JIT cancel-all. It's set by TracePoint and GC.compact. Therefore assuming it from (2) should be fair.</li>
</ul>
</li>
<li>(5) cfp->pc may not be read
<ul>
<li>Aside from insn dispatch and catch table, cfp->pc is only read by a C method showing lineno of a callstack or calling C API like <code>rb_profile_frames</code>. If this assumption is true, we can assume this from (2).</li>
</ul>
</li>
</ul>
<a name="leaf-vs-attr-inline"></a>
<h3 >leaf vs attr inline<a href="#leaf-vs-attr-inline" class="wiki-anchor">¶</a></h3>
<p>We introduced <code>Primitive.attr!</code> at <a href="https://github.com/ruby/ruby/pull/3244" class="external">https://github.com/ruby/ruby/pull/3244</a>. Why isn't it called <code>leaf</code>? This is because:</p>
<ul>
<li>For "frame push omission on method inlining", MJIT currently depends on (1), (2), (3), and (5).</li>
<li>As said above, (2) and (3) can be assumed from (1). However, assuming (5) from (1) in arbitrary builtin C functions is questionable, unlike VM insns.</li>
<li>Thus <code>Primitive.attr!</code> declares it satisfies (1) and (5). But we've implemented verification only for (1) (see: <a href="https://github.com/ruby/ruby/pull/3244" class="external">https://github.com/ruby/ruby/pull/3244</a>).</li>
</ul>
<a name="Discussions"></a>
<h1 >Discussions<a href="#Discussions" class="wiki-anchor">¶</a></h1>
<a name="Primitiveattr"></a>
<h2 >Primitive.attr!<a href="#Primitiveattr" class="wiki-anchor">¶</a></h2>
<p>Currently there's no easy way to know behaviors of a C method. We may want to annotate a C method to provide information like what's described above.<br>
Apparently [Feature <a class="issue tracker-2 status-5 priority-4 priority-default closed" title="Feature: MRI internal: Define built-in classes in Ruby with `__intrinsic__` syntax (Closed)" href="https://redmine.ruby-lang.org/issues/16254">#16254</a>] has this problem ("Annotation issues") in one of its motivations. And therefore converting a C method to a builtin method and annotating the method would be the most legitimate way we can foresee.</p>
<p>When we think about annotating a method with builtin insn, there can be two ways to satisfy MJIT's immediate need:</p>
<ol>
<li>Per-method attribute</li>
<li>Per-insn attribute for builtin insns</li>
</ol>
<p>For now I'm trying to add an attribute so that an iseq with builtin insn can be analyzed to be side-effect free. 1 is a direct representation of it. If 2 can be used to assume a builtin insn is leaf=true, a method (possibly with other non-builtin insns) can be analyzed as leaf=true using other insn's leaf attribute. When we convert a C method to a single builtin insn, both 1 and 2 work totally fine.</p>
<p>Since ko1 preferred 1 for simplicity, I'm thinking about having per-method attribute annotation (<code>Primitive.attr!</code>). I'm still thinking about what attributes should be annotated, but it's gonna be something required for "Frame push omission".</p> Ruby master - Bug #16941 (Closed): MJIT doesn't identify Struct kind of instructionhttps://redmine.ruby-lang.org/issues/169412020-06-09T10:37:30Zabhsha (Abhishek Sharma)abhsha20@gmail.com
<p>MJIT does not identify Struct instructions and gives a warning while compiling to C.</p>
<p>Example:<br>
def my_method<br>
1.times do<br>
a_struct = Struct.new(:a).new<br>
a_struct.a = "a"<br>
end<br>
end</p>
<p>my_method</p>
<p>$: ruby --jit-save-temps --jit-min-calls=1 --disable-gems --jit --jit-verbose=2 --jit-wait test.rb</p>
<p>output:<br>
start compilation: a=@test.rb:3 -> /tmp/_ruby_mjit_p30696u2.c<br>
MJIT warning: Skipped to compile unsupported instruction: opt_call_c_function<br>
JIT failure (0.0ms): a=@test.rb:3 -> /tmp/_ruby_mjit_p30696u2.c</p>
<p>Are structs not recognised by JIT compiler?<br>
We have this call in our programs many number of times (~ 10^6), it attempts every time and fails. Can this be a cause of programs to get slower with --jit enabled ?</p> Ruby master - Feature #16806 (Closed): Struct#initialize accepts keyword arguments too by defaulthttps://redmine.ruby-lang.org/issues/168062020-04-22T06:14:59Zk0kubun (Takashi Kokubun)takashikkbn@gmail.com
<a name="Proposal"></a>
<h2 >Proposal<a href="#Proposal" class="wiki-anchor">¶</a></h2>
<pre><code class="rb syntaxhl" data-language="rb"><span class="no">Post</span> <span class="o">=</span> <span class="no">Struct</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="ss">:id</span><span class="p">,</span> <span class="ss">:name</span><span class="p">)</span>
<span class="c1"># In addition to this,</span>
<span class="no">Post</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="s2">"hello"</span><span class="p">)</span> <span class="c1">#=> #<struct Post id=1, name="hello"></span>
<span class="c1"># Let the following initialization also work</span>
<span class="no">Post</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="ss">id: </span><span class="mi">1</span><span class="p">,</span> <span class="ss">name: </span><span class="s2">"hello"</span><span class="p">)</span> <span class="c1">#=> #<struct Post id=1, name="hello"></span>
</code></pre>
<a name="Known-incompatibility"></a>
<h3 >Known incompatibility<a href="#Known-incompatibility" class="wiki-anchor">¶</a></h3>
<ul>
<li>
<code>Post.new(id: 1, name: "hello")</code> will be <code>#<struct Post id=1, name="hello"></code> instead of <code>#<struct Post id={:id=>1, :name=>"hello"}, name=nil></code>
<ul>
<li>Struct initialization only using keyword arguments should be warned in Ruby 3.0. <strong>This feature should be introduced in Ruby 3.1 or later.</strong>
</li>
</ul>
</li>
</ul>
<a name="Edge-cases"></a>
<h3 >Edge cases<a href="#Edge-cases" class="wiki-anchor">¶</a></h3>
<ul>
<li>When keyword arguments and positional arguments are mixed: <code>Post.new(1, name: "hello")</code>
<ul>
<li>This should continue to work like Ruby 2: <code>#<struct Post id=1, name={:name="hello"}></code>
</li>
</ul>
</li>
<li>Only keywords are given but they include an invalid member: <code>Post.new(foo: "bar")</code>
<ul>
<li>ArgumentError (unknown keywords: foo)</li>
</ul>
</li>
<li>When <code>keyword_init</code> is used
<ul>
<li>nil: default behavior. Positional arguments given use positional init. Keyword arguments without positional arguments treated as positional in 3.0 with warning, and treated as keyword init in Ruby 3.1.</li>
<li>true: Require keyword init, disallow positional init.</li>
<li>false: Treat keywords as positional hash.</li>
</ul>
</li>
</ul>
<a name="Use-cases"></a>
<h2 >Use cases<a href="#Use-cases" class="wiki-anchor">¶</a></h2>
<ul>
<li>Simplify a struct definition where [Feature <a class="issue tracker-2 status-5 priority-4 priority-default closed" title="Feature: Struct construction with kwargs (Closed)" href="https://redmine.ruby-lang.org/issues/11925">#11925</a>] is used.
<ul>
<li>When we introduced [Feature <a class="issue tracker-2 status-5 priority-4 priority-default closed" title="Feature: Struct construction with kwargs (Closed)" href="https://redmine.ruby-lang.org/issues/11925">#11925</a>], <a class="user active user-mention" href="https://redmine.ruby-lang.org/users/18">@mame (Yusuke Endoh)</a> thought we don't need <code>keyword_init: true</code> once keyword args are separated (<a href="https://docs.google.com/document/d/1XbUbch8_eTqh21FOwj9a_X-ZyJyCBjxkq8rWwfpf5BM/edit#" class="external">https://docs.google.com/document/d/1XbUbch8_eTqh21FOwj9a_X-ZyJyCBjxkq8rWwfpf5BM/edit#</a>). That's what this ticket is all about.
<ul>
<li>However, the keyword arguments separation was done differently from what we expected at the moment. So we need to deal with the "Known incompatibility".</li>
</ul>
</li>
<li>Matz objected to having a new keyword argument (<code>immutable: true</code>) in <code>Struct.new</code> at <a href="https://bugs.ruby-lang.org/issues/16769#note-8" class="external">https://bugs.ruby-lang.org/issues/16769#note-8</a>. So <code>keyword_init: true</code> seems also against Ruby's design. Now we should be able to skip specifying the option for consistency in the language design.</li>
</ul>
</li>
</ul> Ruby master - Bug #16785 (Closed): ruby 2.8.0-dev 5c27681813 causes Rails CI failurehttps://redmine.ruby-lang.org/issues/167852020-04-14T09:16:40Zyahonda (Yasuo Honda)yasuo.honda@gmail.com
<p>Rails CI has been failing since <a href="https://buildkite.com/rails/rails/builds/68202#ee7fdd62-d66b-48a1-a55f-af28a2bff287" class="external">https://buildkite.com/rails/rails/builds/68202#ee7fdd62-d66b-48a1-a55f-af28a2bff287</a> , according to git bisect it is triggered since ruby 2.8.0-dev 5c27681813</p>
<a name="Steps-to-reproduce-I-have-not-found-how-to-reproduce-without-Rails-framework"></a>
<h1 >Steps to reproduce (I have not found how to reproduce without Rails framework)<a href="#Steps-to-reproduce-I-have-not-found-how-to-reproduce-without-Rails-framework" class="wiki-anchor">¶</a></h1>
<pre><code>git clone https://github.com/rails/rails
cd rails/actionpack
bundle install
PARALLEL_WORKERS=1 bin/test test/controller/base_test.rb --seed 31701 -n "/^(?:UrlOptionsTest#(?:test_url_options_override)|ControllerInstanceTests#(?:test_performed\\?)|PerformActionTest#(?:test_action_missing_should_work))$/"
</code></pre>
<a name="Expected-result"></a>
<h1 >Expected result<a href="#Expected-result" class="wiki-anchor">¶</a></h1>
<p>It should pass as ruby 2.8.0-dev a01bda594996fdc247e183f107cada43e2c8e3b8 or prior versions.</p>
<a name="Actual-result"></a>
<h1 >Actual result:<a href="#Actual-result" class="wiki-anchor">¶</a></h1>
<pre><code> % PARALLEL_WORKERS=1 bin/test test/controller/base_test.rb --seed 31701 -n "/^(?:UrlOptionsTest#(?:test_url_options_override)|ControllerInstanceTests#(?:test_performed\\?)|PerformActionTest#(?:test_action_missing_should_work))$/"
Run options: --seed 31701 -n "/^(?:UrlOptionsTest#(?:test_url_options_override)|ControllerInstanceTests#(?:test_performed\\?)|PerformActionTest#(?:test_action_missing_should_work))$/"
# Running:
.E
Error:
PerformActionTest#test_action_missing_should_work:
ActionController::MissingExactTemplate: ActionMissingController#["Response for arbitrary_action"] is missing a template for request formats: text/html
/Users/yahonda/src/github.com/rails/rails/actionpack/lib/action_controller/metal/implicit_render.rb:45:in `default_render'
/Users/yahonda/src/github.com/rails/rails/actionpack/lib/action_controller/metal/basic_implicit_render.rb:6:in `block in send_action'
/Users/yahonda/src/github.com/rails/rails/actionpack/lib/action_controller/metal/basic_implicit_render.rb:6:in `tap'
/Users/yahonda/src/github.com/rails/rails/actionpack/lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'
/Users/yahonda/src/github.com/rails/rails/actionpack/lib/abstract_controller/base.rb:195:in `process_action'
/Users/yahonda/src/github.com/rails/rails/actionpack/lib/action_controller/metal/rendering.rb:30:in `process_action'
/Users/yahonda/src/github.com/rails/rails/actionpack/lib/abstract_controller/callbacks.rb:42:in `block in process_action'
/Users/yahonda/src/github.com/rails/rails/activesupport/lib/active_support/callbacks.rb:98:in `run_callbacks'
/Users/yahonda/src/github.com/rails/rails/actionpack/lib/abstract_controller/callbacks.rb:41:in `process_action'
/Users/yahonda/src/github.com/rails/rails/actionpack/lib/action_controller/metal/rescue.rb:22:in `process_action'
/Users/yahonda/src/github.com/rails/rails/actionpack/lib/action_controller/metal/instrumentation.rb:34:in `block in process_action'
/Users/yahonda/src/github.com/rails/rails/activesupport/lib/active_support/notifications.rb:203:in `block in instrument'
/Users/yahonda/src/github.com/rails/rails/activesupport/lib/active_support/notifications/instrumenter.rb:24:in `instrument'
/Users/yahonda/src/github.com/rails/rails/activesupport/lib/active_support/notifications.rb:203:in `instrument'
/Users/yahonda/src/github.com/rails/rails/actionpack/lib/action_controller/metal/instrumentation.rb:33:in `process_action'
/Users/yahonda/src/github.com/rails/rails/actionpack/lib/action_controller/metal/params_wrapper.rb:245:in `process_action'
/Users/yahonda/src/github.com/rails/rails/actionpack/lib/abstract_controller/base.rb:136:in `process'
/Users/yahonda/src/github.com/rails/rails/actionview/lib/action_view/rendering.rb:39:in `process'
/Users/yahonda/src/github.com/rails/rails/actionpack/lib/action_controller/metal.rb:190:in `dispatch'
/Users/yahonda/src/github.com/rails/rails/actionpack/lib/action_controller/test_case.rb:517:in `process'
/Users/yahonda/src/github.com/rails/rails/actionpack/lib/action_controller/test_case.rb:395:in `get'
/Users/yahonda/src/github.com/rails/rails/actionpack/test/controller/base_test.rb:173:in `test_action_missing_should_work'
bin/test Users/yahonda/src/github.com/rails/rails/actionpack/test/controller/base_test.rb:171
.
Finished in 0.128453s, 23.3548 runs/s, 38.9247 assertions/s.
3 runs, 5 assertions, 0 failures, 1 errors, 0 skips
%
</code></pre> Ruby master - Bug #16694 (Closed): JIT vs hardened GCC with PCHhttps://redmine.ruby-lang.org/issues/166942020-03-18T08:30:58Zvo.x (Vit Ondruch)v.ondruch@tiscali.cz
<p>Preparing Ruby package for RHEL 8, I observe the following error:</p>
<pre><code>$ cd /builddir/build/BUILD/ruby-2.6.3/
$ make test-all TESTS=test/ruby/test_rubyvm_mjit.rb
Run options: "--ruby=./miniruby -I./lib -I. -I.ext/common ./tool/runruby.rb --extout=.ext -- --disable-gems" --excludes-dir=./test/excludes --name=!/memory_leak/
# Running tests:
[1/4] TestRubyVMMJIT#test_pause = 0.24 s
1) Failure:
TestRubyVMMJIT#test_pause [/builddir/build/BUILD/ruby-2.6.3/test/ruby/test_rubyvm_mjit.rb:32]:
unexpected stdout:
'''
truefalsefalse```
stderr:
'''
/tmp/_ruby_mjit_p712u0.c:1:37: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp712u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p712u1.c:1:37: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp712u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p712u2.c:1:37: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp712u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p712u3.c:1:37: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp712u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p712u4.c:1:37: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp712u0.h"
^
compilation terminated due to -Wfatal-errors.
Successful MJIT finish
```.
<5> expected but was
<0>.
Finished tests in 0.937667s, 4.2659 tests/s, 24.5290 assertions/s.
4 tests, 23 assertions, 1 failures, 0 errors, 0 skips
ruby -v: ruby 2.6.3p62 (2019-04-16 revision 67580) [x86_64-linux]
make: *** [uncommon.mk:761: yes-test-all] Error 1
</code></pre>
<p>As it turns out, this is because GCC in RHEL is fully hardened. Unfortunately, due to GCC design, when GCC is fully hardened, it cannot properly handle PCH due to memory address relocation. Moreover, PCH are also security risk, so it seems they are going to be disabled entirely on RHEL.</p>
<p>Now I wonder what is the impact on Ruby JIT. I worry that with disabled PCH, the Ruby performance with JIT will be even worser without JIT. May be it is not good idea to use GCC for JIT. What are your thoughts?</p>
<p>The original ticket with all the details is here <a href="https://bugzilla.redhat.com/show_bug.cgi?id=1721553" class="external">1</a>.</p> Ruby master - Bug #16139 (Closed): setinstancevariable on MJIT may not check frozen flaghttps://redmine.ruby-lang.org/issues/161392019-09-04T01:41:00Zk0kubun (Takashi Kokubun)takashikkbn@gmail.com
<pre><code>class A
def a
@a = 1
end
end
a = A.new
a.a
a.a
a.a
a.freeze
a.a
</code></pre>
<a name="without-JIT"></a>
<h2 >without JIT<a href="#without-JIT" class="wiki-anchor">¶</a></h2>
<pre><code>$ ruby --disable-gems a.rb
Traceback (most recent call last):
1: from a.rb:12:in `<main>'
a.rb:3:in `a': can't modify frozen A: #<A:0x00005601af0b0430 @a=1> (FrozenError)
</code></pre>
<a name="with-JIT"></a>
<h2 >with JIT<a href="#with-JIT" class="wiki-anchor">¶</a></h2>
<pre><code>$ ruby --disable-gems --jit-min-calls=3 --jit-wait a.rb
</code></pre>
<p>(no error)</p> Ruby master - Misc #16094 (Closed): Allow only "Rebase and merge" or "Squash and merge" on GitHub...https://redmine.ruby-lang.org/issues/160942019-08-10T09:30:21Zk0kubun (Takashi Kokubun)takashikkbn@gmail.com
<a name="Problem"></a>
<h2 >Problem<a href="#Problem" class="wiki-anchor">¶</a></h2>
<ul>
<li>Our pull request merge strategy confuses contributors, as described in [Misc <a class="issue tracker-5 status-6 priority-4 priority-default closed" title="Misc: Prohibit a "foxtrot merge" instead of a merge commit (Rejected)" href="https://redmine.ruby-lang.org/issues/16093">#16093</a>].</li>
<li>In [Misc <a class="issue tracker-5 status-6 priority-4 priority-default closed" title="Misc: Prohibit a "foxtrot merge" instead of a merge commit (Rejected)" href="https://redmine.ruby-lang.org/issues/16093">#16093</a>], some committers did not like accepting a merge commit.</li>
</ul>
<a name="Solution"></a>
<h2 >Solution<a href="#Solution" class="wiki-anchor">¶</a></h2>
<ul>
<li>Allow using GitHub's "Rebase and merge" (suggested by <a class="user active user-mention" href="https://redmine.ruby-lang.org/users/182">@marcandre (Marc-Andre Lafortune)</a>) and "Squash and merge" (for editing a commit message as needed) to committers
<ul>
<li>Disable "Create a merge commit" in GitHub repository settings, to avoid concerns found in [Misc <a class="issue tracker-5 status-6 priority-4 priority-default closed" title="Misc: Prohibit a "foxtrot merge" instead of a merge commit (Rejected)" href="https://redmine.ruby-lang.org/issues/16093">#16093</a>].</li>
<li>Also prohibit pushes to the master branch which are not coming from a pull request by requiring CI in GitHub repository settings.</li>
<li>To allow looking up an associated GitHub pull request from git commands, add <code>git notes</code> to "Rebase and merge"d commits in git.ruby-lang.org post-receive hook. (suggested by <a class="user active user-mention" href="https://redmine.ruby-lang.org/users/4">@nobu (Nobuyoshi Nakada)</a>)</li>
</ul>
</li>
<li>Perform GitHub bidirectional sync on git.ruby-lang.org update hook, and accept a push if it does not conflict with "Rebase and merge" on GitHub.</li>
</ul>
<a name="Notes"></a>
<h2 >Notes<a href="#Notes" class="wiki-anchor">¶</a></h2>
<ul>
<li>Even after implementing this ticket, the Ruby's canonical Git repository will continue to be git.ruby-lang.org as is.</li>
<li>All committers must push non-pull-request commits to git.ruby-lang.org. Direct pushes to GitHub will continue to be disabled.</li>
<li>This approach has one drawback; <code>git push</code> to git.ruby-lang.org might block longer than now.</li>
</ul> Ruby master - Bug #15986 (Closed): `TestJIT#test_block_handler_with_possible_frame_omitted_inlini...https://redmine.ruby-lang.org/issues/159862019-07-04T12:24:01Zvo.x (Vit Ondruch)v.ondruch@tiscali.cz
<p>I am trying to build the Ruby 2.7 snapshot for Fedora Rawhide <a href="https://koji.fedoraproject.org/koji/taskinfo?taskID=36030301" class="external">1</a>, but I observe the following test failure on s390x and aarch64 platforms:</p>
<pre><code> 1) Failure:
TestJIT#test_block_handler_with_possible_frame_omitted_inlining [/builddir/build/BUILD/ruby-2.7.0-d9f8b88b47/test/ruby/test_jit.rb:846]:
Expected 2 times of JIT success, but succeeded 1 times.
script:
"""
def multiply(a, b)
a *= b
end
3.times do
p multiply(7.0, 10.0)
end
"""
stderr:
"""
JIT success (65.9ms): block in <main>@-e:6 -> /tmp/_ruby_mjit_p54157u0.c
gcc: fatal error: output filename may not be empty
compilation terminated.
Successful MJIT finish
"""
.
<2> expected but was
<1>.
Finished tests in 440.892116s, 47.2746 tests/s, 6150.4071 assertions/s.
</code></pre> Ruby master - Bug #15971 (Closed): Segfault with --jit-wait when using simple *= operatorhttps://redmine.ruby-lang.org/issues/159712019-07-02T11:13:50Znoahgibbs (Noah Gibbs)
<p>I get a segfault with the very simple Ruby code below with JIT debug options. Runs fine with only "--jit" (no --jit-wait or --jit-save-temps).</p>
<p>Ruby with "ruby --jit --jit-save-temps --jit-wait ./multiply.rb"<br>
Ruby version: ruby 2.7.0dev (2019-07-02T06:22:22Z trunk 4d6c35d33a) [x86_64-darwin18]</p>
<a name="multiplyrb"></a>
<h1 >multiply.rb<a href="#multiplyrb" class="wiki-anchor">¶</a></h1>
<p>def multiply(a, b)<br>
a *= b<br>
end</p>
<p>1_000_000.times do<br>
multiply(7.0, 10.0)<br>
end</p> Ruby master - Misc #15843 (Closed): Make "trunk" a symbolic-ref of "master" on git.ruby-lang.orghttps://redmine.ruby-lang.org/issues/158432019-05-12T08:11:47Zk0kubun (Takashi Kokubun)takashikkbn@gmail.com
<a name="Background"></a>
<h2 >Background<a href="#Background" class="wiki-anchor">¶</a></h2>
<ul>
<li>We're using <code>trunk</code> branch as a canonical development branch because it has been mirrored to there by git-svn.</li>
<li>In a usual git repository, a HEAD branch is <code>master</code> by default. Using <code>trunk</code> instead of <code>master</code> is confusing and causes typo on git operations or typing git-related URLs.</li>
<li>We can make an <em>alias branch</em> by using symbolic-ref on <code>git.ruby-lang.org:ruby.git</code>. We can start using <code>master</code> branch without disturbing any <code>trunk</code> usage. Why not use it?</li>
</ul>
<a name="Proposed-schedule"></a>
<h2 >Proposed schedule<a href="#Proposed-schedule" class="wiki-anchor">¶</a></h2>
<ul>
<li>2019
<ul>
<li>5/22: Announce this schedule <em>(done)</em>
</li>
<li>5/23: Make <code>master</code> symbolic-ref pointing to <code>trunk</code> on git.ruby-lang.org <em>(done)</em>
</li>
<li>5/23~6/30: Ask maintainers of CI (or whatever integrated with the repository) to explicitly use <code>master</code> branch instead of <code>trunk</code> at ruby-core mailing list. <em>(asked)</em>
</li>
<li>7/1: Switch HEAD on git.ruby-lang.org from <code>trunk</code> to <code>master</code>, and reverse the symbolic-ref direction (change the default branch of GitHub ruby/ruby to <code>master</code> too) <em>(done)</em>
<ul>
<li><code>sudo -u git bash -c "cd /var/git/ruby.git && mv refs/heads/trunk refs/heads/master && git symbolic-ref refs/heads/trunk refs/heads/master"</code></li>
</ul>
</li>
</ul>
</li>
<li>2020
<ul>
<li>1/1: Drop <code>trunk</code> branch on git.ruby-lang.org
<ul>
<li><code>sudo -u git bash -c "cd /var/git/ruby.git && rm refs/heads/trunk"</code></li>
</ul>
</li>
</ul>
</li>
</ul>
<a name="Expected-outcome"></a>
<h3 >Expected outcome<a href="#Expected-outcome" class="wiki-anchor">¶</a></h3>
<ul>
<li>2019
<ul>
<li>5/23:
<ul>
<li>
<code>git push</code> to <code>trunk</code> branch of git.ruby-lang.org will be reflected to both <code>trunk</code> and <code>master</code> branches of git.ruby-lang.org immediately.</li>
<li>
<code>git push</code> to <code>master</code> branch of git.ruby-lang.org will also be reflected to both <code>trunk</code> and <code>master</code> branches of git.ruby-lang.org immediately.</li>
<li>Both of <code>trunk</code> and <code>master</code> branches on GitHub will be always mirrored.</li>
</ul>
</li>
<li>7/1:
<ul>
<li>
<code>git clone</code> checks out <code>master</code> instead of <code>trunk</code> by default.</li>
</ul>
</li>
</ul>
</li>
<li>2020
<ul>
<li>1/1:
<ul>
<li>
<code>trunk</code> branch cannot be <code>git fetch</code>ed and <code>git push</code>ed anymore.</li>
</ul>
</li>
</ul>
</li>
</ul> Ruby master - Feature #15589 (Closed): `Numeric#zero?` is much slower than `== 0`https://redmine.ruby-lang.org/issues/155892019-02-06T09:34:41Zsawa (Tsuyoshi Sawada)
<p>My understanding is that the predicate method <code>Numeric#zero?</code> is not only a shorthand for <code>== 0</code>, but is also optimized for frequent patterns. If <code>zero?</code> is not faster than <code>== 0</code>, then it loses its reason for existence.</p>
<p>However, According to benchmarks on my environment, <code>number.zero?</code> is around 1.23 times to 1.64 times slower than <code>number == 0</code> when <code>number</code> is an <code>Integer</code>, <code>Rational</code>, or <code>Complex</code>. It is faster only when <code>number</code> is a <code>Float</code>.</p>
<p>And with <code>number.nonzero?</code>, it is even worse. It is about 1.88 times to 4.35 times slower than <code>number != 0</code>.</p>
<p>I think there is something wrong with this, and it should be possible to optimize these methods, which has somehow been missed.</p> Ruby master - Bug #15522 (Closed): TestJIT#test_compile_insn_local fails on aarch64 RHEL7https://redmine.ruby-lang.org/issues/155222019-01-10T10:44:55Zvo.x (Vit Ondruch)v.ondruch@tiscali.cz
<p>Trying to build Ruby 2.6 on RHEL7, I observe the following test failure on RHEL7, but just on aarch64. The other platforms pass just fine:</p>
<pre><code> 1) Failure:
TestJIT#test_compile_insn_local [/builddir/build/BUILD/ruby-2.6.0/test/ruby/test_jit.rb:64]:
Expected 3 times of JIT success, but succeeded 2 times.
script:
```
def foo
a = 0
[1, 2].each do |i|
a += i
[3, 4].each do |j|
a *= j
end
end
a
end
print foo
```
stderr:
```
JIT success (276.6ms): foo@-e:2 -> /tmp/_ruby_mjit_p20163u0.c
JIT success (347.3ms): block in foo@-e:4 -> /tmp/_ruby_mjit_p20163u1.c
MJIT warning: failure in loading code from '/tmp/_ruby_mjit_p20163u2.so': /tmp/_ruby_mjit_p20163u2.so: undefined symbol: __multi3
Successful MJIT finish
```
.
<3> expected but was
<2>.
</code></pre>
<p>I suspect this must be some combination of architecture/compiler (gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-16)), because I don't observe similar issues on Fedora.</p> Ruby master - Bug #15513 (Closed): MJIT compilation terminated due to -Wfatal-errors on GCC 7.3.0https://redmine.ruby-lang.org/issues/155132019-01-07T09:52:56Zkajisha (Hiroshi Kajisha)
<p>GCC 7.3.0 で MJIT を有効にしてみたところ、生成されたヘッダファイルがコンパイルエラーになるようです。</p>
<a name="GCC-のバージョン"></a>
<h2 >GCC のバージョン<a href="#GCC-のバージョン" class="wiki-anchor">¶</a></h2>
<pre><code>$ gcc --version
gcc (Gentoo 7.3.0-r3 p1.4) 7.3.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
</code></pre>
<a name="実行環境"></a>
<h2 >実行環境<a href="#実行環境" class="wiki-anchor">¶</a></h2>
<pre><code>$ uname -a
Linux localhost.localdomain 4.14.83-gentoo #3 SMP Mon Jan 7 13:56:38 JST 2019 x86_64 Intel(R) Core(TM) i7-8650U CPU @ 1.90GHz GenuineIntel GNU/Linux
</code></pre>
<a name="サンプルコードtmptrb"></a>
<h2 >サンプルコード(/tmp/t.rb)<a href="#サンプルコードtmptrb" class="wiki-anchor">¶</a></h2>
<pre><code>def calculate(a, b, n = 40_000_000)
n.times.count do
a = a * 16807 % 2147483647
b = b * 48271 % 2147483647
(a & 0xffff) == (b & 0xffff)
end
end
raise unless calculate(65, 8921) == 588
p result: calculate(699, 124)
</code></pre>
<a name="実行結果"></a>
<h2 >実行結果<a href="#実行結果" class="wiki-anchor">¶</a></h2>
<pre><code>$ ruby --jit --jit-verbose=1 /tmp/t.rb
/tmp/_ruby_mjit_p18462u106.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u46.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u41.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u2.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u10.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u11.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u0.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u1.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u21.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u28.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u29.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u30.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u31.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u32.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u37.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u3.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u36.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u35.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u34.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u33.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u27.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u39.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u40.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u38.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u6.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u43.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u44.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u45.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u42.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u23.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u24.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u22.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u74.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u68.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u69.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u58.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u51.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u53.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u20.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u49.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u50.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u52.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u54.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u55.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u56.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u57.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u59.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u60.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u61.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u62.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u63.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u64.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u66.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u67.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u73.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u47.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u48.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u65.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u70.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u71.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u72.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u75.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u76.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u8.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u12.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u13.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u14.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u15.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u80.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u78.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u100.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u82.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u79.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u101.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u102.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u103.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u104.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u105.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u19.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u81.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u9.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u85.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u94.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u95.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u87.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u92.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u93.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u83.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u84.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u86.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u88.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u89.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u90.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u91.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u16.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u17.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u18.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u25.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u26.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u77.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u96.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u4.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u5.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u97.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u98.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u99.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
/tmp/_ruby_mjit_p18462u7.c:1:39: error: one or more PCH files were found, but they were invalid
#include "/tmp/_ruby_mjit_hp18462u0.h"
^
compilation terminated due to -Wfatal-errors.
{:result=>600}
Successful MJIT finish
</code></pre> Ruby master - Bug #15478 (Closed): [RFC] erb: remove deprecation warnings from ERB.newhttps://redmine.ruby-lang.org/issues/154782018-12-28T22:51:45Znormalperson (Eric Wong)normalperson@yhbt.net
<p>erb: remove deprecation warnings from ERB.new</p>
<p>There's too much code relying on the old ordering; so any<br>
deprecation or removal of the old way is too annoying<br>
and only serves to make users angry.</p> Ruby master - Feature #15425 (Closed): Store MJIT header into Ruby versioned directory.https://redmine.ruby-lang.org/issues/154252018-12-17T12:19:16Zvo.x (Vit Ondruch)v.ondruch@tiscali.cz
<p>This is a followup of <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug: JIT does not respect configuration options (Closed)" href="https://redmine.ruby-lang.org/issues/15391">#15391</a> which fixes JIT to respect the configuration options. However, I still wonder, why the file is versioned and why it is not stored in the versioned directory alongside all other internal Ruby headers. I believe, that while it now respects the header configuration flags, it still does not respect options such as "--with-ruby-version"</p> Ruby master - Bug #15395 (Closed): Stack consistency error (2.6.0-rc1, JIT)https://redmine.ruby-lang.org/issues/153952018-12-10T07:19:29ZTietew (Toru Iwase)tietew@tietew.net
<p>ものは試しと Rails 5.2.2 app をJIT下で動かしたところ、Stack consistency error になりました。</p>
<p>OS: Ubuntu 18.04.1 TLS<br>
GCC: 7.3.0-27ubuntu1~18.04<br>
Puma Started as: $ ruby --jit-verbose=1 --jit-save-temps bin/rails server -pXXXX<br>
Ruby versions:<br>
ruby 2.6.0rc1 (2018-12-06 trunk 66253) [x86_64-linux]<br>
ruby 2.6.0dev (2018-12-10 trunk 66307) [x86_64-linux]</p>
<p>最初は順調だったのですが、しばらくJITコンパイルが落ち着くのを待ってから遷移したところエラーが出ました。<br>
2度試して、2度とも同じ箇所でエラーが出たのですが、このクラスだけ切り出しても再現しませんでした。<br>
ただしtrunkの最新版でも再現しました。<br>
修正のヒントになればいいと思いポストします。</p>
<p>Error Message:</p>
<pre><code>fatal (Stack consistency error (sp: 801, bp: 802)
== disasm: #<ISeq:block in each@/home/***/vendor/bundle/ruby/2.6.0/gems/temple-0.8.0/lib/temple/map.rb:21 (21,16)-(21,40)> (catch: FALSE)
== catch table
| catch type: redo st: 0001 ed: 0011 sp: 0000 cont: 0001
| catch type: next st: 0001 ed: 0011 sp: 0000 cont: 0011
|------------------------------------------------------------------------
local table (size: 1, argc: 1 [opts: 0, rest: -1, post: 0, block: -1, kw: -1@-1, kwrest: -1])
[ 1] k@0<Arg>
0000 nop ( 21)[Bc]
0001 getlocal_WC_0 k@0[Li]
0003 putself
0004 getlocal_WC_0 k@0
0006 opt_aref <callinfo!mid:[], argc:1, FCALL|ARGS_SIMPLE>, <callcache>
0009 invokeblock <callinfo!argc:2, ARGS_SIMPLE>
0011 leave [Br]
):
</code></pre>
<p>Ruby code:<br>
<a href="https://github.com/judofyr/temple/blob/v0.8.0/lib/temple/map.rb" class="external">https://github.com/judofyr/temple/blob/v0.8.0/lib/temple/map.rb</a></p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">module</span> <span class="nn">Temple</span>
<span class="k">class</span> <span class="nc">ImmutableMap</span>
<span class="kp">include</span> <span class="no">Enumerable</span>
<span class="c1"># (snip)</span>
<span class="k">def</span> <span class="nf">each</span>
<span class="n">keys</span><span class="p">.</span><span class="nf">each</span> <span class="p">{</span><span class="o">|</span><span class="n">k</span><span class="o">|</span> <span class="k">yield</span><span class="p">(</span><span class="n">k</span><span class="p">,</span> <span class="nb">self</span><span class="p">[</span><span class="n">k</span><span class="p">])</span> <span class="p">}</span> <span class="c1"># <= here</span>
<span class="k">end</span>
</code></pre>
<p>Compiled C code:</p>
<pre><code class="c syntaxhl" data-language="c"><span class="cp">#include</span> <span class="cpf">"/tmp/_ruby_mjit_hp24627u0.h"</span><span class="cp">
</span><span class="cm">/* block in each@/home/***/</span><span class="n">vendor</span><span class="o">/</span><span class="n">bundle</span><span class="o">/</span><span class="n">ruby</span><span class="o">/</span><span class="mi">2</span><span class="p">.</span><span class="mi">6</span><span class="p">.</span><span class="mi">0</span><span class="o">/</span><span class="n">gems</span><span class="o">/</span><span class="n">temple</span><span class="o">-</span><span class="mi">0</span><span class="p">.</span><span class="mi">8</span><span class="p">.</span><span class="mi">0</span><span class="o">/</span><span class="n">lib</span><span class="o">/</span><span class="n">temple</span><span class="o">/</span><span class="n">map</span><span class="p">.</span><span class="n">rb</span><span class="o">:</span><span class="mi">21</span> <span class="err">*/</span>
<span class="cp">#undef OPT_CHECKED_RUN
#define OPT_CHECKED_RUN 0
</span>
<span class="n">VALUE</span>
<span class="nf">_mjit1128</span><span class="p">(</span><span class="n">rb_execution_context_t</span> <span class="o">*</span><span class="n">ec</span><span class="p">,</span> <span class="n">rb_control_frame_t</span> <span class="o">*</span><span class="n">reg_cfp</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">VALUE</span> <span class="n">stack</span><span class="p">[</span><span class="mi">3</span><span class="p">];</span>
<span class="k">static</span> <span class="k">const</span> <span class="n">VALUE</span> <span class="o">*</span><span class="k">const</span> <span class="n">original_body_iseq</span> <span class="o">=</span> <span class="p">(</span><span class="n">VALUE</span> <span class="o">*</span><span class="p">)</span><span class="mh">0x5559463fe030</span><span class="p">;</span>
<span class="nl">label_0:</span> <span class="cm">/* nop */</span>
<span class="p">{</span>
<span class="n">MAYBE_UNUSED</span><span class="p">(</span><span class="kt">unsigned</span> <span class="kt">int</span><span class="p">)</span> <span class="n">stack_size</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="p">{</span>
<span class="cm">/* none */</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="nl">label_1:</span> <span class="cm">/* getlocal_WC_0 */</span>
<span class="p">{</span>
<span class="n">MAYBE_UNUSED</span><span class="p">(</span><span class="kt">unsigned</span> <span class="kt">int</span><span class="p">)</span> <span class="n">stack_size</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="n">MAYBE_UNUSED</span><span class="p">(</span><span class="n">VALUE</span><span class="p">)</span> <span class="n">val</span><span class="p">;</span>
<span class="n">MAYBE_UNUSED</span><span class="p">(</span><span class="n">lindex_t</span><span class="p">)</span> <span class="n">idx</span><span class="p">;</span>
<span class="n">MAYBE_UNUSED</span><span class="p">(</span><span class="n">rb_num_t</span><span class="p">)</span> <span class="n">level</span><span class="p">;</span>
<span class="n">level</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="n">idx</span> <span class="o">=</span> <span class="p">(</span><span class="n">lindex_t</span><span class="p">)</span><span class="mh">0x3</span><span class="p">;</span>
<span class="p">{</span>
<span class="n">val</span> <span class="o">=</span> <span class="o">*</span><span class="p">(</span><span class="n">vm_get_ep</span><span class="p">(</span><span class="n">GET_EP</span><span class="p">(),</span> <span class="n">level</span><span class="p">)</span> <span class="o">-</span> <span class="n">idx</span><span class="p">);</span>
<span class="n">RB_DEBUG_COUNTER_INC</span><span class="p">(</span><span class="n">lvar_get</span><span class="p">);</span>
<span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="n">RB_DEBUG_COUNTER_INC_IF</span><span class="p">(</span><span class="n">lvar_get_dynamic</span><span class="p">,</span> <span class="n">level</span> <span class="o">></span> <span class="mi">0</span><span class="p">);</span>
<span class="p">}</span>
<span class="n">stack</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">val</span><span class="p">;</span>
<span class="p">}</span>
<span class="nl">label_3:</span> <span class="cm">/* putself */</span>
<span class="p">{</span>
<span class="n">MAYBE_UNUSED</span><span class="p">(</span><span class="kt">unsigned</span> <span class="kt">int</span><span class="p">)</span> <span class="n">stack_size</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
<span class="n">MAYBE_UNUSED</span><span class="p">(</span><span class="n">VALUE</span><span class="p">)</span> <span class="n">val</span><span class="p">;</span>
<span class="p">{</span>
<span class="n">val</span> <span class="o">=</span> <span class="n">GET_SELF</span><span class="p">();</span>
<span class="p">}</span>
<span class="n">stack</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">val</span><span class="p">;</span>
<span class="p">}</span>
<span class="nl">label_4:</span> <span class="cm">/* getlocal_WC_0 */</span>
<span class="p">{</span>
<span class="n">MAYBE_UNUSED</span><span class="p">(</span><span class="kt">unsigned</span> <span class="kt">int</span><span class="p">)</span> <span class="n">stack_size</span> <span class="o">=</span> <span class="mi">2</span><span class="p">;</span>
<span class="n">MAYBE_UNUSED</span><span class="p">(</span><span class="n">VALUE</span><span class="p">)</span> <span class="n">val</span><span class="p">;</span>
<span class="n">MAYBE_UNUSED</span><span class="p">(</span><span class="n">lindex_t</span><span class="p">)</span> <span class="n">idx</span><span class="p">;</span>
<span class="n">MAYBE_UNUSED</span><span class="p">(</span><span class="n">rb_num_t</span><span class="p">)</span> <span class="n">level</span><span class="p">;</span>
<span class="n">level</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="n">idx</span> <span class="o">=</span> <span class="p">(</span><span class="n">lindex_t</span><span class="p">)</span><span class="mh">0x3</span><span class="p">;</span>
<span class="p">{</span>
<span class="n">val</span> <span class="o">=</span> <span class="o">*</span><span class="p">(</span><span class="n">vm_get_ep</span><span class="p">(</span><span class="n">GET_EP</span><span class="p">(),</span> <span class="n">level</span><span class="p">)</span> <span class="o">-</span> <span class="n">idx</span><span class="p">);</span>
<span class="n">RB_DEBUG_COUNTER_INC</span><span class="p">(</span><span class="n">lvar_get</span><span class="p">);</span>
<span class="p">(</span><span class="kt">void</span><span class="p">)</span><span class="n">RB_DEBUG_COUNTER_INC_IF</span><span class="p">(</span><span class="n">lvar_get_dynamic</span><span class="p">,</span> <span class="n">level</span> <span class="o">></span> <span class="mi">0</span><span class="p">);</span>
<span class="p">}</span>
<span class="n">stack</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="o">=</span> <span class="n">val</span><span class="p">;</span>
<span class="p">}</span>
<span class="nl">label_6:</span> <span class="cm">/* opt_aref */</span>
<span class="p">{</span>
<span class="n">MAYBE_UNUSED</span><span class="p">(</span><span class="kt">unsigned</span> <span class="kt">int</span><span class="p">)</span> <span class="n">stack_size</span> <span class="o">=</span> <span class="mi">3</span><span class="p">;</span>
<span class="k">if</span> <span class="p">(</span><span class="n">UNLIKELY</span><span class="p">(</span><span class="n">GET_GLOBAL_METHOD_STATE</span><span class="p">()</span> <span class="o">!=</span> <span class="mi">195</span> <span class="o">||</span>
<span class="n">RCLASS_SERIAL</span><span class="p">(</span><span class="n">CLASS_OF</span><span class="p">(</span><span class="n">stack</span><span class="p">[</span><span class="mi">1</span><span class="p">]))</span> <span class="o">!=</span> <span class="mi">129007</span><span class="p">))</span> <span class="p">{</span>
<span class="n">reg_cfp</span><span class="o">-></span><span class="n">pc</span> <span class="o">=</span> <span class="n">original_body_iseq</span> <span class="o">+</span> <span class="mi">6</span><span class="p">;</span>
<span class="n">reg_cfp</span><span class="o">-></span><span class="n">sp</span> <span class="o">=</span> <span class="p">(</span><span class="n">VALUE</span> <span class="o">*</span><span class="p">)</span><span class="n">reg_cfp</span><span class="o">-></span><span class="n">bp</span> <span class="o">+</span> <span class="mi">4</span><span class="p">;</span>
<span class="k">goto</span> <span class="n">cancel</span><span class="p">;</span>
<span class="p">}</span>
<span class="n">reg_cfp</span><span class="o">-></span><span class="n">pc</span> <span class="o">=</span> <span class="n">original_body_iseq</span> <span class="o">+</span> <span class="mi">9</span><span class="p">;</span>
<span class="n">reg_cfp</span><span class="o">-></span><span class="n">sp</span> <span class="o">=</span> <span class="p">(</span><span class="n">VALUE</span> <span class="o">*</span><span class="p">)</span><span class="n">reg_cfp</span><span class="o">-></span><span class="n">bp</span> <span class="o">+</span> <span class="mi">2</span> <span class="o">+</span> <span class="mi">1</span><span class="p">;</span>
<span class="o">*</span><span class="p">(</span><span class="n">reg_cfp</span><span class="o">-></span><span class="n">sp</span> <span class="o">+</span> <span class="o">-</span><span class="mi">2</span><span class="p">)</span> <span class="o">=</span> <span class="n">stack</span><span class="p">[</span><span class="mi">1</span><span class="p">];</span>
<span class="o">*</span><span class="p">(</span><span class="n">reg_cfp</span><span class="o">-></span><span class="n">sp</span> <span class="o">+</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span> <span class="o">=</span> <span class="n">stack</span><span class="p">[</span><span class="mi">2</span><span class="p">];</span>
<span class="p">{</span>
<span class="k">struct</span> <span class="n">rb_calling_info</span> <span class="n">calling</span><span class="p">;</span>
<span class="n">calling</span><span class="p">.</span><span class="n">block_handler</span> <span class="o">=</span> <span class="n">VM_BLOCK_HANDLER_NONE</span><span class="p">;</span>
<span class="n">calling</span><span class="p">.</span><span class="n">argc</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
<span class="n">calling</span><span class="p">.</span><span class="n">recv</span> <span class="o">=</span> <span class="n">stack</span><span class="p">[</span><span class="mi">1</span><span class="p">];</span>
<span class="p">{</span>
<span class="n">VALUE</span> <span class="n">v</span><span class="p">;</span>
<span class="n">vm_call_iseq_setup_normal</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">reg_cfp</span><span class="p">,</span> <span class="o">&</span><span class="n">calling</span><span class="p">,</span> <span class="p">(</span><span class="k">const</span> <span class="n">rb_callable_method_entry_t</span> <span class="o">*</span><span class="p">)</span><span class="mh">0x5559464066f0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
<span class="k">if</span> <span class="p">((</span><span class="n">v</span> <span class="o">=</span> <span class="n">mjit_exec</span><span class="p">(</span><span class="n">ec</span><span class="p">))</span> <span class="o">==</span> <span class="n">Qundef</span><span class="p">)</span> <span class="p">{</span>
<span class="n">VM_ENV_FLAGS_SET</span><span class="p">(</span><span class="n">ec</span><span class="o">-></span><span class="n">cfp</span><span class="o">-></span><span class="n">ep</span><span class="p">,</span> <span class="n">VM_FRAME_FLAG_FINISH</span><span class="p">);</span>
<span class="n">v</span> <span class="o">=</span> <span class="n">vm_exec</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">FALSE</span><span class="p">);</span>
<span class="p">}</span>
<span class="n">stack</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">v</span><span class="p">;</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="k">if</span> <span class="p">(</span><span class="n">UNLIKELY</span><span class="p">(</span><span class="n">ruby_vm_event_enabled_global_flags</span> <span class="o">&</span> <span class="n">ISEQ_TRACE_EVENTS</span><span class="p">))</span> <span class="p">{</span>
<span class="n">reg_cfp</span><span class="o">-></span><span class="n">sp</span> <span class="o">=</span> <span class="p">(</span><span class="n">VALUE</span> <span class="o">*</span><span class="p">)</span><span class="n">reg_cfp</span><span class="o">-></span><span class="n">bp</span> <span class="o">+</span> <span class="mi">3</span><span class="p">;</span>
<span class="k">goto</span> <span class="n">cancel</span><span class="p">;</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="nl">label_9:</span> <span class="cm">/* invokeblock */</span>
<span class="p">{</span>
<span class="n">MAYBE_UNUSED</span><span class="p">(</span><span class="kt">unsigned</span> <span class="kt">int</span><span class="p">)</span> <span class="n">stack_size</span> <span class="o">=</span> <span class="mi">2</span><span class="p">;</span>
<span class="n">MAYBE_UNUSED</span><span class="p">(</span><span class="n">CALL_INFO</span><span class="p">)</span> <span class="n">ci</span><span class="p">;</span>
<span class="n">MAYBE_UNUSED</span><span class="p">(</span><span class="n">VALUE</span><span class="p">)</span> <span class="n">val</span><span class="p">;</span>
<span class="n">ci</span> <span class="o">=</span> <span class="p">(</span><span class="n">CALL_INFO</span><span class="p">)</span><span class="mh">0x5559463fdef0</span><span class="p">;</span>
<span class="n">reg_cfp</span><span class="o">-></span><span class="n">pc</span> <span class="o">=</span> <span class="n">original_body_iseq</span> <span class="o">+</span> <span class="mi">11</span><span class="p">;</span>
<span class="n">reg_cfp</span><span class="o">-></span><span class="n">sp</span> <span class="o">=</span> <span class="p">(</span><span class="n">VALUE</span> <span class="o">*</span><span class="p">)</span><span class="n">reg_cfp</span><span class="o">-></span><span class="n">bp</span> <span class="o">+</span> <span class="mi">2</span> <span class="o">+</span> <span class="mi">1</span><span class="p">;</span>
<span class="o">*</span><span class="p">(</span><span class="n">reg_cfp</span><span class="o">-></span><span class="n">sp</span> <span class="o">+</span> <span class="o">-</span><span class="mi">2</span><span class="p">)</span> <span class="o">=</span> <span class="n">stack</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span>
<span class="o">*</span><span class="p">(</span><span class="n">reg_cfp</span><span class="o">-></span><span class="n">sp</span> <span class="o">+</span> <span class="o">-</span><span class="mi">1</span><span class="p">)</span> <span class="o">=</span> <span class="n">stack</span><span class="p">[</span><span class="mi">1</span><span class="p">];</span>
<span class="p">{</span>
<span class="k">struct</span> <span class="n">rb_calling_info</span> <span class="n">calling</span><span class="p">;</span>
<span class="n">VALUE</span> <span class="n">block_handler</span><span class="p">;</span>
<span class="n">calling</span><span class="p">.</span><span class="n">argc</span> <span class="o">=</span> <span class="n">ci</span><span class="o">-></span><span class="n">orig_argc</span><span class="p">;</span>
<span class="n">calling</span><span class="p">.</span><span class="n">block_handler</span> <span class="o">=</span> <span class="n">VM_BLOCK_HANDLER_NONE</span><span class="p">;</span>
<span class="n">calling</span><span class="p">.</span><span class="n">recv</span> <span class="o">=</span> <span class="n">Qundef</span><span class="p">;</span> <span class="cm">/* should not be used */</span>
<span class="n">block_handler</span> <span class="o">=</span> <span class="n">VM_CF_BLOCK_HANDLER</span><span class="p">(</span><span class="n">GET_CFP</span><span class="p">());</span>
<span class="k">if</span> <span class="p">(</span><span class="n">block_handler</span> <span class="o">==</span> <span class="n">VM_BLOCK_HANDLER_NONE</span><span class="p">)</span> <span class="p">{</span>
<span class="n">rb_vm_localjump_error</span><span class="p">(</span><span class="s">"no block given (yield)"</span><span class="p">,</span> <span class="n">Qnil</span><span class="p">,</span> <span class="mi">0</span><span class="p">);</span>
<span class="p">}</span>
<span class="n">val</span> <span class="o">=</span> <span class="n">vm_invoke_block</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">GET_CFP</span><span class="p">(),</span> <span class="o">&</span><span class="n">calling</span><span class="p">,</span> <span class="n">ci</span><span class="p">,</span> <span class="n">block_handler</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="n">val</span> <span class="o">==</span> <span class="n">Qundef</span><span class="p">)</span> <span class="p">{</span>
<span class="n">EXEC_EC_CFP</span><span class="p">(</span><span class="n">val</span><span class="p">);</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="n">stack</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">val</span><span class="p">;</span>
<span class="k">if</span> <span class="p">(</span><span class="n">UNLIKELY</span><span class="p">(</span><span class="n">ruby_vm_event_enabled_global_flags</span> <span class="o">&</span> <span class="n">ISEQ_TRACE_EVENTS</span><span class="p">))</span> <span class="p">{</span>
<span class="n">reg_cfp</span><span class="o">-></span><span class="n">sp</span> <span class="o">=</span> <span class="p">(</span><span class="n">VALUE</span> <span class="o">*</span><span class="p">)</span><span class="n">reg_cfp</span><span class="o">-></span><span class="n">bp</span> <span class="o">+</span> <span class="mi">2</span><span class="p">;</span>
<span class="k">goto</span> <span class="n">cancel</span><span class="p">;</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="nl">label_11:</span> <span class="cm">/* leave */</span>
<span class="p">{</span>
<span class="n">MAYBE_UNUSED</span><span class="p">(</span><span class="kt">unsigned</span> <span class="kt">int</span><span class="p">)</span> <span class="n">stack_size</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
<span class="n">MAYBE_UNUSED</span><span class="p">(</span><span class="n">VALUE</span><span class="p">)</span> <span class="n">val</span><span class="p">;</span>
<span class="n">val</span> <span class="o">=</span> <span class="n">stack</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span>
<span class="n">reg_cfp</span><span class="o">-></span><span class="n">pc</span> <span class="o">=</span> <span class="n">original_body_iseq</span> <span class="o">+</span> <span class="mi">12</span><span class="p">;</span>
<span class="n">reg_cfp</span><span class="o">-></span><span class="n">sp</span> <span class="o">=</span> <span class="p">(</span><span class="n">VALUE</span> <span class="o">*</span><span class="p">)</span><span class="n">reg_cfp</span><span class="o">-></span><span class="n">bp</span> <span class="o">+</span> <span class="mi">0</span> <span class="o">+</span> <span class="mi">1</span><span class="p">;</span>
<span class="p">{</span>
<span class="k">if</span> <span class="p">(</span><span class="n">OPT_CHECKED_RUN</span><span class="p">)</span> <span class="p">{</span>
<span class="k">const</span> <span class="n">VALUE</span> <span class="o">*</span><span class="k">const</span> <span class="n">bp</span> <span class="o">=</span> <span class="n">vm_base_ptr</span><span class="p">(</span><span class="n">reg_cfp</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="n">reg_cfp</span><span class="o">-></span><span class="n">sp</span> <span class="o">!=</span> <span class="n">bp</span><span class="p">)</span> <span class="p">{</span>
<span class="n">vm_stack_consistency_error</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">reg_cfp</span><span class="p">,</span> <span class="n">bp</span><span class="p">);</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="n">RUBY_VM_CHECK_INTS</span><span class="p">(</span><span class="n">ec</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="n">vm_pop_frame</span><span class="p">(</span><span class="n">ec</span><span class="p">,</span> <span class="n">GET_CFP</span><span class="p">(),</span> <span class="n">GET_EP</span><span class="p">()))</span> <span class="p">{</span>
<span class="cp">#if OPT_CALL_THREADED_CODE
</span> <span class="n">rb_ec_thread_ptr</span><span class="p">(</span><span class="n">ec</span><span class="p">)</span><span class="o">-></span><span class="n">retval</span> <span class="o">=</span> <span class="n">val</span><span class="p">;</span>
<span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="cp">#else
</span> <span class="k">return</span> <span class="n">val</span><span class="p">;</span>
<span class="cp">#endif
</span> <span class="p">}</span>
<span class="k">else</span> <span class="p">{</span>
<span class="cp">#if OPT_CALL_THREADED_CODE
</span> <span class="n">rb_ec_thread_ptr</span><span class="p">(</span><span class="n">ec</span><span class="p">)</span><span class="o">-></span><span class="n">retval</span> <span class="o">=</span> <span class="n">val</span><span class="p">;</span>
<span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
<span class="cp">#else
</span> <span class="k">return</span> <span class="n">val</span><span class="p">;</span>
<span class="cp">#endif
</span> <span class="p">}</span>
<span class="p">}</span>
<span class="n">stack</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">=</span> <span class="n">val</span><span class="p">;</span>
<span class="k">if</span> <span class="p">(</span><span class="n">UNLIKELY</span><span class="p">(</span><span class="n">ruby_vm_event_enabled_global_flags</span> <span class="o">&</span> <span class="n">ISEQ_TRACE_EVENTS</span><span class="p">))</span> <span class="p">{</span>
<span class="n">reg_cfp</span><span class="o">-></span><span class="n">sp</span> <span class="o">=</span> <span class="p">(</span><span class="n">VALUE</span> <span class="o">*</span><span class="p">)</span><span class="n">reg_cfp</span><span class="o">-></span><span class="n">bp</span> <span class="o">+</span> <span class="mi">2</span><span class="p">;</span>
<span class="k">goto</span> <span class="n">cancel</span><span class="p">;</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="nl">cancel:</span>
<span class="o">*</span><span class="p">((</span><span class="n">VALUE</span> <span class="o">*</span><span class="p">)</span><span class="n">reg_cfp</span><span class="o">-></span><span class="n">bp</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">=</span> <span class="n">stack</span><span class="p">[</span><span class="mi">0</span><span class="p">];</span>
<span class="o">*</span><span class="p">((</span><span class="n">VALUE</span> <span class="o">*</span><span class="p">)</span><span class="n">reg_cfp</span><span class="o">-></span><span class="n">bp</span> <span class="o">+</span> <span class="mi">2</span><span class="p">)</span> <span class="o">=</span> <span class="n">stack</span><span class="p">[</span><span class="mi">1</span><span class="p">];</span>
<span class="o">*</span><span class="p">((</span><span class="n">VALUE</span> <span class="o">*</span><span class="p">)</span><span class="n">reg_cfp</span><span class="o">-></span><span class="n">bp</span> <span class="o">+</span> <span class="mi">3</span><span class="p">)</span> <span class="o">=</span> <span class="n">stack</span><span class="p">[</span><span class="mi">2</span><span class="p">];</span>
<span class="k">return</span> <span class="n">Qundef</span><span class="p">;</span>
<span class="p">}</span> <span class="cm">/* end of _mjit1128 */</span>
</code></pre>
<p>Stack Trace:</p>
<pre><code>vendor/bundle/ruby/2.6.0/gems/temple-0.8.0/lib/temple/map.rb:21:in `block in each'
vendor/bundle/ruby/2.6.0/gems/temple-0.8.0/lib/temple/map.rb:21:in `each'
vendor/bundle/ruby/2.6.0/gems/temple-0.8.0/lib/temple/map.rb:21:in `each'
vendor/bundle/ruby/2.6.0/gems/haml-5.0.4/lib/haml/options.rb:172:in `initialize'
vendor/bundle/ruby/2.6.0/gems/haml-5.0.4/lib/haml/options.rb:44:in `new'
vendor/bundle/ruby/2.6.0/gems/haml-5.0.4/lib/haml/options.rb:44:in `wrap'
vendor/bundle/ruby/2.6.0/gems/haml-5.0.4/lib/haml/parser.rb:93:in `initialize'
vendor/bundle/ruby/2.6.0/gems/temple-0.8.0/lib/temple/mixins/engine_dsl.rb:101:in `new'
vendor/bundle/ruby/2.6.0/gems/temple-0.8.0/lib/temple/mixins/engine_dsl.rb:101:in `block in chain_proc_constructor'
vendor/bundle/ruby/2.6.0/gems/temple-0.8.0/lib/temple/engine.rb:61:in `block in call_chain'
vendor/bundle/ruby/2.6.0/gems/temple-0.8.0/lib/temple/engine.rb:60:in `map'
vendor/bundle/ruby/2.6.0/gems/temple-0.8.0/lib/temple/engine.rb:60:in `call_chain'
vendor/bundle/ruby/2.6.0/gems/temple-0.8.0/lib/temple/engine.rb:50:in `call'
vendor/bundle/ruby/2.6.0/gems/haml-5.0.4/lib/haml/temple_engine.rb:41:in `compile'
vendor/bundle/ruby/2.6.0/gems/haml-5.0.4/lib/haml/engine.rb:61:in `initialize'
vendor/bundle/ruby/2.6.0/gems/haml-5.0.4/lib/haml/plugin.rb:16:in `new'
vendor/bundle/ruby/2.6.0/gems/haml-5.0.4/lib/haml/plugin.rb:16:in `compile'
vendor/bundle/ruby/2.6.0/gems/haml-5.0.4/lib/haml/plugin.rb:23:in `call'
vendor/bundle/ruby/2.6.0/gems/actionview-5.2.2/lib/action_view/template.rb:283:in `compile'
vendor/bundle/ruby/2.6.0/gems/actionview-5.2.2/lib/action_view/template.rb:259:in `block (2 levels) in compile!'
vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.2/lib/active_support/notifications.rb:170:in `instrument'
vendor/bundle/ruby/2.6.0/gems/actionview-5.2.2/lib/action_view/template.rb:350:in `instrument'
vendor/bundle/ruby/2.6.0/gems/actionview-5.2.2/lib/action_view/template.rb:258:in `block in compile!'
vendor/bundle/ruby/2.6.0/gems/actionview-5.2.2/lib/action_view/template.rb:246:in `synchronize'
vendor/bundle/ruby/2.6.0/gems/actionview-5.2.2/lib/action_view/template.rb:246:in `compile!'
vendor/bundle/ruby/2.6.0/gems/actionview-5.2.2/lib/action_view/template.rb:158:in `block in render'
vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.2/lib/active_support/notifications.rb:170:in `instrument'
vendor/bundle/ruby/2.6.0/gems/actionview-5.2.2/lib/action_view/template.rb:354:in `instrument_render_template'
vendor/bundle/ruby/2.6.0/gems/actionview-5.2.2/lib/action_view/template.rb:157:in `render'
vendor/bundle/ruby/2.6.0/gems/actionview-5.2.2/lib/action_view/renderer/template_renderer.rb:54:in `block (2 levels) in render_template'
vendor/bundle/ruby/2.6.0/gems/actionview-5.2.2/lib/action_view/renderer/abstract_renderer.rb:44:in `block in instrument'
vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.2/lib/active_support/notifications.rb:168:in `block in instrument'
vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.2/lib/active_support/notifications/instrumenter.rb:23:in `instrument'
vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.2/lib/active_support/notifications.rb:168:in `instrument'
vendor/bundle/ruby/2.6.0/gems/actionview-5.2.2/lib/action_view/renderer/abstract_renderer.rb:43:in `instrument'
vendor/bundle/ruby/2.6.0/gems/actionview-5.2.2/lib/action_view/renderer/template_renderer.rb:53:in `block in render_template'
vendor/bundle/ruby/2.6.0/gems/actionview-5.2.2/lib/action_view/renderer/template_renderer.rb:61:in `render_with_layout'
vendor/bundle/ruby/2.6.0/gems/actionview-5.2.2/lib/action_view/renderer/template_renderer.rb:52:in `render_template'
vendor/bundle/ruby/2.6.0/gems/actionview-5.2.2/lib/action_view/renderer/template_renderer.rb:16:in `render'
vendor/bundle/ruby/2.6.0/gems/actionview-5.2.2/lib/action_view/renderer/renderer.rb:44:in `render_template'
vendor/bundle/ruby/2.6.0/gems/actionview-5.2.2/lib/action_view/renderer/renderer.rb:25:in `render'
vendor/bundle/ruby/2.6.0/gems/actionview-5.2.2/lib/action_view/rendering.rb:103:in `_render_template'
vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.2/lib/action_controller/metal/streaming.rb:219:in `_render_template'
vendor/bundle/ruby/2.6.0/gems/actionview-5.2.2/lib/action_view/rendering.rb:84:in `render_to_body'
vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.2/lib/action_controller/metal/rendering.rb:52:in `render_to_body'
vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.2/lib/action_controller/metal/renderers.rb:142:in `render_to_body'
vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.2/lib/abstract_controller/rendering.rb:25:in `render'
vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.2/lib/action_controller/metal/rendering.rb:36:in `render'
vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.2/lib/action_controller/metal/instrumentation.rb:46:in `block (2 levels) in render'
vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.2/lib/active_support/core_ext/benchmark.rb:14:in `block in ms'
/usr/local/anyenv/envs/rbenv/versions/2.6.0-rc1/lib/ruby/2.6.0/benchmark.rb:308:in `realtime'
vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.2/lib/active_support/core_ext/benchmark.rb:14:in `ms'
vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.2/lib/action_controller/metal/instrumentation.rb:46:in `block in render'
vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.2/lib/action_controller/metal/instrumentation.rb:87:in `cleanup_view_runtime'
vendor/bundle/ruby/2.6.0/gems/activerecord-5.2.2/lib/active_record/railties/controller_runtime.rb:31:in `cleanup_view_runtime'
vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.2/lib/action_controller/metal/instrumentation.rb:45:in `render'
vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.2/lib/action_controller/metal/implicit_render.rb:35:in `default_render'
vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.2/lib/action_controller/metal/basic_implicit_render.rb:6:in `block in send_action'
vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.2/lib/action_controller/metal/basic_implicit_render.rb:6:in `tap'
vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.2/lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'
vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.2/lib/abstract_controller/base.rb:194:in `process_action'
vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.2/lib/action_controller/metal/rendering.rb:30:in `process_action'
vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.2/lib/abstract_controller/callbacks.rb:42:in `block in process_action'
vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.2/lib/active_support/callbacks.rb:132:in `run_callbacks'
vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.2/lib/abstract_controller/callbacks.rb:41:in `process_action'
vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.2/lib/action_controller/metal/rescue.rb:22:in `process_action'
vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.2/lib/action_controller/metal/instrumentation.rb:34:in `block in process_action'
vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.2/lib/active_support/notifications.rb:168:in `block in instrument'
vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.2/lib/active_support/notifications/instrumenter.rb:23:in `instrument'
vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.2/lib/active_support/notifications.rb:168:in `instrument'
vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.2/lib/action_controller/metal/instrumentation.rb:32:in `process_action'
vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.2/lib/action_controller/metal/params_wrapper.rb:256:in `process_action'
vendor/bundle/ruby/2.6.0/gems/activerecord-5.2.2/lib/active_record/railties/controller_runtime.rb:24:in `process_action'
vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.2/lib/abstract_controller/base.rb:134:in `process'
vendor/bundle/ruby/2.6.0/gems/actionview-5.2.2/lib/action_view/rendering.rb:32:in `process'
vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.2/lib/action_controller/metal.rb:191:in `dispatch'
vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.2/lib/action_controller/metal.rb:252:in `dispatch'
vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.2/lib/action_dispatch/routing/route_set.rb:52:in `dispatch'
vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.2/lib/action_dispatch/routing/route_set.rb:34:in `serve'
vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.2/lib/action_dispatch/journey/router.rb:52:in `block in serve'
vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.2/lib/action_dispatch/journey/router.rb:35:in `each'
vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.2/lib/action_dispatch/journey/router.rb:35:in `serve'
vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.2/lib/action_dispatch/routing/route_set.rb:840:in `call'
vendor/bundle/ruby/2.6.0/gems/http_accept_language-2.1.1/lib/http_accept_language/middleware.rb:14:in `call'
vendor/bundle/ruby/2.6.0/gems/rack-2.0.6/lib/rack/tempfile_reaper.rb:15:in `call'
vendor/bundle/ruby/2.6.0/gems/rack-2.0.6/lib/rack/etag.rb:25:in `call'
vendor/bundle/ruby/2.6.0/gems/rack-2.0.6/lib/rack/conditional_get.rb:25:in `call'
vendor/bundle/ruby/2.6.0/gems/rack-2.0.6/lib/rack/head.rb:12:in `call'
vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.2/lib/action_dispatch/http/content_security_policy.rb:18:in `call'
vendor/bundle/ruby/2.6.0/gems/rack-2.0.6/lib/rack/session/abstract/id.rb:232:in `context'
vendor/bundle/ruby/2.6.0/gems/rack-2.0.6/lib/rack/session/abstract/id.rb:226:in `call'
vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.2/lib/action_dispatch/middleware/cookies.rb:670:in `call'
vendor/bundle/ruby/2.6.0/gems/activerecord-5.2.2/lib/active_record/migration.rb:559:in `call'
config/initializers/check_access_control.rb:14:in `call'
vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.2/lib/action_dispatch/middleware/callbacks.rb:28:in `block in call'
vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.2/lib/active_support/callbacks.rb:98:in `run_callbacks'
vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.2/lib/action_dispatch/middleware/callbacks.rb:26:in `call'
vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.2/lib/action_dispatch/middleware/executor.rb:14:in `call'
vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.2/lib/action_dispatch/middleware/debug_exceptions.rb:61:in `call'
vendor/bundle/ruby/2.6.0/gems/web-console-3.7.0/lib/web_console/middleware.rb:135:in `call_app'
vendor/bundle/ruby/2.6.0/gems/web-console-3.7.0/lib/web_console/middleware.rb:30:in `block in call'
vendor/bundle/ruby/2.6.0/gems/web-console-3.7.0/lib/web_console/middleware.rb:20:in `catch'
vendor/bundle/ruby/2.6.0/gems/web-console-3.7.0/lib/web_console/middleware.rb:20:in `call'
vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.2/lib/action_dispatch/middleware/show_exceptions.rb:33:in `call'
vendor/bundle/ruby/2.6.0/gems/railties-5.2.2/lib/rails/rack/logger.rb:38:in `call_app'
vendor/bundle/ruby/2.6.0/gems/railties-5.2.2/lib/rails/rack/logger.rb:26:in `block in call'
vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.2/lib/active_support/tagged_logging.rb:71:in `block in tagged'
vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.2/lib/active_support/tagged_logging.rb:28:in `tagged'
vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.2/lib/active_support/tagged_logging.rb:71:in `tagged'
vendor/bundle/ruby/2.6.0/gems/railties-5.2.2/lib/rails/rack/logger.rb:26:in `call'
vendor/bundle/ruby/2.6.0/gems/sprockets-rails-3.2.1/lib/sprockets/rails/quiet_assets.rb:13:in `call'
vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.2/lib/action_dispatch/middleware/remote_ip.rb:81:in `call'
vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.2/lib/action_dispatch/middleware/request_id.rb:27:in `call'
vendor/bundle/ruby/2.6.0/gems/rack-2.0.6/lib/rack/method_override.rb:22:in `call'
vendor/bundle/ruby/2.6.0/gems/rack-2.0.6/lib/rack/runtime.rb:22:in `call'
vendor/bundle/ruby/2.6.0/gems/activesupport-5.2.2/lib/active_support/cache/strategy/local_cache_middleware.rb:29:in `call'
vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.2/lib/action_dispatch/middleware/executor.rb:14:in `call'
vendor/bundle/ruby/2.6.0/gems/actionpack-5.2.2/lib/action_dispatch/middleware/static.rb:127:in `call'
vendor/bundle/ruby/2.6.0/gems/rack-2.0.6/lib/rack/sendfile.rb:111:in `call'
vendor/bundle/ruby/2.6.0/gems/railties-5.2.2/lib/rails/engine.rb:524:in `call'
vendor/bundle/ruby/2.6.0/gems/puma-3.12.0/lib/puma/configuration.rb:225:in `call'
vendor/bundle/ruby/2.6.0/gems/puma-3.12.0/lib/puma/server.rb:658:in `handle_request'
vendor/bundle/ruby/2.6.0/gems/puma-3.12.0/lib/puma/server.rb:472:in `process_client'
vendor/bundle/ruby/2.6.0/gems/puma-3.12.0/lib/puma/server.rb:332:in `block in run'
vendor/bundle/ruby/2.6.0/gems/puma-3.12.0/lib/puma/thread_pool.rb:133:in `block in spawn_thread'
</code></pre> Ruby master - Bug #15316 (Closed): rb_postponed_job_register not thread-safehttps://redmine.ruby-lang.org/issues/153162018-11-18T04:49:28Znormalperson (Eric Wong)normalperson@yhbt.net
<p>Consider following execution timeline for two threads, t1 and t2.<br>
(should be 2 columns, I only have fixed-width fonts for display)</p>
<pre><code>t1 t2 (mjit-worker)
-----------------------------------------------------------------------------
vm->postponed_job_index increment #1
pjob[0]->func = ...
pjob[0]->data = ...
vm->postponed_job_index increment #2
RUBY_VM_SET_POSTPONED_JOB_INTERRUPT
rb_postponed_job_flush
sees result of increment #2 from t2
tries to access pjob[1] => CRASH
pjob[1]->func = ...
pjob[1]->data = ...
RUBY_VM_SET_POSTPONED_JOB_INTERRUPT
</code></pre>
<p>So it looks like we need a THREAD-SAFE (not necessarily async-safe)<br>
version of rb_postponed_job_register. Or a one-off API for MJIT...<br>
job registration for MJIT.</p> Ruby master - Misc #15294 (Closed): Add warnings for invalid ERB trim modeshttps://redmine.ruby-lang.org/issues/152942018-11-09T21:12:31Zjsc (Justin Collins)
<p>Currently, the ERB library will accept any value for the "trim mode". If the trim mode is any string containing <code>%</code>, <code>-</code>, <code>></code>, <code><></code> or an integer 0-2, the appropriate trim mode will be set. If not, no exception or warning is raised.</p>
<p>I had a bug in Brakeman for 1.5 years because I was passing the wrong value as the trim mode. Since the value <em>coincidentally</em> contained <code>-</code> on my test machine, I didn't notice until yesterday.</p>
<p>The attached patch proposes reporting a warning if an invalid trim mode is provided. It does allow a couple invalid modes (you could provide duplicate or conflicting values, like <code>%%</code> or <code><>></code>), but I think this is still an improvement over accepting any value at all.</p>
<p>If there is interest, I could spend some time to make it even more strict.</p>
<p>I set the <code>uplevel</code> to <code>5</code>, which is right if a user is calling <code>ERB.new</code> (most common case?). I don't know if that is the correct approach.</p>
<p>In the future, perhaps this should be an exception instead of a warning.</p> Ruby master - Misc #15275 (Closed): [DOCs] Documentation for ruby's jit model - from the ruby "en...https://redmine.ruby-lang.org/issues/152752018-11-01T15:21:31Zshevegen (Robert A. Heiler)shevegen@gmail.com
<p>This is a request about documentation, with the specific focus on the new ruby<br>
jit.</p>
<p>The "end user" perspective here means how an average ruby user may look at the<br>
jit; say, someone who may have been using ruby for some time, but may not be a<br>
"full" expert in ruby, just somewhat semi-advanced. A competent (in ruby),<br>
average person.</p>
<p>The aim of this feature request here is to, at the least, document how such a user<br>
may benefit from jit in his or her projects. I will explain more about this lateron,<br>
but since this request is a bit long, I have split it up into several subcomponents.</p>
<p>Up to this point the aim was mostly to provide a short explanation to this feature<br>
request, as introduction - the "TL;DR" variant.</p>
<hr>
<p>There are quite some documents, blog entries and presentations available in regards<br>
to ruby's jit. In particular matz spoke about this several times before; but also<br>
Takashi and Vlad spoke about the jit.</p>
<p>For example, in one video here, for those who may be curious, matz mentioned the<br>
jit (2018):</p>
<p><a href="https://www.youtube.com/watch?v=jqnVaYUcjCo" class="external">https://www.youtube.com/watch?v=jqnVaYUcjCo</a></p>
<p>(If you are only interested in the jit part, you can skip forward towards e. g.<br>
~10:30, or something like that.)</p>
<p>There are also documents and interviews about the jit-effort in ruby, such as<br>
here:</p>
<p><a href="https://blog.heroku.com/ruby-mjit" class="external">https://blog.heroku.com/ruby-mjit</a></p>
<p>But also elsewhere. Anyway; my focus here is on the "end user" perspective,<br>
of regular ruby users. How/if they can benefit from the jit. I assume that<br>
this also depends on the projects at hand.</p>
<p>Matz said that ruby 2.6.x will have jit, but this may not yet be the "fastest"<br>
jit; there will be more improvements in the future. I guess until ruby 3.x we<br>
can expect further changes here.</p>
<p>Matz also mentioned that not every program may benefit from the jit equally;<br>
for example, I/O heavy-tasks may not benefit much at all from the jit. Some<br>
projects may not run faster - and perhaps even run slower. Here I think it may<br>
be important that ruby users understand the trade-offs, advantages and<br>
disadvantages. That way they can make informed decisions in the future, in<br>
regards to their projects and the jit.</p>
<p>For me, as an end user, the main question is - which of my projects may<br>
benefit from the jit? How can I verify this or measure it? Should I use the<br>
jit for this project, but not that project? (Matz also gave another talk<br>
about memory usage and resource-constrained systems; I think there will be<br>
a large difference between classical desktop systems with a lot of RAM,<br>
and smaller smartphone-systems and so forth).</p>
<p>That is my primary reason for this request here, to provide a document<br>
and/or tutorial of some kind.</p>
<p>I should also mention that, obviously, the code itself for the jit has<br>
priority compared to the documentation, but documentation is also very<br>
important.</p>
<p>Back in the ruby 1.8.x to ruby 2.x days, there was not a lot of information<br>
available in regards to how to handle different Encoding situations. For<br>
example, it was new that String objects had an encoding attached. That also<br>
meant that String objects could have different encodings, and merging two<br>
String objects with different encoding led to problems (which could not<br>
happen in the 1.8.x days; or at the least did not happen as frequently).</p>
<p>It took me a while to learn and understand how to handle the new Encoding<br>
situation, which is also a reason why I am creating the issue request here,<br>
so that we can work towards documenting the jit from the end user perspective<br>
as well, in order to make it easier to work and use the jit. But, as said<br>
before, the code for the jit is more important in the sense that ... without<br>
that code, the documentation would not be useful. :)</p>
<p>This suggestion is also not about draining too much time from Takashi Kokubun<br>
and others in this regard. It is ok if documentation comes at a later time,<br>
say, somewhere in the year 2019 perhaps? At some point, though, it would be<br>
very useful for explaining to regular end users how to use jit, when not to<br>
use the jit, what can be expected in regards to speed improvements - things<br>
like that. I am sure there will be many blog entries about this in the future,<br>
but to me personally, I think it would be better if we learn about such changes<br>
from the official documentation rather than "random" blog entries (even though<br>
many such blog entries are very good, don't get me wrong).</p>
<p>With proper documentation, ruby users can understand the jit, as in how to use<br>
it.</p>
<p>I will next list some items that may be useful to have, but feel free to<br>
ignore them if you feel they are not that important to have. I will number<br>
them and list them, roughly, in order of importance, e. g. (1) is the<br>
most important suggestion, whereas (5) is not so important.</p>
<p>Hopefully I am not the only one who would appreciate useful documentation<br>
in this regard.</p>
<p>The documentation could be kept in a .md file distributed with the ruby<br>
tarball itself; and/or it could reside at <a href="https://ruby-doc.org/" class="external">https://ruby-doc.org/</a>; and/or<br>
at the ruby wiki.</p>
<p>But I think where the documentation for jit resides is not so important,<br>
as long as there is any place where it may be documented. When I write<br>
"documentation", I also specifically mean a "tutorial" or rather a document,<br>
with specific, different usage examples for the jit, too. There is quite<br>
some information available, spread out over github issue trackers (including<br>
some benchmarks), and blog entries (some in japanese, some in english) - I<br>
would like to see a single resource where useful information could be<br>
collected, and updated. This does not have to be long; but it should be<br>
useful. It should have an english version, too, but it could be in japanese<br>
first, and then translated into english (the examples will be in english<br>
anyway, and may be the most important part altogether).</p>
<hr>
<p>Suggestions:</p>
<p>(1) As a ruby end user, I would like to see specific usage examples in<br>
how to use jit, both commandline-use but perhaps also web-use for jit (e. g.<br>
be this rails and/or sinatra and/or padrino, just to see different examples;<br>
perhaps even via shebang-flags within the .rb files, similar to frozen-string<br>
literal, but this may require a separate suggestion; my issue here is really<br>
primarily about documentation for jit). A few examples here may be useful<br>
to provide ruby users with a start.</p>
<p>(2) As a ruby end user, I would appreciate some information AND benchmarks<br>
in regard to projects when it comes to the jit. This should also show some<br>
information in regards to time spent, as a benchmark; a bit similar to optcarrot.</p>
<p>For example:</p>
<pre><code> | default time without JIT | time with JIT | gain
</code></pre>
<hr>
<p>project A | 100% | 98% | +2% faster<br>
project B | 100% | 88% | +12% faster<br>
etc..</p>
<p>This is just a suggestion. The aim here is to give people a short overview<br>
what they may expect. For project A, project B etc... I may suggest<br>
commonly used programs in ruby or example .rb files. These could be<br>
distributed within ruby itself (perhaps test-files, or optcarrot-components),<br>
or they could point to .rb files stored somewhere else, be it on github<br>
or anywhere else. The key idea is to just give some projects as examples;<br>
and ideally, make a fair comparison, so people can understand which<br>
projects may benefit more, and which may benefit less.</p>
<p>I don't mean to suggest too many benchmarks here, but perhaps at the least<br>
3 different examples, of a "small" project, a "medium" project, and a<br>
"large" project in ruby. And if it is not too much work, perhaps 5 projects,<br>
or even up to 8 or 10 - but I think 3-5 may suffice if it is somewhat<br>
representative.</p>
<p>The projects do not necessarily have to be that large, but perhaps picking<br>
some projects that require a few other projects would be realistic.</p>
<p>Some popular ruby projects could be picked, where comparison may make sense.<br>
"rack" may be a useful candidate here or perhaps a project that makes use<br>
of rack; perhaps a few more, such as "prawn", and similar projects.</p>
<p>The aim here is to provide ruby users with an overview that is somewhat<br>
accurate. (Since the jit optimizations may become better and faster in the<br>
future, I would also like to suggest to keep an entry in that documentat/file<br>
that states <strong>when the document was last updated</strong>.)</p>
<p>(3) As matz mentioned before that not all applications may benefit from the<br>
jit equally much, I would like to suggest to keep a short entry/paragraph<br>
that shows which applications may not benefit as much from jit too. Again,<br>
this does not have to be a long list; just a few examples, ideally with a<br>
benchmark. (These benchmarks could ideally also be automatically run.)</p>
<p>(4) After this basic information is made available, it may also be useful<br>
to explain a bit how the jit works (no need for any large technical details<br>
there; just a rough picture or overview how jit works), where it can optimize<br>
more code than in other ruby code; and perhaps also how to write "jit-friendly"<br>
code.</p>
<p>With "jit-friendly code", I do NOT mean that people write ruby code in order<br>
to maximize what the jit can do; but I assume that some code can be optimized<br>
more easily than other code, and it may be useful if people know these<br>
differences.</p>
<p>To explain this, I can provide an an example here:</p>
<p>I remember from the old pickaxe book, the difference between += and << for ruby<br>
Strings, with the latter being faster than += as it avoids creating/allocating<br>
new Strings. So I think this is a good recommendation for ruby Strings, to use<br>
<< if you want to append something, rather than +=.</p>
<p>Something similar in regards to jit may also be useful to have. Again, this does<br>
not have to be long; perhaps a paragraph or two.</p>
<p>(5) Links elsewhere should then be updated to refer to this jit-document too;<br>
the wiki here on bugs.ruby-lang.org should also have a link to this jit document<br>
perhaps; so should the official ruby homepage do, too - perhaps under "Documentation".</p>
<p>Perhaps also a file that is distributed with ruby itself can point to this jit<br>
document (or such a jit-file can also be distributed with ruby, but these are mostly<br>
details - in my opinion, the most important part is that there is one location where<br>
information about the jit is collected in an official way).</p>
<hr>
<p>I hope I could explain what I meant to say about the jit.</p>
<p>Please feel free to close this issue request here at any moment in time, for any<br>
reason; since the path to JIT may change up to ruby 3.x., I suggest to close this<br>
issue here at the very latest when ruby 3.x is released, or perhaps even earlier.</p>
<p>The 5 points are not all equally important; the two points (1) and (2) are the most<br>
important parts. The jit-code is more important than the documentation and should<br>
receive priority, but it would be nice if a bit of documentation could be added in<br>
the future about the jit from the "end user" perspective. This does not have to<br>
happn soon; think about this in the next ~18 months or so. I hope that this may<br>
be a realistic time frame for this.</p>
<p>Thank you for reading this suggestion!</p> Ruby master - Bug #15071 (Closed): RubyVM::MJIT.pause may cause deadlock after compactionhttps://redmine.ruby-lang.org/issues/150712018-09-04T23:57:21Zwanabe (_ wanabe)s.wanabe@gmail.com
<p>Sometimes I met thread-deadlock while waiting <code>RubyVM::MJIT.pause</code>.<br>
Here is a terminal log.</p>
<pre><code>$ ruby --disable-gems --jit --jit-verbose=1 --jit-max-cache=3 -e '100.times do |i| eval("def foo#{i}; end; " + "foo#{i}; " * 5); end; RubyVM::MJIT.pause'
JIT success (96.7ms): block in <main>@-e:1 -> /tmp/_ruby_mjit_p9628u4.c
JIT success (25.0ms): foo0@(eval):1 -> /tmp/_ruby_mjit_p9628u0.c
JIT success (26.2ms): foo1@(eval):1 -> /tmp/_ruby_mjit_p9628u1.c
JIT success (24.4ms): foo2@(eval):1 -> /tmp/_ruby_mjit_p9628u2.c
JIT success (28.0ms): foo3@(eval):1 -> /tmp/_ruby_mjit_p9628u3.c
JIT success (24.8ms): foo4@(eval):1 -> /tmp/_ruby_mjit_p9628u5.c
JIT success (25.4ms): foo5@(eval):1 -> /tmp/_ruby_mjit_p9628u6.c
JIT success (24.5ms): foo6@(eval):1 -> /tmp/_ruby_mjit_p9628u7.c
JIT success (25.1ms): foo7@(eval):1 -> /tmp/_ruby_mjit_p9628u8.c
JIT success (25.7ms): foo8@(eval):1 -> /tmp/_ruby_mjit_p9628u9.c
JIT compaction (4.9ms): Compacted 10 methods -> /tmp/_ruby_mjit_p9628u101.so
JIT success (23.9ms): foo9@(eval):1 -> /tmp/_ruby_mjit_p9628u10.c
^CTraceback (most recent call last):
1: from -e:1:in `<main>'
-e:1:in `pause': Interrupt
JIT success (62.2ms): foo10@(eval):1 -> /tmp/_ruby_mjit_p9628u11.c
Successful MJIT finish
</code></pre> Ruby master - Bug #15015 (Closed): Build failure from `git clone`https://redmine.ruby-lang.org/issues/150152018-08-21T01:06:16Zhsbt (Hiroshi SHIBATA)hsbt@ruby-lang.org
<p>I got build failure related mjit header.</p>
<pre><code>chkbuild002% make
BASERUBY = /usr/local/bin/ruby --disable=gems
CC = cc
LD = ld
LDSHARED = cc -shared
CFLAGS = -O3 -ggdb3 -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wno-tautological-compare -Wno-parentheses-equality -Wno-constant-logical-operand -Wno-self-assign -Wunused-variable -Werror=implicit-int -Werror=pointer-arith -Werror=write-strings -Werror=declaration-after-statement -Werror=shorten-64-to-32 -Werror=implicit-function-declaration -Werror=division-by-zero -Werror=deprecated-declarations -Wno-overlength-strings -Wmissing-noreturn -Werror=extra-tokens -std=gnu99
XCFLAGS = -D_FORTIFY_SOURCE=2 -fstack-protector -fno-strict-overflow -DRUBY_DEVEL=1 -fvisibility=hidden -DRUBY_EXPORT -fPIE -DCANONICALIZATION_FOR_MATHN
CPPFLAGS = -I. -I.ext/include/x86_64-freebsd11.2 -I./include -I. -I./enc/unicode/10.0.0
DLDFLAGS = -Wl,-soname,showflags -fstack-protector -pie
SOLIBS = -lelf -lexecinfo -lprocstat -lthr -lrt -lrt -ldl -lcrypt -lm
LANG = en_US.UTF-8
LC_ALL =
LC_CTYPE =
FreeBSD clang version 6.0.0 (tags/RELEASE_600/final 326565) (based on LLVM 6.0.0)
Target: x86_64-unknown-freebsd11.2
Thread model: posix
InstalledDir: /usr/bin
translating probes probes.d
generating id.h
id.h updated
generating insns.inc
generating insns_info.inc
/usr/local/bin/ruby --disable=gems ./tool/gen_dummy_probes.rb ./probes.d > probes.dmyh
generating vm.inc
generating vm_call_iseq_optimized.inc
generating vmtc.inc
compiling vm.c
building rb_mjit_header.h
rb_mjit_header.h updated
./tool/ifchange: cannot create .ext/.timestamp/rb_mjit_header.time: No such file or directory
*** Error code 2
</code></pre>
<p>I manually create <code>mkdir -p .ext/.timestamp</code>. After that, it works.</p> Ruby master - Bug #14964 (Closed): [MJIT] missing builtin methodshttps://redmine.ruby-lang.org/issues/149642018-08-05T11:00:50Zahorek (Pavel Rosický)
<p>I'm having trouble building Ruby 2.6 on Windows.</p>
<p>this is the first error:</p>
<pre><code>building rb_mjit_header.h
rb_mjit_header.h updated
building .ext/include/x64-mingw32/rb_mjit_min_header-2.6.0.h
./miniruby.exe -I../ruby_2_6/lib -I. -I.ext/common ../ruby_2_6/tool/transform_mjit_header.rb "x86_64-w64-mingw32-gcc " rb_mjit_header.h .ext/include/x64-mingw32/rb_mjit_min_header-2.6.0.h
error in initial header file:
C:/Users/pdaho/AppData/Local/Temp/20180805-10076-12b1zho.c:1: warning: "__STDC__" redefined
#define __STDC__ 1
<built-in>: note: this is the location of the previous definition
C:/Users/pdaho/AppData/Local/Temp/20180805-10076-12b1zho.c:2: warning: "__STDC_VERSION__" redefined
#define __STDC_VERSION__ 201710L
<built-in>: note: this is the location of the previous definition
C:/Users/pdaho/AppData/Local/Temp/20180805-10076-12b1zho.c:3: warning: "__STDC_UTF_16__" redefined
#define __STDC_UTF_16__ 1
<built-in>: note: this is the location of the previous definition
C:/Users/pdaho/AppData/Local/Temp/20180805-10076-12b1zho.c:4: warning: "__STDC_UTF_32__" redefined
#define __STDC_UTF_32__ 1
<built-in>: note: this is the location of the previous definition
C:/Users/pdaho/AppData/Local/Temp/20180805-10076-12b1zho.c:5: warning: "__STDC_HOSTED__" redefined
#define __STDC_HOSTED__ 1
<built-in>: note: this is the location of the previous definition
C:/Users/pdaho/AppData/Local/Temp/20180805-10076-12b1zho.c:29: warning: "__BIGGEST_ALIGNMENT__" redefined
#define __BIGGEST_ALIGNMENT__ 32
<built-in>: note: this is the location of the previous definition
C:/Users/pdaho/AppData/Local/Temp/20180805-10076-12b1zho.c: In function '__crc32b':
C:/Users/pdaho/AppData/Local/Temp/20180805-10076-12b1zho.c:6216:10: error: implicit declaration of function '__builtin_ia32_crc32qi'; did you mean '__builtin_ia32_rolqi'? [-Werror=implicit-function-declaration]
return __builtin_ia32_crc32qi (__C, __V);
^~~~~~~~~~~~~~~~~~~~~~
__builtin_ia32_rolqi
compilation terminated due to -Wfatal-errors.
cc1.exe: some warnings being treated as errors
make: *** [.ext/include/x64-mingw32/rb_mjit_min_header-2.6.0.h] Error 1
rm x64-msvcrt-ruby260.rc
rake aborted!
</code></pre>
<p>I tried various CFLAGS, it looks like -mcrc32 helped</p>
<pre><code>building rb_mjit_header.h
rb_mjit_header.h updated
building .ext/include/x64-mingw32/rb_mjit_min_header-2.6.0.h
./miniruby.exe -I../ruby_2_6/lib -I. -I.ext/common ../ruby_2_6/tool/transform_mjit_header.rb "x86_64-w64-mingw32-gcc " rb_mjit_header.h .ext/include/x64-mingw32/rb_mjit_min_header-2.6.0.h
error in initial header file:
C:/Users/pdaho/AppData/Local/Temp/20180805-1196-12y4d1j.c:1: warning: "__STDC__" redefined
#define __STDC__ 1
<built-in>: note: this is the location of the previous definition
C:/Users/pdaho/AppData/Local/Temp/20180805-1196-12y4d1j.c:2: warning: "__STDC_VERSION__" redefined
#define __STDC_VERSION__ 201710L
<built-in>: note: this is the location of the previous definition
C:/Users/pdaho/AppData/Local/Temp/20180805-1196-12y4d1j.c:3: warning: "__STDC_UTF_16__" redefined
#define __STDC_UTF_16__ 1
<built-in>: note: this is the location of the previous definition
C:/Users/pdaho/AppData/Local/Temp/20180805-1196-12y4d1j.c:4: warning: "__STDC_UTF_32__" redefined
#define __STDC_UTF_32__ 1
<built-in>: note: this is the location of the previous definition
C:/Users/pdaho/AppData/Local/Temp/20180805-1196-12y4d1j.c:5: warning: "__STDC_HOSTED__" redefined
#define __STDC_HOSTED__ 1
<built-in>: note: this is the location of the previous definition
C:/Users/pdaho/AppData/Local/Temp/20180805-1196-12y4d1j.c: In function '_mm_stream_sd':
C:/Users/pdaho/AppData/Local/Temp/20180805-1196-12y4d1j.c:9317:3: error: implicit declaration of function '__builtin_ia32_movntsd'; did you mean '__builtin_ia32_movntpd'? [-Werror=implicit-function-declaration]
__builtin_ia32_movntsd (__P, (__v2df) __Y);
^~~~~~~~~~~~~~~~~~~~~~
__builtin_ia32_movntpd
compilation terminated due to -Wfatal-errors.
cc1.exe: some warnings being treated as errors
make: *** [.ext/include/x64-mingw32/rb_mjit_min_header-2.6.0.h] Error 1
rm x64-msvcrt-ruby260.rc
rake aborted!
</code></pre>
<p>I tried to add -march=barcelona -mtune=barcelona -msse4a as the gcc documentation says, but it didn't help. It looks like these instruction are SSE4a specific and some headers are missing.</p>
<p>rev. <a href="https://github.com/ruby/ruby/commit/88975c821c99b852959958e2934de68a45be15e6" class="external">https://github.com/ruby/ruby/commit/88975c821c99b852959958e2934de68a45be15e6</a><br>
Windows 10 64bit, x86_64-w64-mingw32<br>
GCC 7.2.0 - <a href="http://downloads.sourceforge.net/project/mingw-w64/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/7.2.0/threads-win32/seh" class="external">http://downloads.sourceforge.net/project/mingw-w64/Toolchains%20targetting%20Win64/Personal%20Builds/mingw-builds/7.2.0/threads-win32/seh</a><br>
AMD FX-8300 8C</p>
<p>I can compile the lastest Ruby 2.5.1 with the same options.</p>
<p>Is it a known problem? Maybe GCC isn't supported on Windows yet?</p> Ruby master - Bug #14949 (Closed): test_jit.rb test_unload_units fails on 32-bithttps://redmine.ruby-lang.org/issues/149492018-07-29T23:18:00Znormalperson (Eric Wong)normalperson@yhbt.net
<p>I get multiple definition warnings from this test. It only<br>
happens on my 32-bit systems (both VM and real HW) on Debian 9.<br>
Attached log was made with below patch:</p>
<pre><code>--- a/test/ruby/test_jit.rb
+++ b/test/ruby/test_jit.rb
@@ -541,32 +541,33 @@ def test_unload_units
Dir.mktmpdir("jit_test_unload_units_") do |dir|
# MIN_CACHE_SIZE is 10
out, err = eval_with_jit({"TMPDIR"=>dir}, "#{<<~"begin;"}\n#{<<~'end;'}", verbose: 1, min_calls: 1, max_cache: 10)
begin;
10.times do |i|
eval(<<-EOS)
def mjit#{i}
print #{i}
end
mjit#{i}
EOS
end
end;
assert_equal('0123456789', out)
compactions, errs = err.lines.partition do |l|
l.match?(/\AJIT compaction \(\d+\.\dms\): Compacted \d+ methods ->/)
end
assert_match(/\A#{JIT_SUCCESS_PREFIX}: block in <main>@-e:/, errs[0])
9.times do |i|
assert_match(/\A#{JIT_SUCCESS_PREFIX}: mjit#{i}@\(eval\):/, errs[i + 1])
end
+ warn "errs: #{errs.join}"
assert_equal("Too many JIT code -- 1 units unloaded\n", errs[10])
assert_match(/\A#{JIT_SUCCESS_PREFIX}: mjit9@\(eval\):/, errs[11])
# On --jit-wait, when the number of JIT-ed code reaches --jit-max-cache,
# it should trigger compaction.
assert_equal(2, compactions.size)
# verify .o files are deleted on unload_units
assert_send([Dir, :empty?, dir])
end
end
</code></pre> Ruby master - Bug #14948 (Closed): MinGW Failure - r64072 - test_jit.rb: test_compile_insn_putspe...https://redmine.ruby-lang.org/issues/149482018-07-28T23:43:21ZMSP-Greg (Greg L)
<p>Starting with r64076, every subsequent build has failed, both in parallel & retry, on <code>TestJIT#test_unload_units</code>.</p>
<p>Finally ran it locally, below is the log of running the whole test file/suite.</p>
<p>Thanks again, Greg</p>
<pre><code> 1) Skipped:
TestJIT#test_compile_insn_getblockparamproxy [test/ruby/test_jit.rb:94]:
support this in mjit_compile
2) Skipped:
TestJIT#test_compile_insn_opt_call_c_function [test/ruby/test_jit.rb:527]:
support this in opt_call_c_function (low priority)
3) Skipped:
TestJIT#test_compile_insn_reput [test/ruby/test_jit.rb:260]:
write test
4) Skipped:
TestJIT#test_compile_insn_tracecoverage [test/ruby/test_jit.rb:291]:
write test
5) Skipped:
TestJIT#test_compile_insn_defineclass [test/ruby/test_jit.rb:295]:
support this in mjit_compile (low priority)
6) Failure:
TestJIT#test_unload_units [test/ruby/test_jit.rb:830]:
Failed to run script with JIT:
'''
10.times do |i|
eval(<<-EOS)
def mjit#{i}
print #{i}
end
mjit#{i}
EOS
end
'''
stdout:
'''
'''
stderr:
'''
JIT success (1462.4ms): block in <main>@-e:2 -> C:/Greg/temp/jit_test_clean_so_20180728-14960-771wan/_ruby_mjit_p1848u0.c
JIT success (1421.3ms): mjit0@(eval):1 -> C:/Greg/temp/jit_test_clean_so_20180728-14960-771wan/_ruby_mjit_p1848u1.c
-e:3: [BUG] Segmentation fault
ruby 2.6.0dev (2018-07-28 trunk 64082) [x64-mingw32]
-- Control frame information -----------------------------------------------
c:0005 p:---- s:0018 e:000017 CFUNC :to_s
c:0004 p:0000 s:0014 e:000013 BLOCK -e:3 [FINISH]
c:0003 p:---- s:0010 e:000009 CFUNC :times
c:0002 p:0006 s:0006 e:000005 EVAL -e:2 [FINISH]
c:0001 p:0000 s:0003 E:0008d0 (none) [FINISH]
-- Ruby level backtrace information ----------------------------------------
-e:2:in `<main>'
-e:2:in `times'
-e:3:in `block in <main>'
-e:3:in `to_s'
-- C level backtrace information -------------------------------------------
C:\WINDOWS\SYSTEM32\ntdll.dll(NtWaitForSingleObject+0x14) [0x00007ffa80979f34]
C:\WINDOWS\System32\KERNELBASE.dll(WaitForSingleObjectEx+0xa2) [0x00007ffa7db29252]
bin\x64-msvcrt-ruby260.dll(rb_print_backtrace+0x36) [0x000000006a5e65a6]
bin\x64-msvcrt-ruby260.dll(rb_vm_bugreport+0x6d) [0x000000006a5e661d]
bin\x64-msvcrt-ruby260.dll(rb_bug_context+0x69) [0x000000006a4a7719]
bin\x64-msvcrt-ruby260.dll(rb_check_safe_obj+0xd20) [0x000000006a578370]
[0x0000000000402397]
C:\WINDOWS\System32\msvcrt.dll(_C_specific_handler+0x98) [0x00007ffa800c7c58]
C:\WINDOWS\SYSTEM32\ntdll.dll(_chkstk+0x11d) [0x00007ffa8097eced]
C:\WINDOWS\SYSTEM32\ntdll.dll(RtlWalkFrameChain+0x13f6) [0x00007ffa808e6c86]
C:\WINDOWS\SYSTEM32\ntdll.dll(KiUserExceptionDispatcher+0x2e) [0x00007ffa8097dc1e]
bin\x64-msvcrt-ruby260.dll(rb_class_real+0x5) [0x000000006a50ff65]
bin\x64-msvcrt-ruby260.dll(rb_class_name+0x9) [0x000000006a5c4e79]
bin\x64-msvcrt-ruby260.dll(rb_inspect+0x188) [0x000000006a5102f8]
[0x00000000704c6888]
[0x00000000704c760e]
[0x00000000704c9768]
C:\Greg\temp\jit_test_clean_so_20180728-14960-771wan\_ruby_mjit_p1848u0.so(mjit0+0x2a1) [0x00000000704ca231]
bin\x64-msvcrt-ruby260.dll(rb_vm_exec+0x6f7) [0x000000006a5d2c67]
bin\x64-msvcrt-ruby260.dll(rb_yield_1+0x2e5) [0x000000006a5defc5]
bin\x64-msvcrt-ruby260.dll(rb_int_abs+0x3e1) [0x000000006a5025b1]
bin\x64-msvcrt-ruby260.dll(rb_error_arity+0x10b) [0x000000006a5cc1fb]
bin\x64-msvcrt-ruby260.dll(rb_yield_block+0xc48) [0x000000006a5dffb8]
bin\x64-msvcrt-ruby260.dll(rb_check_funcall+0x197b) [0x000000006a5d9d2b]
bin\x64-msvcrt-ruby260.dll(rb_vm_exec+0x9e) [0x000000006a5d260e]
bin\x64-msvcrt-ruby260.dll(rb_call_end_proc+0x189) [0x000000006a4aaf09]
bin\x64-msvcrt-ruby260.dll(ruby_run_node+0x59) [0x000000006a4ae1c9]
[0x0000000000402ccb]
[0x00000000004013c7]
[0x00000000004014fb]
C:\WINDOWS\System32\KERNEL32.DLL(BaseThreadInitThunk+0x14) [0x00007ffa803c3034]
-- Other runtime information -----------------------------------------------
* Loaded script: -e
* Loaded features:
0 enumerator.so
1 thread.rb
2 rational.so
3 complex.so
4 lib/ruby/2.6.0/x64-mingw32/enc/encdb.so
5 lib/ruby/2.6.0/x64-mingw32/enc/trans/transdb.so
6 lib/ruby/2.6.0/x64-mingw32/enc/windows_1252.so
[NOTE]
You may have encountered a bug in the Ruby interpreter or extension libraries.
Bug reports are welcome.
For details: http://www.ruby-lang.org/bugreport.html
'''
.
<true> expected but was
<false>.
Finished tests in 236.887729s, 0.3293 tests/s, 1.9967 assertions/s.
78 tests, 473 assertions, 1 failures, 0 errors, 5 skips
ruby -v: ruby 2.6.0dev (2018-07-28 trunk 64082) [x64-mingw32]```
</code></pre> Ruby master - Misc #14902 (Closed): Replace benchmark/driver.rb with benchmark_driver.gemhttps://redmine.ruby-lang.org/issues/149022018-07-08T03:05:24Zk0kubun (Takashi Kokubun)takashikkbn@gmail.com
<a name="Whats-benchmark_drivergem"></a>
<h2 >What's benchmark_driver.gem?<a href="#Whats-benchmark_drivergem" class="wiki-anchor">¶</a></h2>
<p>benchmark_driver.gem is a gem created by a project accepted as Ruby Association Grant 2017.<br>
<a href="https://github.com/benchmark-driver/benchmark-driver" class="external">https://github.com/benchmark-driver/benchmark-driver</a></p>
<p>This is built as a general-purpose benchmark driver for Ruby and allows to collect any metric and to output in any way by writing plugins.</p>
<a name="Why-to-replace-benchmarkdriverrb"></a>
<h2 >Why to replace benchmark/driver.rb?<a href="#Why-to-replace-benchmarkdriverrb" class="wiki-anchor">¶</a></h2>
<p>First of all, the benchmark_driver.gem is created as a successor of benchmark/driver.rb, requested by ko1 (author of benchmark/driver.rb).<br>
After the yesterday's project report of Ruby Association Grant 2017, ko1 and I agreed to replace benchmark/driver.rb with benchmark_driver.gem.<br>
So I'll start working on this.</p>
<a name="How-to-replace-benchmarkdriverrb"></a>
<h2 >How to replace benchmark/driver.rb?<a href="#How-to-replace-benchmarkdriverrb" class="wiki-anchor">¶</a></h2>
<p>Some metrics supported by benchmark/driver.rb can't be collected by benchmark_driver.gem by default for now, but I'll leave them as plugins of benchmark_driver.gem.<br>
It's a gem implemented outside this repository, but I'm going to implement make task to clone the gem repository like simplecov.</p>
<p>Unfortunately the scripts in benchmark directory can't be run by benchmark_driver.gem by default. So I'll implement some wrapper script to allow benchmark_driver.gem to run them at first, rewrite benchmark scripts to benchmark_driver.gem format one by one, drop old scripts and benchmark/driver.gem in the end.</p>
<p>During the migration, I'm going to keep the interface of <code>make benchmark</code> and <code>make benchmark-each</code>, but directly running benchmark/driver.rb will be broken at some moment.</p> Ruby master - Bug #14892 (Closed): r63763 breaks -DMJIT_FORCE_ENABLE=1https://redmine.ruby-lang.org/issues/148922018-07-03T09:51:56Znormalperson (Eric Wong)normalperson@yhbt.net
<p>r63763 ("give up insn attr handles_frame") breaks -DMJIT_FORCE_ENABLE=1</p>
<p>(commit 6b534134a78e3e43c344682c3585e1abab015216 in git)<br>
Related [Bug <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug: calc_lineno() returns wrong location (Closed)" href="https://redmine.ruby-lang.org/issues/14809">#14809</a>] [Bug <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug: rb_profile_frames SEGV when PC adjusted on IFUNC (Closed)" href="https://redmine.ruby-lang.org/issues/14834">#14834</a>]</p>
<p>Is this being worked on? I mentioned it in <a href="/issues/14867">[ruby-core:87674]</a>,<br>
"make test" fails in test_insns.rb for me on Debian 9 (x86 and amd64).<br>
Not sure what's wrong.</p>
<p>Reverting that commit allows even "make exam" to pass for me.</p> Ruby master - Feature #14878 (Closed): Add command line argument to deactivate JIThttps://redmine.ruby-lang.org/issues/148782018-06-28T17:09:54Znoahgibbs (Noah Gibbs)
<p>For Ruby 2.6, JIT is off by default. But if a particular application can't use JIT for some reason, it may want to explicitly turn JIT off, even for later Ruby versions that have JIT on by default.</p>
<p>It would be useful to have a --jit-disable command line option to turn JIT off explicitly for later Ruby versions. This option should do nothing in Ruby 2.6.</p>
<p>Why turn JIT off? Some possible reasons:</p>
<ul>
<li>benchmarking</li>
<li>no compiler installed</li>
<li>known compiler/library bug in non-Ruby system software</li>
<li>short program run-time so JIT won't help</li>
<li>very tight memory constraints, don't want to start a compiler process</li>
<li>read-only file system so you can't write .c files</li>
</ul>
<p>I'm not married to the name "--jit-disable". I'd be fine with "--no-jit" or "--disable=jit", etc. But there should be an option to disable JIT in future Ruby versions.</p> Ruby master - Misc #14854 (Closed): mjit (2.6.0-preview2) enabled on cygwinhttps://redmine.ruby-lang.org/issues/148542018-06-19T12:14:23Zfd0 (Daisuke Fujimura)
<p>cygwin で 2.6.0-preview2 の mjit をとりあえずで動かせるようにしてみました。<br>
(コンパイルできるだけのレベル)</p>
<p>patch & log<br>
<a href="https://gist.github.com/fd00/80b25c33ffef0651b7214d19e722848f" class="external">https://gist.github.com/fd00/80b25c33ffef0651b7214d19e722848f</a></p>
<p>cygwin だと必ず false になるという都合で<br>
pthread_attr_setscope(&attr, PTHREAD_SCOPE_SYSTEM) == 0 を<br>
コメントアウトしてますが、この関数が必須なら cygwin で mjit は<br>
動かさない方が良いということだと思います。</p> Ruby master - Feature #14830 (Closed): RubyVM::MJIT.pause / RubyVM::MJIT.resumehttps://redmine.ruby-lang.org/issues/148302018-06-06T15:52:52Zk0kubun (Takashi Kokubun)takashikkbn@gmail.com
<p>This ticket is picking only MJIT.pause from <a href="https://bugs.ruby-lang.org/issues/14491" class="external">https://bugs.ruby-lang.org/issues/14491</a> and adding MJIT.resume.</p>
<a name="Purpose"></a>
<h1 >Purpose<a href="#Purpose" class="wiki-anchor">¶</a></h1>
<ul>
<li>When benchmarking JIT-ed code, I want to get rid of bad impact for performance that comes from ongoing JIT compilation, without waiting for all JIT compilation finish.</li>
<li>To make it easy to maintain Ruby's test cases that expect there is no child process with --jit. Using --jit makes them fail by existence of gcc or clang process, and I don't want to wait all JIT compilation finish to make it pass.</li>
</ul>
<a name="Proposals"></a>
<h1 >Proposals<a href="#Proposals" class="wiki-anchor">¶</a></h1>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="c1"># Pause MJIT compilations but keep JIT-ed code available</span>
<span class="no">RubyVM</span><span class="o">::</span><span class="no">MJIT</span><span class="p">.</span><span class="nf">pause</span>
<span class="c1"># Start MJIT compilations again after the MJIT.pause</span>
<span class="no">RubyVM</span><span class="o">::</span><span class="no">MJIT</span><span class="p">.</span><span class="nf">resume</span>
</code></pre>
<a name="Details"></a>
<h1 >Details<a href="#Details" class="wiki-anchor">¶</a></h1>
<a name="RubyVMMJITpause"></a>
<h2 >RubyVM::MJIT.pause<a href="#RubyVMMJITpause" class="wiki-anchor">¶</a></h2>
<ul>
<li>When MJIT is disabled (without --jit), it raises RuntimeError: "MJIT is not enabled".</li>
<li>When MJIT is enabled,
<ul>
<li>and when MJIT is paused, it does nothing and returns false.</li>
<li>and when MJIT is running, it blocks to wait for current JIT finish, pauses MJIT worker and returns true.</li>
</ul>
</li>
</ul>
<a name="RubyVMMJITresume"></a>
<h2 >RubyVM::MJIT.resume<a href="#RubyVMMJITresume" class="wiki-anchor">¶</a></h2>
<ul>
<li>When MJIT is disabled (without --jit), it raises RuntimeError: "MJIT is not enabled".</li>
<li>When MJIT is enabled,
<ul>
<li>and when MJIT is paused, it starts MJIT worker and returns true. It raises RuntimeError if it fails to resume (very rare).</li>
<li>and when MJIT is running, it does nothing and returns false.</li>
</ul>
</li>
</ul> Ruby master - Bug #14730 (Closed): [MJIT] lambda stack consistency errorhttps://redmine.ruby-lang.org/issues/147302018-05-01T19:42:46Zahorek (Pavel Rosický)
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">fib</span> <span class="o">=</span> <span class="nb">lambda</span> <span class="k">do</span> <span class="o">|</span><span class="n">x</span><span class="o">|</span>
<span class="k">return</span> <span class="n">x</span> <span class="k">if</span> <span class="n">x</span> <span class="o">==</span> <span class="mi">0</span> <span class="o">||</span> <span class="n">x</span> <span class="o">==</span> <span class="mi">1</span>
<span class="n">fib</span><span class="p">.</span><span class="nf">call</span><span class="p">(</span><span class="n">x</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> <span class="o">+</span> <span class="n">fib</span><span class="p">.</span><span class="nf">call</span><span class="p">(</span><span class="n">x</span><span class="o">-</span><span class="mi">2</span><span class="p">)</span>
<span class="k">end</span>
<span class="n">fib</span><span class="p">.</span><span class="nf">call</span><span class="p">(</span><span class="mi">35</span><span class="p">)</span>
</code></pre>
<pre><code>ruby --jit fib.rb
...
Stack consistency error (sp: 119, bp: 118) (fatal)
== disasm: #<ISeq:block in <main>@fib.rb:1 (1,13)-(4,3)> (catch: FALSE)
== catch table
| catch type: redo st: 0001 ed: 0048 sp: 0000 cont: 0001
| catch type: next st: 0001 ed: 0048 sp: 0000 cont: 0048
|------------------------------------------------------------------------
local table (size: 1, argc: 1 [opts: 0, rest: -1, post: 0, block: -1, kw: -1@-1, kwrest: -1])
[ 1] x@0<Arg>
0000 nop ( 1)[Bc]
0001 getlocal_WC_0 x@0 ( 2)[Li]
0003 putobject_INT2FIX_0_
0004 opt_eq <callinfo!mid:==, argc:1, ARGS_SIMPLE>, <callcache>
0007 branchif 17
0009 getlocal_WC_0 x@0
0011 putobject_INT2FIX_1_
0012 opt_eq <callinfo!mid:==, argc:1, ARGS_SIMPLE>, <callcache>
0015 branchunless 22
0017 getlocal_WC_0 x@0
0019 throw 1
0021 pop
0022 getlocal_WC_1 fib@0 ( 3)[Li]
0024 getlocal_WC_0 x@0
0026 putobject_INT2FIX_1_
0027 opt_minus <callinfo!mid:-, argc:1, ARGS_SIMPLE>, <callcache>
0030 opt_send_without_block <callinfo!mid:call, argc:1, ARGS_SIMPLE>, <callcache>
0033 getlocal_WC_1 fib@0
0035 getlocal_WC_0 x@0
0037 putobject 2
0039 opt_minus <callinfo!mid:-, argc:1, ARGS_SIMPLE>, <callcache>
0042 opt_send_without_block <callinfo!mid:call, argc:1, ARGS_SIMPLE>, <callcache>
0045 opt_plus <callinfo!mid:+, argc:1, ARGS_SIMPLE>, <callcache>
0048 leave ( 4)[Br]
</code></pre>
<pre><code>ruby -v
ruby 2.6.0dev (2018-05-01 trunk 63314) [x86_64-linux]
</code></pre> Ruby master - Feature #14491 (Closed): MJIT needs internal debugging methodshttps://redmine.ruby-lang.org/issues/144912018-02-19T01:40:56Zsam.saffron (Sam Saffron)sam.saffron@gmail.com
<a name="Issue"></a>
<h3 >Issue<a href="#Issue" class="wiki-anchor">¶</a></h3>
<p>Doing careful analysis of MJIT performance is very hard cause there is no way of instrumenting this in runtime</p>
<a name="Proposal"></a>
<h3 >Proposal<a href="#Proposal" class="wiki-anchor">¶</a></h3>
<ol>
<li>
<p>Add <code>MJIT.enable</code>, <code>MJIT.disable</code>, <code>MJIT.pause</code> methods.</p>
<ul>
<li>
<code>MJIT.pause</code> will continue using MJIT for execution but will no longer compile new fragments</li>
</ul>
</li>
<li>
<p>Add <code>MJIT.trace</code> or similar that returns a block for key compile start / compile end operations.</p>
</li>
</ol>
<pre><code>MJIT.trace do |klass, method, line, operation, duration|
end
</code></pre>
<p>This will allow simpler analysis of MJITs performance.</p> Ruby master - Bug #14490 (Closed): MJIT slows down Rails applicationshttps://redmine.ruby-lang.org/issues/144902018-02-19T01:36:37Zsam.saffron (Sam Saffron)sam.saffron@gmail.com
<p>This was reported earlier but I would like to add some test methodology here: (tested using Discourse)</p>
<a name="What-I-tested"></a>
<h3 >What I tested<a href="#What-I-tested" class="wiki-anchor">¶</a></h3>
<ol>
<li>
<p>Run <code>ruby script/bench.rb</code> to warm up profiling database</p>
</li>
<li>
<p>Run <code>RUBYOPT='--jit --jit-verbose=1 --jit-max-cache=10000' RAILS_ENV=profile bin/puma -e production</code></p>
<ol>
<li>Increasing the cache size is an attempt to get higher hit rates</li>
</ol>
</li>
<li>
<p>WAIT 5-15 or so minutes for all jitting to stop so we have no cross talk</p>
</li>
<li>
<p>Run <code>ab -n 100 http://localhost:9292/</code></p>
</li>
<li>
<p>Wait for all new jitting to finish</p>
</li>
<li>
<p>Run <code>ab -n 100 http://localhost:9292/</code></p>
</li>
</ol>
<p>The absolute best I get is around <strong>61ms</strong> median for the test. With MJIT</p>
<p>This is MJIT results!</p>
<pre><code>Percentage of the requests served within a certain time (ms)
50% 61
66% 63
75% 70
80% 71
90% 73
95% 83
98% 106
99% 109
100% 109 (longest request)
</code></pre>
<p>Compared to w/o MJIT which is:</p>
<pre><code>Percentage of the requests served within a certain time (ms)
50% 47
66% 48
75% 50
80% 51
90% 60
95% 62
98% 75
99% 77
100% 77 (longest request)
</code></pre>
<a name="Theory-on-why-this-happens"></a>
<h3 >Theory on why this happens<a href="#Theory-on-why-this-happens" class="wiki-anchor">¶</a></h3>
<p>I suspect this is happening cause we are introducing new overhead to every single method dispatch (counting for mjit, and hash lookup and so on). This overhead adds up.</p> Ruby master - Feature #14489 (Rejected): MJIT needs a reusable cachehttps://redmine.ruby-lang.org/issues/144892018-02-19T01:10:31Zsam.saffron (Sam Saffron)sam.saffron@gmail.com
<p>Currently on Discourse boot I notice a few minutes of jitting every time you boot it:</p>
<p>This is a redacted output: <a href="https://gist.github.com/SamSaffron/4e18c2dacf476f1f27275f5b5d7bbb97" class="external">https://gist.github.com/SamSaffron/4e18c2dacf476f1f27275f5b5d7bbb97</a></p>
<p>CPU is spinning hard compiling temp file after temp file for <strong>minutes</strong>:</p>
<blockquote>
<p>JIT success (213.1ms): platform_string@/home/sam/.rbenv/versions/master/lib/ruby/gems/2.6.0/gems/bundler-1.16.1/lib/bundler/lazy_specification.rb:18 -> /tmp/_ruby_mjit_p6914u199.c</p>
</blockquote>
<p>and so on.</p>
<p>Instead, mjit should have a reusable cache on disk it first tries fetching from prior to re-compiling. It can use an ISEQ SHA1 hash as the key to the cache.</p> Ruby master - Bug #14464 (Closed): MJIT & MinGW / gcc 7.3.0 seemed ok as of 62337, fail or skip a...https://redmine.ruby-lang.org/issues/144642018-02-11T14:37:04ZMSP-Greg (Greg L)
<p>First of all, a thank you to those working on MJIT.</p>
<p>At least three builds of ruby-loco MinGW passed the MJIT tests (62327, 62331, 62337), but after that, the tests have either failed or skipped. First fail was at 62341.</p>
<p>The most recent build (2018-02-11 trunk 62371), skipped with no timeout error in <code>jit_supported?</code> I haven't looked at patching <code>test_jit.rb</code> to see if I can get more info.</p>
<p>I don't know if this is a MinGW issue or a gcc 7.3.0 issue, but, given that it did work for a few builds, I would appreciate it if someone could look into it. Anything I can help with, I'm happy to.</p>
<p>Thanks, Greg</p> Ruby master - Feature #14462 (Closed): MJIT enabled should be displayed in the version stringhttps://redmine.ruby-lang.org/issues/144622018-02-10T21:23:43Zchrisseaton (Chris Seaton)chris@chrisseaton.com
<p>Whether or not MJIT is enabled will probably be an important part of diagnosing bugs. It's also useful for when benchmarking - we often run benchmarks with <code>-v</code>, and other implementations that have JITs give information about whether their JIT is enabled and with what basic options in this string.</p>
<p>For example TruffleRuby (Graal being the JIT)</p>
<pre><code>truffleruby 0.31, like ruby 2.3.5 <GraalVM 0.31 1.8.0_151-b12 with Graal> [darwin-x86_64]
</code></pre>
<p>And JRuby</p>
<pre><code>jruby 9.1.13.0 (2.3.3) 2017-09-06 8e1c115 Java HotSpot(TM) 64-Bit Server VM 25.144-b01 on 1.8.0_144-b01 +jit [darwin-x86_64]
</code></pre>
<p>CRuby could display the version string something like this</p>
<pre><code>ruby 2.6.0dev (2018-02-07 jit-version 62270) [x86_64-darwin17] +JIT
</code></pre>
<p>I've attached a patch, but I wasn't sure how to get the information into the version module, and I wasn't sure if <code>rb_version</code> was part of the API so I didn't want to modify that, so it may be a bit of a messy solution I'm afraid.</p> Ruby master - Bug #14457 (Closed): --jit outputs error when script changes $TMPDIRhttps://redmine.ruby-lang.org/issues/144572018-02-06T17:29:42Zk0kubun (Takashi Kokubun)takashikkbn@gmail.com
<p>Shibata-san reported the following output when running bundler's test with --jit (it looks implicitly passed).</p>
<pre><code>~/D/g/b/bundler (master) > rspec spec/resolver/basic_spec.rb
Run options: exclude {:bundler=>"=< 2.0", :rubygems_master=>true, :git=>"=< 2.16.1", :rubygems=>"=< 2.7.3", :ruby=>"=< 2.6.0", :realworld=>true, :sudo=>true}
Resolving
error: unable to open output file '/Users/hsbt/Documents/github.com/bundler/bundler/tmp/tmpdir/_ruby_mjitp36578u588-067cfe.o':
'No such file or directory'
1 error generated.
resolves a single gem
resolves a gem with dependencies
resolves a conflicting index
resolves a complex conflicting index
resolves a index with conflict on child
prefers explicitly requested dependencies when resolving an index which would otherwise be ambiguous
prefers non-prerelease resolutions in sort order
resolves a index with root level conflict on child
resolves a gem specified with a pre-release version
doesn't select a pre-release if not specified in the Gemfile
error: unable to rename temporary '/Users/hsbt/Documents/github.com/bundler/bundler/tmp/tmpdir/_ruby_mjitp36578u581-0e0a36.o-fb2ebbf9' to output file
'/Users/hsbt/Documents/github.com/bundler/bundler/tmp/tmpdir/_ruby_mjitp36578u581-0e0a36.o': 'No such file or directory'
1 error generated.
doesn't select a pre-release for sub-dependencies
selects a pre-release for sub-dependencies if it's the only option
raises an exception if a child dependency is not resolved
raises an exception with the minimal set of conflicting dependencies
should throw error in case of circular dependencies
should install the latest possible version of a direct requirement with no constraints given
error: unable to rename temporary '/Users/hsbt/Documents/github.com/bundler/bundler/tmp/tmpdir/_ruby_mjitp36578u21-cdf150.o-5817670c' to output file
'/Users/hsbt/Documents/github.com/bundler/bundler/tmp/tmpdir/_ruby_mjitp36578u21-cdf150.o': 'No such file or directory'
1 error generated.
should install the latest possible version of a direct requirement with constraints given
takes into account required_ruby_version
conservative
resolves all gems to latest patch
resolves all gems to latest patch strict
resolves foo only to latest patch - same dependency case
resolves foo only to latest patch - changing dependency not declared case
resolves foo only to latest patch - changing dependency declared case
resolves foo only to latest patch strict
resolves bar only to latest patch
resolves all gems to latest minor
resolves all gems to latest minor strict
resolves all gems to latest major
resolves all gems to latest major strict
revert to previous
could revert to a previous version level patch
cannot revert to a previous version in strict mode level patch
could revert to a previous version level minor
error: unable to rename temporary '/Users/hsbt/Documents/github.com/bundler/bundler/tmp/tmpdir/_ruby_mjitp36578u29-1ac956.o-5abdcabb' to output file
'/Users/hsbt/Documents/github.com/bundler/bundler/tmp/tmpdir/_ruby_mjitp36578u29-1ac956.o': 'No such file or directory'
cannot revert to a previous version in strict mode level minor
1 error generated.
Retried examples: 0
Finished in 1.97 seconds (files took 0.74158 seconds to load)
33 examples, 0 failures
~/D/g/b/bundler (master) >
</code></pre>
<p>The cause is that bundler's test is modifying $TMPDIR and gcc (or probably clang in the above example) is affected by it.</p>
<p>We should call execvpe with TMPDIR=/tmp (and PATH=xxx for cc1, etc.) instead of execvp to start compiler process. I'm not sure about what other environment variables are needed when we spawn the compiler process.</p> Ruby master - Bug #14441 (Closed): Dir.chroot results in segfault when used with --jithttps://redmine.ruby-lang.org/issues/144412018-02-04T16:50:18Zjeremyevans0 (Jeremy Evans)merch-redmine@jeremyevans.net
<p>Example code:</p>
<pre><code>$ ruby --jit --jit-cc=clang -e 'a = 0; Dir.chroot("."); 50000000.times{|i| a += i }; p a
-e:1: [BUG] Segmentation fault at 0x0000000000000058
ruby 2.6.0dev (2018-02-05 trunk 62211) [x86_64-openbsd]
-- Control frame information -----------------------------------------------
c:0003 p:---- s:0011 e:000010 CFUNC :times
c:0002 p:0022 s:0007 E:001d18 EVAL -e:1 [FINISH]
c:0001 p:0000 s:0003 E:001f20 (none) [FINISH]
-- Ruby level backtrace information ----------------------------------------
-e:1:in `<main>'
-e:1:in `times'
</code></pre>
<p>gdb:</p>
<pre><code>(gdb) bt
#0 thrkill () at -:3
#1 0x00000eaf81ad3b6e in _libc_abort () at /usr/src/lib/libc/stdlib/abort.c:51
#2 0x00000eaf7cd7f049 in die () at error.c:578
#3 0x00000eaf7cd7f225 in rb_bug_context (ctx=0xeafe4196e10, fmt=0xeaf7d10c7e1 "Segmentation fault at %p") at error.c:608
#4 0x00000eaf7cee4937 in sigsegv (sig=11, info=0xeafe4196f00, ctx=0xeafe4196e10) at signal.c:933
#5 <signal handler called>
#6 __vfprintf (fp=0x0, fmt0=0xeaf7d0e94a0 "/* %s@%s:%d */\n\n", ap=0xeafe4197ab0) at /usr/src/lib/libc/stdio/vfprintf.c:458
#7 0x00000eaf81a7d3a3 in _libc_vfprintf (fp=0x0, fmt0=0xeaf7d0e94a0 "/* %s@%s:%d */\n\n", ap=0xeafe4197ab0) at /usr/src/lib/libc/stdio/vfprintf.c:263
#8 0x00000eaf81a90996 in _libc_fprintf (fp=Variable "fp" is not available.
) at /usr/src/lib/libc/stdio/fprintf.c:44
#9 0x00000eaf7cdfed0b in convert_unit_to_func (unit=0xeafddcc4220) at mjit.c:736
#10 0x00000eaf7cdfdc73 in worker () at mjit.c:817
#11 0x00000eaf7cf321d2 in mjit_worker (arg=0xeaf7cdfdb20) at thread_pthread.c:1788
#12 0x00000eaf598395fe in _rthread_start (v=Variable "v" is not available.
) at /usr/src/lib/librthread/rthread.c:96
#13 0x00000eaf81a8ae3b in __tfork_thread () at /usr/src/lib/libc/arch/amd64/sys/tfork_thread.S:75
#14 0x0000000000000000 in ?? ()
(gdb) info threads
3 process 384917 _thread_sys_poll () at -:3
2 process 562197 VM_FRAME_CFRAME_P (cfp=0xeafd148af20) at vm_core.h:1141
* 1 process 417946 thrkill () at -:3
(gdb) thread 2
[Switching to thread 2 (process 562197)]#0 VM_FRAME_CFRAME_P (cfp=0xeafd148af20) at vm_core.h:1141
1141 int cframe_p = VM_ENV_FLAGS(cfp->ep, VM_FRAME_FLAG_CFRAME) != 0;
Current language: auto; currently minimal
(gdb) bt
#0 VM_FRAME_CFRAME_P (cfp=0xeafd148af20) at vm_core.h:1141
#1 0x00000eaf7cf822a5 in VM_FRAME_RUBYFRAME_P (cfp=0xeafd148af20) at vm_core.h:1149
#2 0x00000eaf7cf86090 in vm_base_ptr (cfp=0xeafd148af20) at vm_insnhelper.c:1537
#3 0x00000eaf7cf7492c in vm_exec_core (ec=0xeafa3125248, initial=0) at insns.def:838
#4 0x00000eaf7cf84b9c in vm_exec (ec=0xeafa3125248) at vm.c:1804
#5 0x00000eaf7cf9cf50 in invoke_block (ec=0xeafa3125248, iseq=0xeaf0be77688, self=16148754916040, captured=0xeafd148afa8, cref=0x0, type=572653569, opt_pc=0) at vm.c:1005
#6 0x00000eaf7cf9cd7b in invoke_iseq_block_from_c (ec=0xeafa3125248, captured=0xeafd148afa8, self=16148754916040, argc=1, argv=0x7f7ffffbc8e0, passed_block_handler=0, cref=0x0, is_lambda=0) at vm.c:1057
#7 0x00000eaf7cf9ca8e in invoke_block_from_c_bh (ec=0xeafa3125248, block_handler=16148293267369, argc=1, argv=0x7f7ffffbc8e0, passed_block_handler=0, cref=0x0, is_lambda=0, force_blockarg=0) at vm.c:1075
#8 0x00000eaf7cf9c9db in vm_yield (ec=0xeafa3125248, argc=1, argv=0x7f7ffffbc8e0) at vm.c:1120
#9 0x00000eaf7cf7ee83 in rb_yield_0 (argc=1, argv=0x7f7ffffbc8e0) at vm_eval.c:980
#10 0x00000eaf7cf7ee27 in rb_yield_1 (val=804333) at vm_eval.c:986
#11 0x00000eaf7ce2e7ac in int_dotimes (num=100000001) at numeric.c:4984
#12 0x00000eaf7cf9a733 in call_cfunc_0 (func=0xeaf7ce2e710 <int_dotimes>, recv=100000001, argc=0, argv=0xeafd138b040) at vm_insnhelper.c:1739
#13 0x00000eaf7cf8f257 in vm_call_cfunc_with_frame (ec=0xeafa3125248, reg_cfp=0xeafd148af90, calling=0x7f7ffffbda28, ci=0xeaf1105e6d0, cc=0xeaf6a057428) at vm_insnhelper.c:1928
#14 0x00000eaf7cf8a9fa in vm_call_cfunc (ec=0xeafa3125248, reg_cfp=0xeafd148af90, calling=0x7f7ffffbda28, ci=0xeaf1105e6d0, cc=0xeaf6a057428) at vm_insnhelper.c:1944
#15 0x00000eaf7cf89e7e in vm_call_method_each_type (ec=0xeafa3125248, cfp=0xeafd148af90, calling=0x7f7ffffbda28, ci=0xeaf1105e6d0, cc=0xeaf6a057428) at vm_insnhelper.c:2265
#16 0x00000eaf7cf89beb in vm_call_method (ec=0xeafa3125248, cfp=0xeafd148af90, calling=0x7f7ffffbda28, ci=0xeaf1105e6d0, cc=0xeaf6a057428) at vm_insnhelper.c:2391
#17 0x00000eaf7cf70d55 in vm_call_general (ec=0xeafa3125248, reg_cfp=0xeafd148af90, calling=0x7f7ffffbda28, ci=0xeaf1105e6d0, cc=0xeaf6a057428) at vm_insnhelper.c:2434
#18 0x00000eaf7cf73f37 in vm_exec_core (ec=0xeafa3125248, initial=0) at insns.def:718
#19 0x00000eaf7cf84b9c in vm_exec (ec=0xeafa3125248) at vm.c:1804
#20 0x00000eaf7cf8628b in rb_iseq_eval_main (iseq=0xeaf0e4f0328) at vm.c:2057
#21 0x00000eaf7cd8a354 in ruby_exec_internal (n=0xeaf0e4f0328) at eval.c:247
#22 0x00000eaf7cd8a20c in ruby_exec_node (n=0xeaf0e4f0328) at eval.c:311
#23 0x00000eaf7cd8a19b in ruby_run_node (n=0xeaf0e4f0328) at eval.c:303
#24 0x00000ead0570062c in main (argc=5, argv=0x7f7ffffbde08) at main.c:42
(gdb) thread 3
[Switching to thread 3 (process 384917)]#0 _thread_sys_poll () at -:3
3 -: No such file or directory.
in -
(gdb) bt
#0 _thread_sys_poll () at -:3
#1 0x00000eaf81a68b34 in _libc_poll_cancel (fds=Variable "fds" is not available.
) at /usr/src/lib/libc/sys/w_poll.c:27
#2 0x00000eaf7cf3def6 in timer_thread_sleep (gvl=0xeb002bab808) at thread_pthread.c:1433
#3 0x00000eaf7cf3dbae in thread_timer (p=0xeb002bab808) at thread_pthread.c:1552
#4 0x00000eaf598395fe in _rthread_start (v=Variable "v" is not available.
) at /usr/src/lib/librthread/rthread.c:96
#5 0x00000eaf81a8ae3b in __tfork_thread () at /usr/src/lib/libc/arch/amd64/sys/tfork_thread.S:75
#6 0x0000000000000000 in ?? ()
</code></pre> Ruby master - Bug #14440 (Closed): --jit does not work by default on OpenBSD due to use of gcc in...https://redmine.ruby-lang.org/issues/144402018-02-04T16:44:08Zjeremyevans0 (Jeremy Evans)merch-redmine@jeremyevans.net
<p>On OpenBSD, when using just <code>--jit</code>, ruby issues a warning message to <code>$stderr</code>:</p>
<pre><code>$ ruby --jit -e 'p 1'
.ext/include/x86_64-openbsd/rb_mjit_min_header-2.6.0.h:2924: error: wrong number of arguments specified for '__deprecated__' attribute
compilation terminated due to -Wfatal-errors.
1
</code></pre>
<p>This is probably because MJIT doesn't work on old versions of GCC:</p>
<pre><code>$ gcc -v
Reading specs from /usr/lib/gcc-lib/amd64-unknown-openbsd6.2/4.2.1/specs
Target: amd64-unknown-openbsd6.2
Configured with: OpenBSD/amd64 system compiler
Thread model: posix
gcc version 4.2.1 20070719
</code></pre>
<p>When using <code>--jit --jit-cc=clang</code>, there are no problems:</p>
<pre><code>$ ruby --jit --jit-cc=clang -e 'p 1'
1
</code></pre>
<p>Either <code>--jit</code> should be made to work with older GCC versions, or older GCC versions should be skipped. It seems like for now, skipping older GCC versions would be easier.</p> Ruby master - Bug #14439 (Closed): build failed on NetBSD 7.1 with MJIThttps://redmine.ruby-lang.org/issues/144392018-02-04T12:28:52Zusa (Usaku NAKAMURA)usa@garbagecollect.jp
<p>MJITマージおめでとうございます。<br>
というわけで手元のNetBSD/i386 7.1で試そうとしたら、残念ながらビルドエラーになりました。</p>
<pre><code>error in final header file:
/tmp/20180204-20715-187ick.c:4961:1: error: static declaration of ‘sigaddset’ follows non-static declaration
sigaddset(sigset_t *set, int signo)
^
compilation terminated due to -Wfatal-errors.
*** Error code 1
Stop.
</code></pre>
<p>よくわかりませんが、そのちょっと上で</p>
<pre><code>transform_mjit_header: making external definition of 'sigfillset' static inline
transform_mjit_header: making external definition of 'sigemptyset' static inline
transform_mjit_header: making external definition of 'sigismember' static inline
transform_mjit_header: making external definition of 'sigdelset' static inline
transform_mjit_header: making external definition of 'sigaddset' static inline
</code></pre>
<p>とか言ってるのですが、libc提供関数をどうにかしようとしてるのはまずそうな雰囲気を感じます。<br>
ちなみに、こいつらは /usr/include/signal.h の中でinline関数として定義されているっぽいです。</p>
<p>取り急ぎ報告まで。</p> Ruby master - Bug #14314 (Closed): Marshalling broken in Ruby 2.5.0 for Structs with keyword_init...https://redmine.ruby-lang.org/issues/143142018-01-04T12:47:32Zjurriaan (Jurriaan Pruis)
<p>Steps to reproduce:</p>
<pre><code>irb(main):001:0> Foo = Struct.new(:foo)
=> Foo
irb(main):002:0> Marshal.load(Marshal.dump(Foo.new('a')))
=> #<struct Foo foo="a">
irb(main):003:0> Bar = Struct.new(:bar, keyword_init: true)
=> Bar(keyword_init: true)
irb(main):004:0> Marshal.load(Marshal.dump(Bar.new(bar: 'a')))
Traceback (most recent call last):
3: from /home/jurriaan/.rubies/ruby-2.5.0/bin/irb:11:in `<main>'
2: from (irb):4
1: from (irb):4:in `load'
ArgumentError (wrong number of arguments (given 1, expected 0))
</code></pre>
<p>I expected the keyword_init: true struct to unmarshal correctly.</p>
<p>This issue is caused by marshal.c calling the struct initializer with regular arguments instead of keyword arguments.</p> Ruby master - Feature #14256 (Closed): Deprecate $SAFE support in ERB and let ERB.new take keywor...https://redmine.ruby-lang.org/issues/142562017-12-28T05:51:56Zk0kubun (Takashi Kokubun)takashikkbn@gmail.com
<p>See <a href="https://bugs.ruby-lang.org/issues/14250" class="external">https://bugs.ruby-lang.org/issues/14250</a>.</p>
<p>Proc-level $SAFE change does no longer make sense. This should be deprecated and then removed. But the problem is that the position of safe_level argument is in the middle of argument list of ERB#initialize.</p>
<p>So to remove it safely, we should make them keyword arguments and deprecate the current non-keyword-argument interface. Having both interfaces would be backward-compatible because all of arguments don't take {}.</p>
<a name="before"></a>
<h2 >before<a href="#before" class="wiki-anchor">¶</a></h2>
<pre><code>ERB.new("<%= 'foo' %>", 1, '%', '_erbout')
</code></pre>
<a name="after"></a>
<h2 >after<a href="#after" class="wiki-anchor">¶</a></h2>
<pre><code>ERB.new("<%= 'foo' %>", 1, '%', '_erbout') # print deprecation in 2.6 if argc >= 2, and removed in later version
ERB.new("<%= 'foo' %>", trim_mode: '%', eoutvar: '_erbout') # no safe_level support from first
</code></pre> Ruby master - Feature #14255 (Closed): Deprecate $SAFE support in ERBhttps://redmine.ruby-lang.org/issues/142552017-12-28T05:35:51Zk0kubun (Takashi Kokubun)takashikkbn@gmail.com
<p>See <a href="https://bugs.ruby-lang.org/issues/14250" class="external">https://bugs.ruby-lang.org/issues/14250</a>.</p>
<p>Proc-level $SAFE change does no longer make sense. This should be deprecated and then removed. But the problem is that the position of safe_level argument is in the middle of argument list of ERB#initialize.</p>
<p>So to remove it safely, we should make them keyword arguments and deprecate the current non-keyword-argument interface. Having both interfaces would be backward-compatible because all of arguments don't take {}.</p>
<a name="before"></a>
<h2 >before<a href="#before" class="wiki-anchor">¶</a></h2>
<pre><code>ERB.new("<%= 'foo' %>", 1, '%', '_erbout')
</code></pre>
<a name="after"></a>
<h2 >after<a href="#after" class="wiki-anchor">¶</a></h2>
<pre><code>ERB.new("<%= 'foo' %>", 1, '%', '_erbout') # print deprecation in 2.6, and removed in 2.7
ERB.new("<%= 'foo' %>", trim_mode: '%', eoutvar: '_erbout') # no safe_level support from first
</code></pre> Ruby master - Bug #14243 (Closed): Comments inside ERB tags brokenhttps://redmine.ruby-lang.org/issues/142432017-12-26T19:34:15Zjsc (Justin Collins)
<p>A backwards-incompatible change was introduced with <a href="https://github.com/ruby/ruby/commit/abbfc048c5890e8017360bbc845062ea1585e155#diff-e1ea8366d3ac334deab7e0d25309be03" class="external">https://github.com/ruby/ruby/commit/abbfc048c5890e8017360bbc845062ea1585e155#diff-e1ea8366d3ac334deab7e0d25309be03</a></p>
<p><strong>Example:</strong></p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="nb">require</span> <span class="s2">"erb"</span>
<span class="n">input</span> <span class="o">=</span> <span class="s2">"<% # comment %></span><span class="se">\n</span><span class="s2">"</span>
<span class="nb">puts</span> <span class="no">ERB</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="n">input</span><span class="p">).</span><span class="nf">src</span>
</code></pre>
<p>Before:</p>
<pre><code>#coding:UTF-8
_erbout = +''; # comment ; _erbout.<< -"\n"
; _erbout
</code></pre>
<p>After:</p>
<pre><code>#coding:UTF-8
_erbout = +''; # comment ; _erbout.<<(-"\n"
); _erbout
</code></pre>
<p>The generated code produces a syntax error due to introduction of parentheses around the arguments.</p> Ruby master - Feature #14235 (Closed): Merge MJIT infrastructure with conservative JIT compilerhttps://redmine.ruby-lang.org/issues/142352017-12-26T00:15:13Zk0kubun (Takashi Kokubun)takashikkbn@gmail.com
<a name="Background"></a>
<h2 >Background<a href="#Background" class="wiki-anchor">¶</a></h2>
<p>In <a href="https://bugs.ruby-lang.org/issues/12589" class="external">Feature#12589</a>, Vladimir Makarov proposed to improve VM performance by replacing VM instructions<br>
to RTL and introduce method JIT compiler based on those instructions.</p>
<p>While his approach for JIT (write C code to local file system, let C compiler executable<br>
to compile it to shared object file and load it dynamically) was great and proven to work,<br>
replacing all VM instructions may change the behavior of all Ruby programs and we can't turn off<br>
such changes once it's released, even if we find a problem. So it's a little risky unlike optional JIT enablement.</p>
<p>Then I developed a JIT compiler called YARV-MJIT, which does not require any VM instruction changes.<br>
After it, I heard Vladimir started to work on another approach to compile from current YARV instructions and<br>
use RTL as IR for JIT compilation, but it's not published yet as far as I know.</p>
<a name="Problems"></a>
<h2 >Problems<a href="#Problems" class="wiki-anchor">¶</a></h2>
<ul>
<li>We're developing the same JIT infrastructure independently, which can be shared for both implementations
<ul>
<li>it's definitely a waste of time, unlike seeking different optimization approaches</li>
</ul>
</li>
<li>If we continue to develop JIT in a big feature branch,
<ul>
<li>affected places will be big too, and thus it'll be a dangerous release</li>
<li>all of us will continue to waste our time by day-to-day conflict resolution against trunk</li>
<li>many valuable commit logs will be lost when we maintain the branch for rebase or squash commits on merge</li>
</ul>
</li>
</ul>
<a name="Solution"></a>
<h2 >Solution<a href="#Solution" class="wiki-anchor">¶</a></h2>
<ul>
<li>
<strong>Proposal:</strong> Merge MJIT infrastructure from Vladimir's patch with a conservative JIT compiler in early 2.6 development.
<ul>
<li>MJIT infrastructure means: JIT worker thread, profiler, gcc/clang compiler support, loading function from shared object file, some hooks to ensure JIT does not cause SEGV, etc...</li>
</ul>
</li>
</ul>
<p>Patch: <a href="https://github.com/ruby/ruby/pull/1782" class="external">https://github.com/ruby/ruby/pull/1782</a></p>
<a name="Whats-the-conservative-JIT-compiler"></a>
<h3 >What's the "conservative JIT compiler"?<a href="#Whats-the-conservative-JIT-compiler" class="wiki-anchor">¶</a></h3>
<ul>
<li>Based on my YARV-MJIT, but this drops some problematic optimizations and is slower</li>
<li>Pass <code>make test</code>, <code>make test-all</code>, <code>make test-spec</code> with and without JIT <a href="https://travis-ci.org/ruby/ruby/builds/321589821" class="external">https://travis-ci.org/ruby/ruby/builds/321589821</a>
</li>
<li>Unlike MJIT on RTL, we can play optcarrot (not just for benchmark, but on GUI) and run Rails application stably (not tested on production yet though)</li>
</ul>
<a name="Notes"></a>
<h3 >Notes<a href="#Notes" class="wiki-anchor">¶</a></h3>
<ul>
<li>As YARV-MJIT implementation improved MJIT infrastructure too, pthread was already ported to Windows native threads and it can be compiled with Visual Studio.
<ul>
<li>That's exactly why we should develop this in cooperation</li>
</ul>
</li>
<li>Visual Sudio is not supported as C compiler for JIT compilation. I did some experiments and had some ideas to support cl.exe, but I didn't want to add extra complexity to initial merge.
<ul>
<li>But it's perfectly working on MinGW and this will be available on Windows if a user uses RubyInstaller2.</li>
</ul>
</li>
</ul>
<a name="Optcarrot"></a>
<h3 >Optcarrot<a href="#Optcarrot" class="wiki-anchor">¶</a></h3>
<p>Benchmarked with: Intel 4.0GHz i7-4790K with 16GB memory under x86-64 Ubuntu 8 Cores, gcc 5.4.0</p>
<table>
<thead>
<tr>
<th align="left"></th>
<th align="left">2.0.0</th>
<th align="left">2.5.0</th>
<th align="left">JIT off</th>
<th align="left">JIT on</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left">optcarrot fps</td>
<td align="left">35.05</td>
<td align="left">46.75</td>
<td align="left">46.05</td>
<td align="left">63.06</td>
</tr>
<tr>
<td align="left">vs 2.0.0</td>
<td align="left">1.00x</td>
<td align="left">1.33x</td>
<td align="left">1.31x</td>
<td align="left">1.80x</td>
</tr>
</tbody>
</table>
<ul>
<li>2.0.0: Ruby 2.0.0-p0</li>
<li>2.5.0: Ruby 2.5.0 (r61468)</li>
<li>JIT off: Patched Ruby (based on r61475), JIT disabled</li>
<li>JIT on: Patched Ruby (based on r61475), JIT enabled</li>
</ul>
<p>Disclaimer: This JIT compiler performs better with gcc compared to clang for now, so it may be slow on macOS (clang).</p>
<a name="Micro-benchmarks"></a>
<h3 >Micro benchmarks<a href="#Micro-benchmarks" class="wiki-anchor">¶</a></h3>
<p>I used Vladimir's benchmark set which I modified for my convenience <a href="https://github.com/benchmark-driver/mjit-benchmarks" class="external">https://github.com/benchmark-driver/mjit-benchmarks</a>.</p>
<table>
<thead>
<tr>
<th align="left"></th>
<th align="left">2.0.0-p0</th>
<th align="left">2.5.0</th>
<th align="left">JIT off</th>
<th align="left">JIT on</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left">aread</td>
<td align="left">1.00</td>
<td align="left">1.01</td>
<td align="left">0.97</td>
<td align="left">2.33</td>
</tr>
<tr>
<td align="left">aref</td>
<td align="left">1.00</td>
<td align="left">0.96</td>
<td align="left">0.96</td>
<td align="left">3.01</td>
</tr>
<tr>
<td align="left">aset</td>
<td align="left">1.00</td>
<td align="left">1.39</td>
<td align="left">1.37</td>
<td align="left">3.70</td>
</tr>
<tr>
<td align="left">awrite</td>
<td align="left">1.00</td>
<td align="left">1.07</td>
<td align="left">1.03</td>
<td align="left">2.54</td>
</tr>
<tr>
<td align="left">call</td>
<td align="left">1.00</td>
<td align="left">1.25</td>
<td align="left">1.22</td>
<td align="left">3.39</td>
</tr>
<tr>
<td align="left">const</td>
<td align="left">1.00</td>
<td align="left">0.96</td>
<td align="left">0.96</td>
<td align="left">4.00</td>
</tr>
<tr>
<td align="left">const2</td>
<td align="left">1.00</td>
<td align="left">0.96</td>
<td align="left">0.96</td>
<td align="left">3.97</td>
</tr>
<tr>
<td align="left">fannk</td>
<td align="left">1.00</td>
<td align="left">0.98</td>
<td align="left">1.02</td>
<td align="left">1.00</td>
</tr>
<tr>
<td align="left">fib</td>
<td align="left">1.00</td>
<td align="left">1.16</td>
<td align="left">1.24</td>
<td align="left">3.19</td>
</tr>
<tr>
<td align="left">ivread</td>
<td align="left">1.00</td>
<td align="left">0.94</td>
<td align="left">0.93</td>
<td align="left">4.96</td>
</tr>
<tr>
<td align="left">ivwrite</td>
<td align="left">1.00</td>
<td align="left">1.09</td>
<td align="left">1.09</td>
<td align="left">3.32</td>
</tr>
<tr>
<td align="left">mandelbrot</td>
<td align="left">1.00</td>
<td align="left">0.98</td>
<td align="left">0.98</td>
<td align="left">1.27</td>
</tr>
<tr>
<td align="left">meteor</td>
<td align="left">1.00</td>
<td align="left">3.02</td>
<td align="left">2.85</td>
<td align="left">3.16</td>
</tr>
<tr>
<td align="left">nbody</td>
<td align="left">1.00</td>
<td align="left">1.02</td>
<td align="left">0.99</td>
<td align="left">1.47</td>
</tr>
<tr>
<td align="left">nest-ntimes</td>
<td align="left">1.00</td>
<td align="left">1.05</td>
<td align="left">1.01</td>
<td align="left">1.31</td>
</tr>
<tr>
<td align="left">nest-while</td>
<td align="left">1.00</td>
<td align="left">0.96</td>
<td align="left">0.96</td>
<td align="left">1.63</td>
</tr>
<tr>
<td align="left">norm</td>
<td align="left">1.00</td>
<td align="left">1.06</td>
<td align="left">1.07</td>
<td align="left">1.26</td>
</tr>
<tr>
<td align="left">nsvb</td>
<td align="left">1.00</td>
<td align="left">0.98</td>
<td align="left">0.88</td>
<td align="left">0.88</td>
</tr>
<tr>
<td align="left">red-black</td>
<td align="left">1.00</td>
<td align="left">1.03</td>
<td align="left">1.02</td>
<td align="left">1.54</td>
</tr>
<tr>
<td align="left">sieve</td>
<td align="left">1.00</td>
<td align="left">1.22</td>
<td align="left">1.22</td>
<td align="left">1.75</td>
</tr>
<tr>
<td align="left">trees</td>
<td align="left">1.00</td>
<td align="left">1.07</td>
<td align="left">1.08</td>
<td align="left">1.32</td>
</tr>
<tr>
<td align="left">while</td>
<td align="left">1.00</td>
<td align="left">0.96</td>
<td align="left">0.96</td>
<td align="left">5.13</td>
</tr>
</tbody>
</table>
<a name="Interface-details"></a>
<h2 >Interface details<a href="#Interface-details" class="wiki-anchor">¶</a></h2>
<p>If the proposal is accepted, I'm going to add following CLI options:</p>
<pre><code> -j, --jit use MJIT with default options
-j:option, --jit:option
use MJIT with an option
MJIT options:
c, cc C compiler to generate native code (gcc, clang)
s, save-temps Save MJIT temporary files in $TMP or /tmp
w, warnings Enable printing MJIT warnings
d, debug Enable MJIT debugging (very slow)
v=num, verbose=num
Print MJIT logs of level num or less to stderr
n=num, num-cache=num
Maximum number of JIT codes in a cache
</code></pre>
<p>Note that <code>-j:l</code>/<code>--jit:llvm</code> are changed to <code>-j:c</code>/<code>--jit:cc</code> so that we can support cl.exe (Visual Studio) in the future.</p>
<p>Also, for testing, I would like to have following module and method.</p>
<pre><code>MJIT.enabled? #=> true / false
</code></pre>
<p>See the commit log for details.</p> Ruby master - Bug #14095 (Closed): erb ignores attempt to set encodinghttps://redmine.ruby-lang.org/issues/140952017-11-09T19:29:23Zgraywolf (Gray Wolf)
<p>Erb seems to ignore any attempt to set encoding:</p>
<pre><code>$ erb -U
<%= "a".encoding %>
^D
ASCII-8BIT
</code></pre>
<p>I've tried multiple ways to do this but I just can't convice it that the .erb file is in UTF-8. It insists on ASCII-8BIT.</p> Ruby master - Feature #13561 (Closed): Optimize ERB string concatenationhttps://redmine.ruby-lang.org/issues/135612017-05-13T10:29:21Zk0kubun (Takashi Kokubun)takashikkbn@gmail.com
<p>Using opt_ltlt instruction instead of opt_send_without_block for #concat, we can bypass method call and use rb_str_concat directly. So I want ERB to generate #<<.</p>
<a name="Benchmark"></a>
<h3 >Benchmark<a href="#Benchmark" class="wiki-anchor">¶</a></h3>
<p>With bm_app_erb's erb template and its rendering benchmark like this,</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="nb">require</span> <span class="s1">'benchmark/ips'</span>
<span class="no">Benchmark</span><span class="p">.</span><span class="nf">ips</span> <span class="k">do</span> <span class="o">|</span><span class="n">x</span><span class="o">|</span>
<span class="n">title</span> <span class="o">=</span> <span class="s2">"hello world!"</span>
<span class="n">content</span> <span class="o">=</span> <span class="s2">"hello world!</span><span class="se">\n</span><span class="s2">"</span> <span class="o">*</span> <span class="mi">10</span>
<span class="n">x</span><span class="p">.</span><span class="nf">report</span><span class="p">(</span><span class="s1">'concat'</span><span class="p">)</span> <span class="k">do</span>
<span class="n">_erbout</span> <span class="o">=</span> <span class="no">String</span><span class="p">.</span><span class="nf">new</span><span class="p">;</span> <span class="n">_erbout</span><span class="p">.</span><span class="nf">concat</span> <span class="s2">"<html></span><span class="se">\n</span><span class="s2"> <head> "</span>
<span class="p">;</span> <span class="n">_erbout</span><span class="p">.</span><span class="nf">concat</span><span class="p">((</span> <span class="n">title</span> <span class="p">).</span><span class="nf">to_s</span><span class="p">);</span> <span class="n">_erbout</span><span class="p">.</span><span class="nf">concat</span> <span class="s2">" </head></span><span class="se">\n</span><span class="s2"> <body></span><span class="se">\n</span><span class="s2"> <h1> "</span>
<span class="p">;</span> <span class="n">_erbout</span><span class="p">.</span><span class="nf">concat</span><span class="p">((</span> <span class="n">title</span> <span class="p">).</span><span class="nf">to_s</span><span class="p">);</span> <span class="n">_erbout</span><span class="p">.</span><span class="nf">concat</span> <span class="s2">" </h1></span><span class="se">\n</span><span class="s2"> <p></span><span class="se">\n</span><span class="s2"> "</span>
<span class="p">;</span> <span class="n">_erbout</span><span class="p">.</span><span class="nf">concat</span><span class="p">((</span> <span class="n">content</span> <span class="p">).</span><span class="nf">to_s</span><span class="p">);</span> <span class="n">_erbout</span><span class="p">.</span><span class="nf">concat</span> <span class="s2">"</span><span class="se">\n</span><span class="s2"> </p></span><span class="se">\n</span><span class="s2"> </body></span><span class="se">\n</span><span class="s2"></html></span><span class="se">\n</span><span class="s2">"</span>
<span class="p">;</span> <span class="n">_erbout</span><span class="p">.</span><span class="nf">force_encoding</span><span class="p">(</span><span class="n">__ENCODING__</span><span class="p">)</span>
<span class="k">end</span>
<span class="n">x</span><span class="p">.</span><span class="nf">report</span><span class="p">(</span><span class="s1">'<<'</span><span class="p">)</span> <span class="k">do</span>
<span class="n">_erbout</span> <span class="o">=</span> <span class="no">String</span><span class="p">.</span><span class="nf">new</span><span class="p">;</span> <span class="n">_erbout</span><span class="p">.</span><span class="nf"><</span><span class="o"><</span> <span class="s2">"<html></span><span class="se">\n</span><span class="s2"> <head> "</span>
<span class="p">;</span> <span class="n">_erbout</span><span class="p">.</span><span class="nf"><</span><span class="o"><</span><span class="p">((</span> <span class="n">title</span> <span class="p">).</span><span class="nf">to_s</span><span class="p">);</span> <span class="n">_erbout</span><span class="p">.</span><span class="nf"><</span><span class="o"><</span> <span class="s2">" </head></span><span class="se">\n</span><span class="s2"> <body></span><span class="se">\n</span><span class="s2"> <h1> "</span>
<span class="p">;</span> <span class="n">_erbout</span><span class="p">.</span><span class="nf"><</span><span class="o"><</span><span class="p">((</span> <span class="n">title</span> <span class="p">).</span><span class="nf">to_s</span><span class="p">);</span> <span class="n">_erbout</span><span class="p">.</span><span class="nf"><</span><span class="o"><</span> <span class="s2">" </h1></span><span class="se">\n</span><span class="s2"> <p></span><span class="se">\n</span><span class="s2"> "</span>
<span class="p">;</span> <span class="n">_erbout</span><span class="p">.</span><span class="nf"><</span><span class="o"><</span><span class="p">((</span> <span class="n">content</span> <span class="p">).</span><span class="nf">to_s</span><span class="p">);</span> <span class="n">_erbout</span><span class="p">.</span><span class="nf"><</span><span class="o"><</span> <span class="s2">"</span><span class="se">\n</span><span class="s2"> </p></span><span class="se">\n</span><span class="s2"> </body></span><span class="se">\n</span><span class="s2"></html></span><span class="se">\n</span><span class="s2">"</span>
<span class="p">;</span> <span class="n">_erbout</span><span class="p">.</span><span class="nf">force_encoding</span><span class="p">(</span><span class="n">__ENCODING__</span><span class="p">)</span>
<span class="k">end</span>
<span class="n">x</span><span class="p">.</span><span class="nf">compare!</span>
<span class="k">end</span>
</code></pre>
<p>template rendering will be 1.77x faster.</p>
<pre><code>Calculating -------------------------------------
concat 301.067k (± 9.1%) i/s - 1.510M in 5.056566s
<< 533.025k (±11.3%) i/s - 2.654M in 5.042675s
Comparison:
<<: 533024.6 i/s
concat: 301066.7 i/s - 1.77x slower
</code></pre>
<a name="Patch"></a>
<h3 >Patch<a href="#Patch" class="wiki-anchor">¶</a></h3>
<p><a href="https://github.com/ruby/ruby/pull/1612" class="external">https://github.com/ruby/ruby/pull/1612</a></p> Ruby master - Feature #12637 (Rejected): Unified and consistent method naming for safe and danger...https://redmine.ruby-lang.org/issues/126372016-07-29T19:04:11Zr.smitala (Radovan Smitala)
<p>Hello,</p>
<p>As a multi-paradign language allows programmers to code from imperative to functional style. This gives Ruby to be modern and wide used language in these days.<br>
Ruby is built on idea to be as fun, understandable and focused for people.</p>
<p>But i think it carry "complicated behaviour" in some method naming.</p>
<p>In this documentation is written: (<a href="http://docs.ruby-lang.org/en/trunk/syntax/methods_rdoc.html" class="external">http://docs.ruby-lang.org/en/trunk/syntax/methods_rdoc.html</a>)</p>
<blockquote>
<p>The bang methods (! at the end of method name) are called and executed just like any other method. However, by convention, a method with an exclamation point or bang is considered dangerous. In ruby core library the dangerous method implies that when a <strong>method ends with a bang (!), it indicates that unlike its non-bang equivalent, permanently modifies its receiver</strong>. <strong>Almost always</strong>, ruby core library will have a non-bang counterpart (method name which does NOT end with !) of every bang method (method name which does end with !) that does not modify the receiver. This convention is typically true for ruby core library but may or may not hold true for other ruby libraries.</p>
</blockquote>
<p>Hightlited part of citation talks about that method with exclamation mark modifies its receiver. What is good because i could choose between imperative habit and modify receiver, but i can also create new data and code in functional habit.</p>
<p>Eg: i can create new array with <strong>map</strong> method, but always i can modify existed object with <strong>map!</strong>. What is incredible and easy to understand.<br>
Or i want to get unique values from array by <strong>uniq</strong> assign into new variable. Still it is able to modify origin array with <strong>uniq!</strong></p>
<p>Second highlighted part is about confused part. It tells to programmer be careful. Not all methods follows this great design.<br>
In Ruby are methods which are "inconsistent" in naming.</p>
<p>Eg. Many built-in Array methods like</p>
<ul>
<li>clear</li>
<li>concat</li>
<li>delete</li>
<li>delete_at</li>
<li>delete_if</li>
<li>fill</li>
<li>insert</li>
<li>keep_if</li>
<li>pop</li>
<li>push</li>
<li>replace</li>
<li>shift</li>
<li>unshift<br>
are dangerous because modify its receiver. What is confusing for many programmers and it brings unexceptional behaviour without study documentation deeper.</li>
</ul>
<p>I think Ruby is popular for people because it communicate with programmer like in human language.<br>
Nowadays are getting functional programming languages high popularity and trend increase more and more.</p>
<p>It could be great to remove that one word ("Almost") and have Ruby as language more clear, unambiguous and brings more functional principles into language what we like and love.</p> Ruby master - Bug #12074 (Closed): [PERF] bm_app_erb.rb slower https://redmine.ruby-lang.org/issues/120742016-02-16T02:04:57Ztgxworld (Guo Xiang Tan)gxtan1990@gmail.com
<p>Hi I'm noticing a regression on RubyBench for <code>bm_app_erb.rb</code></p>
<p><a href="http://rubybench.org/ruby/ruby/commits?result_type=app_erb&display_count=2000" class="external">http://rubybench.org/ruby/ruby/commits?result_type=app_erb&display_count=2000</a></p>
<p>Narrowed down to <a href="https://github.com/ruby/ruby/commit/32b4a8b" class="external">https://github.com/ruby/ruby/commit/32b4a8b</a></p>
<p>Results on my local machine confirms it as well:</p>
<pre><code>total: 2 trial(s) (2 trial(s) for 1 benchmark(s))
..
-----------------------------------------------------------
benchmark results:
Execution time (sec)
name ruby 2.4.0dev (2016-01-02 trunk 53411) [x86_64-linux]
Posting results to Web UI....
app_erb 0.614
</code></pre>
<pre><code>total: 2 trial(s) (2 trial(s) for 1 benchmark(s))
..
-----------------------------------------------------------
benchmark results:
Execution time (sec)
name ruby 2.4.0dev (2016-01-02 trunk 53412) [x86_64-linux]
Posting results to Web UI....
app_erb 0.911
</code></pre>
<p>Let me know if I can provide more information :)</p> Ruby master - Bug #12044 (Closed): net/ftp.rb: add NullSocket#closed? to fix closing not yet open...https://redmine.ruby-lang.org/issues/120442016-02-01T22:52:37Zantstorm (Anthony Dmitriyev)
<p>Hi there,</p>
<p>I've opened a PR for this issue on GitHub: <a href="https://github.com/ruby/ruby/pull/1232" class="external">https://github.com/ruby/ruby/pull/1232</a></p>
<p>An instance of <code>NullSocket</code> is stored in a <code>@sock</code> variable of a new <code>Net::FTP</code>, it also has a <code>#close</code> method (that obviously does nothing), but it is never called, because a wrapping <code>Net::FTP#close</code> checks that <code>@sock and not @sock.closed?</code> which crashes with <code>FTPConnectionError</code> because there is no method <code>#closed?</code> on <code>NullSocket</code>. This PR adds it and a test to verify that it works.</p>
<p>Below is the way to reproduce the error in the IRB. As you can see it's quite confusing, you'd expect <code>#closed?</code> not to raise an error, but return <code>true</code> instead.</p>
<pre><code>>> ftp = Net::FTP.new
=> #<Net::FTP:0x007f90c38075e0 @mon_owner=nil, @mon_count=0, @mon_mutex=#<Thread::Mutex:0x007f90c3807590>, @binary=true, @passive=true, @debug_mode=false, @resume=false, @sock=#<Net::FTP::NullSocket:0x007f90c3807568>, @logged_in=false, @open_timeout=nil, @read_timeout=60>
>> ftp.close
Net::FTPConnectionError: not connected
from /usr/local/var/rbenv/versions/2.3.0/lib/ruby/2.3.0/net/ftp.rb:1277:in `method_missing'
from /usr/local/var/rbenv/versions/2.3.0/lib/ruby/2.3.0/net/ftp.rb:1168:in `close'
from (irb):6
from /usr/local/var/rbenv/versions/2.3.0/bin/irb:11:in `<main>'
>> ftp.closed?
Net::FTPConnectionError: not connected
from /usr/local/var/rbenv/versions/2.3.0/lib/ruby/2.3.0/net/ftp.rb:1277:in `method_missing'
from /usr/local/var/rbenv/versions/2.3.0/lib/ruby/2.3.0/net/ftp.rb:1184:in `closed?'
from (irb):7
from /usr/local/var/rbenv/versions/2.3.0/bin/irb:11:in `<main>'
</code></pre> Ruby master - Feature #11624 (Rejected): ERB deserves its own commenting tokenhttps://redmine.ruby-lang.org/issues/116242015-10-27T16:26:06ZAdamantish (Adam Misrahi)miss.rahee@gmail.com
<a name="Problem"></a>
<h2 >Problem<a href="#Problem" class="wiki-anchor">¶</a></h2>
<ul>
<li>ERB is a DSL but commenting out code is not the easy workflow feature in ERB that it is in other languages.</li>
<li>ERB elements were cleverly designed to look like a special kind of html element so it makes programmers unhappy and surprised when commenting the HTML does not affect the ruby elements nested inside.</li>
<li>This makes certain workflows particularly difficult e.g. sketching out a view to aide with iteratively developing its underlying model.</li>
</ul>
<a name="Solution"></a>
<h2 >Solution<a href="#Solution" class="wiki-anchor">¶</a></h2>
<p>This proposes a new set of ERB commenting tokens - currently for use with HTML only.<br>
They take the form of an HTML comment combined with a Ruby comment.<br>
Looks like this:</p>
<pre><code><#--
None of this will be outputted: <%= my_ruby_var %>
and neither will this
--#>
</code></pre>
<a name="Implementation"></a>
<h2 >Implementation<a href="#Implementation" class="wiki-anchor">¶</a></h2>
<p>This patch takes a cautious approach. Legacy ERB files may contain typos which happen to match ERB comment token. These are invalid HTML but may have been tolerated and simply printed out in the displayed webpage. For this reason the implementation ignores the ERB comment tokens unless they are properly closed off. This greatly reduces the likelihood of legacy issues and if they do arise they will not disrupt intended functionality.</p>
<a name="Personal-note"></a>
<h2 >Personal note<a href="#Personal-note" class="wiki-anchor">¶</a></h2>
<p>I realise I can't suggest anything that hasn't been thought of already. I see that the main reason this hasn't already been implemented is probably because ERB is not just for HTML. However, it may be that a pair of tokens can be found and proven to be compatible with most languages.</p>
<p>Thousands of people clearly continue to want this and the hackiness of the accepted answers on stack overflow shows how others have just gotten used to doing it the hard way.</p>
<p><a href="http://stackoverflow.com/questions/3426671/how-does-one-comment-in-an-erb-template" class="external">http://stackoverflow.com/questions/3426671/how-does-one-comment-in-an-erb-template</a><br>
<a href="http://stackoverflow.com/questions/3127644/block-comments-in-html-erb-templates-in-rails" class="external">http://stackoverflow.com/questions/3127644/block-comments-in-html-erb-templates-in-rails</a><br>
<a href="http://stackoverflow.com/questions/3901619/how-to-comment-lines-in-rails-html-erb-files" class="external">http://stackoverflow.com/questions/3901619/how-to-comment-lines-in-rails-html-erb-files</a></p>
<p>I'd just really like to see this solved even if none of my code is used.</p> Ruby master - Feature #11575 (Rejected): Blocks in ERB don't work as intended? https://redmine.ruby-lang.org/issues/115752015-10-08T21:55:21Zrohitpaulk (Paul Kuruvilla)rohitpaulk@gmail.com
<p>I'm not sure if this is a problem with ERB, but here it goes -</p>
<pre><code>require 'ERB'
require 'Erubis'
$results = []
def return_block(&block)
result = block.call
$results << result
return result
end
erb_template = <<-ERB
<% return_block { %>
<% "This should be stored in $results, but not sent to output" %>
<% } %>
<% return_block { %>
<%= "This should be stored in $results AND sent to output" %>
<% } %>
ERB
puts "Result of Template is:"
puts "---------------------"
#puts Erubis::Eruby.new(erb_template).result
puts ERB.new(erb_template).result(binding)
puts "---------------------"
puts "First call to return_block: #{$results[0]}"
puts "Second call to return_block: #{$results[1]}"
</code></pre>
<p>I'd expect the output to be</p>
<pre><code>Result of Template is:
---------------------
This should be stored in $results AND sent to output
---------------------
First call to return_block: This should be stored in $results, but not sent to output
Second call to return_block:
This should be stored in $results AND sent to output
</code></pre>
<p>And this is exactly what I get when using <code>Erubis</code>. When I use <code>ERB</code>, the output I get is -</p>
<pre><code>Result of Template is:
---------------------
This should be stored in $results AND sent to output
---------------------
First call to return_block:
This should be stored in $results AND sent to output
Second call to return_block:
This should be stored in $results AND sent to output
</code></pre>
<p>I'm checking this against older ruby versions too, will update with results.</p> Ruby master - Bug #11564 (Third Party's Issue): Segementation fault while doing rake db:migratehttps://redmine.ruby-lang.org/issues/115642015-10-02T09:52:05Zritesh@blogvault.net (ritesh soni)ritesh@blogvault.net
<p>I am using ruby<br>
ruby 2.1.7p400 (2015-08-18 revision 51632) [x86_64-linux]<br>
rails: Rails 3.2.13</p>
<p>I recently upgraded from ruby 2.0.0 to ruby 2.1.7,<br>
now when I am trying to do rake db:migrate</p>
<p>I am getting a segmentation fault.</p> Ruby master - Bug #11464 (Closed): ERB trimming doesn't trim carriage returnshttps://redmine.ruby-lang.org/issues/114642015-08-19T10:14:46ZLarivact (Martin Fischer)larivact@chello.at
<p>ERB trimming doesn't work if the .erb file was written on Windows (because Windows uses \r\n as line ending, whereas Linux uses only \n)<br>
The implementation apparently only trims \n</p>
<pre><code>ruby erbCarriageReturnBug.rb
</code></pre>
<p>Expected output:</p>
<pre><code><ul>
<li>cucumber</li>
<li>cucumber</li>
<li>cucumber</li>
</ul>
</code></pre>
<p>Received output:</p>
<pre><code><ul>
<li>cucumber</li>
<li>cucumber</li>
<li>cucumber</li>
</ul>
</code></pre>
<p>Corresponding documentation: <a href="http://ruby-doc.org/stdlib-2.2.2/libdoc/erb/rdoc/ERB.html" class="external">http://ruby-doc.org/stdlib-2.2.2/libdoc/erb/rdoc/ERB.html</a></p> Ruby master - Bug #11385 (Rejected): `==` with bidirectional/cyclic dependencyhttps://redmine.ruby-lang.org/issues/113852015-07-22T02:54:11Zallenwq (Allen Wang)rovingbreeze@gmail.com
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">class</span> <span class="nc">Something</span>
<span class="nb">attr_accessor</span> <span class="ss">:friend</span>
<span class="k">def</span> <span class="nf">initialize</span><span class="p">(</span><span class="n">friend</span><span class="p">)</span>
<span class="nb">self</span><span class="p">.</span><span class="nf">friend</span> <span class="o">=</span> <span class="n">friend</span>
<span class="k">end</span>
<span class="k">def</span> <span class="nf">==</span><span class="p">(</span><span class="n">other</span><span class="p">)</span>
<span class="n">friend</span> <span class="o">==</span> <span class="n">other</span><span class="p">.</span><span class="nf">friend</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="n">a</span> <span class="o">=</span> <span class="no">Something</span><span class="p">.</span><span class="nf">new</span><span class="p">([])</span>
<span class="n">b</span> <span class="o">=</span> <span class="no">Something</span><span class="p">.</span><span class="nf">new</span><span class="p">([</span><span class="n">a</span><span class="p">])</span>
<span class="n">a</span><span class="p">.</span><span class="nf">friend</span> <span class="o">=</span> <span class="p">[</span><span class="n">b</span><span class="p">]</span>
<span class="n">a</span> <span class="o">==</span> <span class="n">b</span>
</code></pre>
<p>The above code returns true on OS X and Linux, by right it should give me a exception of stack level too deep.</p>
<p>( And on windows I can see the expected exception )</p> Ruby master - Bug #11341 (Third Party's Issue): Rails server command is not working finehttps://redmine.ruby-lang.org/issues/113412015-07-09T16:59:37ZEshVal (Esh Val)vallurupallieswar@gmail.com
<p>I wanted to run the rails server command and it's showing some log and it is crashed.</p> Ruby master - Bug #11303 (Third Party's Issue): [BUG] Segmentati on fault ruby 2.2.2p95 (2015-04-...https://redmine.ruby-lang.org/issues/113032015-06-24T08:25:20Zadrianpetrov (adrian petrov)iurca.adrian@live.com
<p>$ rails server<br>
c:/Ruby22-x64/lib/ruby/gems/2.2.0/extensions/x64-mingw32/2.2.0/mysql-2.9.1/mysql/mysql_api.so: [BUG] Segmentati<br>
on fault<br>
ruby 2.2.2p95 (2015-04-13 revision 50295) [x64-mingw32]</p>
<p>-- Control frame information -----------------------------------------------<br>
c:0019 p:-11306334 s:0064 e:000063 TOP [FINISH]<br>
c:0018 p:---- s:0062 e:000061 CFUNC :require<br>
c:0017 p:0020 s:0058 e:000057 RESCUE c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/mysql-2.9.1/lib/mysql.rb:6<br>
c:0016 p:0032 s:0055 e:000054 TOP c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/mysql-2.9.1/lib/mysql.rb:2 [FINISH]</p>
<p>c:0015 p:---- s:0053 e:000052 CFUNC :require<br>
c:0014 p:0037 s:0049 e:000048 BLOCK c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/bundler-1.10.4/lib/bundler/runtime.<br>
rb:76 [FINISH]<br>
c:0013 p:---- s:0046 e:000045 CFUNC :each<br>
c:0012 p:0053 s:0043 e:000042 BLOCK c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/bundler-1.10.4/lib/bundler/runtime.<br>
rb:72 [FINISH]<br>
c:0011 p:---- s:0037 e:000036 CFUNC :each<br>
c:0010 p:0030 s:0034 e:000033 METHOD c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/bundler-1.10.4/lib/bundler/runtime.<br>
rb:61<br>
c:0009 p:0017 s:0030 e:000029 METHOD c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/bundler-1.10.4/lib/bundler.rb:134<br>
c:0008 p:0049 s:0026 e:000025 TOP C:/Users/uidj5532/Downloads/resdb.git/config/application.rb:7 [FINISH]<br>
c:0007 p:---- s:0024 e:000023 CFUNC :require<br>
c:0006 p:0014 s:0020 e:000019 BLOCK c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/railties-4.0.4/lib/rails/commands.r<br>
b:74 [FINISH]<br>
c:0005 p:---- s:0017 e:000016 CFUNC :tap<br>
c:0004 p:0561 s:0014 e:000013 TOP c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/railties-4.0.4/lib/rails/commands.r<br>
b:71 [FINISH]<br>
c:0003 p:---- s:0008 e:000007 CFUNC :require<br>
c:0002 p:0034 s:0004 E:0024e0 EVAL bin/rails:4 [FINISH]<br>
c:0001 p:0000 s:0002 E:002060 TOP [FINISH]</p>
<p>-- Ruby level backtrace information ----------------------------------------<br>
bin/rails:4:in <code><main>' bin/rails:4:in </code>require'<br>
c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/railties-4.0.4/lib/rails/commands.rb:71:in <code><top (required)>' c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/railties-4.0.4/lib/rails/commands.rb:71:in </code>tap'<br>
c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/railties-4.0.4/lib/rails/commands.rb:74:in <code>block in <top (required)>' c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/railties-4.0.4/lib/rails/commands.rb:74:in </code>require'<br>
C:/Users/uidj5532/Downloads/resdb.git/config/application.rb:7:in <code><top (required)>' c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/bundler-1.10.4/lib/bundler.rb:134:in </code>require'<br>
c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/bundler-1.10.4/lib/bundler/runtime.rb:61:in <code>require' c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/bundler-1.10.4/lib/bundler/runtime.rb:61:in </code>each'<br>
c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/bundler-1.10.4/lib/bundler/runtime.rb:72:in <code>block in require' c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/bundler-1.10.4/lib/bundler/runtime.rb:72:in </code>each'<br>
c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/bundler-1.10.4/lib/bundler/runtime.rb:76:in <code>block (2 levels) in require ' c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/bundler-1.10.4/lib/bundler/runtime.rb:76:in </code>require'<br>
c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/mysql-2.9.1/lib/mysql.rb:2:in <code><top (required)>' c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/mysql-2.9.1/lib/mysql.rb:6:in </code>rescue in <top (required)>'<br>
c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/mysql-2.9.1/lib/mysql.rb:6:in `require'</p>
<p>-- C level backtrace information -------------------------------------------<br>
C:\Windows\SYSTEM32\ntdll.dll(NtWaitForSingleObject+0xa) [0x0000000076EEDC1A]<br>
C:\Windows\system32\KERNELBASE.dll(WaitForSingleObjectEx+0x9c) [0x000007FEFCE510DC]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(rb_vm_bugreport+0xa4) [0x00000000649A2624]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(rb_bug_context+0x62) [0x000000006484BC22]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(rb_check_safe_obj+0x3b2) [0x000000006491BB62]<br>
[0x0000000000401A85]<br>
C:\Windows\SYSTEM32\ntdll.dll(_C_specific_handler+0x9c) [0x0000000076EB7FA8]<br>
C:\Windows\SYSTEM32\ntdll.dll(RtlDecodePointer+0xad) [0x0000000076EC908D]<br>
C:\Windows\SYSTEM32\ntdll.dll(RtlUnwindEx+0xbbf) [0x0000000076EB8BAF]<br>
C:\Windows\SYSTEM32\ntdll.dll(KiUserExceptionDispatcher+0x2e) [0x0000000076EEDB38]<br>
c:\Ruby22-x64\lib\ruby\gems\2.2.0\extensions\x64-mingw32\2.2.0\mysql-2.9.1\mysql\mysql_api.so(Init_mysql_api+0x<br>
7790) [0x00000000667CDEE0]<br>
c:\Ruby22-x64\lib\ruby\gems\2.2.0\extensions\x64-mingw32\2.2.0\mysql-2.9.1\mysql\mysql_api.so(Init_mysql_api+0x<br>
d) [0x00000000667C675D]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(dln_load+0x1d6) [0x0000000064801646]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(rb_vm_call_cfunc+0x130) [0x000000006499EF50]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(rb_require_internal+0x559) [0x0000000064857229]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(rb_f_require+0x20) [0x0000000064857590]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(rb_error_arity+0x1e3) [0x000000006498BA93]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(rb_f_send+0x761) [0x000000006499C541]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(rb_vm_localjump_error+0x1f7b) [0x0000000064990F7B]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(rb_vm_localjump_error+0x607e) [0x000000006499507E]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(rb_iseq_eval+0x183) [0x000000006499E8B3]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(rb_rubylevel_errinfo+0x61c) [0x000000006485562C]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(rb_require_internal+0x593) [0x0000000064857263]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(rb_f_require+0x20) [0x0000000064857590]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(rb_error_arity+0x1e3) [0x000000006498BA93]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(rb_vm_localjump_error+0x1f7b) [0x0000000064990F7B]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(rb_vm_localjump_error+0x607e) [0x000000006499507E]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(rb_funcall+0xa96) [0x000000006499A896]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(rb_yield+0x7c) [0x000000006499B79C]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(rb_ary_each+0x51) [0x0000000064801971]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(rb_error_arity+0x1e3) [0x000000006498BA93]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(rb_vm_localjump_error+0x1ed7) [0x0000000064990ED7]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(rb_vm_localjump_error+0x607e) [0x000000006499507E]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(rb_funcall+0xa96) [0x000000006499A896]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(rb_yield+0x7c) [0x000000006499B79C]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(rb_ary_each+0x51) [0x0000000064801971]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(rb_error_arity+0x1e3) [0x000000006498BA93]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(rb_f_send+0x761) [0x000000006499C541]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(rb_vm_localjump_error+0x1ed7) [0x0000000064990ED7]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(rb_vm_localjump_error+0x607e) [0x000000006499507E]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(rb_iseq_eval+0x183) [0x000000006499E8B3]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(rb_rubylevel_errinfo+0x61c) [0x000000006485562C]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(rb_require_internal+0x593) [0x0000000064857263]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(rb_f_require+0x20) [0x0000000064857590]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(rb_error_arity+0x1e3) [0x000000006498BA93]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(rb_f_send+0x761) [0x000000006499C541]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(rb_vm_localjump_error+0x1f7b) [0x0000000064990F7B]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(rb_vm_localjump_error+0x607e) [0x000000006499507E]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(rb_funcall+0xa96) [0x000000006499A896]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(rb_yield+0x7c) [0x000000006499B79C]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(rb_obj_tap+0x16) [0x00000000648B19C6]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(rb_error_arity+0x1e3) [0x000000006498BA93]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(rb_f_send+0x761) [0x000000006499C541]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(rb_vm_localjump_error+0x1ed7) [0x0000000064990ED7]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(rb_vm_localjump_error+0x607e) [0x000000006499507E]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(rb_iseq_eval+0x183) [0x000000006499E8B3]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(rb_rubylevel_errinfo+0x61c) [0x000000006485562C]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(rb_require_internal+0x593) [0x0000000064857263]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(rb_f_require+0x20) [0x0000000064857590]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(rb_error_arity+0x1e3) [0x000000006498BA93]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(rb_f_send+0x761) [0x000000006499C541]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(rb_vm_localjump_error+0x1f7b) [0x0000000064990F7B]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(rb_vm_localjump_error+0x607e) [0x000000006499507E]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(rb_iseq_eval_main+0x1d0) [0x000000006499EAD0]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(rb_check_copyable+0x2fc1) [0x0000000064850AD1]<br>
c:\Ruby22-x64\bin\x64-msvcrt-ruby220.dll(ruby_run_node+0x51) [0x0000000064853C81]<br>
[0x0000000000402D14]<br>
[0x00000000004013D7]<br>
[0x00000000004014F8]<br>
C:\Windows\system32\kernel32.dll(BaseThreadInitThunk+0xd) [0x0000000076D959CD]</p>
<p>-- Other runtime information -----------------------------------------------</p>
<ul>
<li>
<p>Loaded script: bin/rails</p>
</li>
<li>
<p>Loaded features:</p>
<p>0 enumerator.so<br>
1 rational.so<br>
2 complex.so<br>
3 c:/Ruby22-x64/lib/ruby/2.2.0/x64-mingw32/enc/encdb.so<br>
4 c:/Ruby22-x64/lib/ruby/2.2.0/x64-mingw32/enc/trans/transdb.so<br>
5 c:/Ruby22-x64/lib/ruby/2.2.0/x64-mingw32/enc/iso_8859_1.so<br>
6 c:/Ruby22-x64/lib/ruby/2.2.0/unicode_normalize.rb<br>
7 c:/Ruby22-x64/lib/ruby/2.2.0/x64-mingw32/rbconfig.rb<br>
8 c:/Ruby22-x64/lib/ruby/site_ruby/2.2.0/rubygems/compatibility.rb<br>
9 c:/Ruby22-x64/lib/ruby/site_ruby/2.2.0/rubygems/defaults.rb<br>
10 c:/Ruby22-x64/lib/ruby/site_ruby/2.2.0/rubygems/deprecate.rb<br>
11 c:/Ruby22-x64/lib/ruby/site_ruby/2.2.0/rubygems/errors.rb<br>
12 c:/Ruby22-x64/lib/ruby/site_ruby/2.2.0/rubygems/version.rb<br>
13 c:/Ruby22-x64/lib/ruby/site_ruby/2.2.0/rubygems/requirement.rb<br>
14 c:/Ruby22-x64/lib/ruby/site_ruby/2.2.0/rubygems/platform.rb<br>
15 c:/Ruby22-x64/lib/ruby/site_ruby/2.2.0/rubygems/basic_specification.rb<br>
16 c:/Ruby22-x64/lib/ruby/site_ruby/2.2.0/rubygems/stub_specification.rb<br>
17 c:/Ruby22-x64/lib/ruby/site_ruby/2.2.0/rubygems/util/stringio.rb<br>
18 c:/Ruby22-x64/lib/ruby/site_ruby/2.2.0/rubygems/specification.rb<br>
19 c:/Ruby22-x64/lib/ruby/site_ruby/2.2.0/rubygems/exceptions.rb<br>
20 c:/Ruby22-x64/lib/ruby/site_ruby/2.2.0/rubygems/defaults/operating_system.rb<br>
21 c:/Ruby22-x64/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_gem.rb<br>
22 thread.rb<br>
23 c:/Ruby22-x64/lib/ruby/2.2.0/x64-mingw32/thread.so<br>
24 c:/Ruby22-x64/lib/ruby/2.2.0/monitor.rb<br>
25 c:/Ruby22-x64/lib/ruby/site_ruby/2.2.0/rubygems/core_ext/kernel_require.rb<br>
26 c:/Ruby22-x64/lib/ruby/site_ruby/2.2.0/rubygems.rb<br>
27 c:/Ruby22-x64/lib/ruby/site_ruby/2.2.0/rubygems/path_support.rb<br>
28 c:/Ruby22-x64/lib/ruby/site_ruby/2.2.0/rubygems/dependency.rb<br>
29 c:/Ruby22-x64/lib/ruby/2.2.0/x64-mingw32/pathname.so<br>
30 c:/Ruby22-x64/lib/ruby/2.2.0/pathname.rb<br>
31 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/bundler-1.10.4/lib/bundler/constants.rb<br>
32 c:/Ruby22-x64/lib/ruby/2.2.0/x64-mingw32/io/console.so<br>
33 c:/Ruby22-x64/lib/ruby/site_ruby/2.2.0/rubygems/user_interaction.rb<br>
34 c:/Ruby22-x64/lib/ruby/2.2.0/x64-mingw32/etc.so<br>
35 c:/Ruby22-x64/lib/ruby/site_ruby/2.2.0/rubygems/config_file.rb<br>
36 c:/Ruby22-x64/lib/ruby/site_ruby/2.2.0/rubygems/ext/build_error.rb<br>
37 c:/Ruby22-x64/lib/ruby/site_ruby/2.2.0/rubygems/ext/builder.rb<br>
38 c:/Ruby22-x64/lib/ruby/site_ruby/2.2.0/rubygems/ext/configure_builder.rb<br>
39 c:/Ruby22-x64/lib/ruby/2.2.0/fileutils.rb<br>
40 c:/Ruby22-x64/lib/ruby/2.2.0/delegate.rb<br>
41 c:/Ruby22-x64/lib/ruby/2.2.0/tmpdir.rb<br>
42 c:/Ruby22-x64/lib/ruby/2.2.0/tempfile.rb<br>
43 c:/Ruby22-x64/lib/ruby/site_ruby/2.2.0/rubygems/ext/ext_conf_builder.rb<br>
44 c:/Ruby22-x64/lib/ruby/site_ruby/2.2.0/rubygems/ext/rake_builder.rb<br>
45 c:/Ruby22-x64/lib/ruby/2.2.0/optparse.rb<br>
46 c:/Ruby22-x64/lib/ruby/site_ruby/2.2.0/rubygems/command.rb<br>
47 c:/Ruby22-x64/lib/ruby/site_ruby/2.2.0/rubygems/ext/cmake_builder.rb<br>
48 c:/Ruby22-x64/lib/ruby/site_ruby/2.2.0/rubygems/ext.rb<br>
49 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/bundler-1.10.4/lib/bundler/rubygems_integration.rb<br>
50 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/bundler-1.10.4/lib/bundler/current_ruby.rb<br>
51 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/bundler-1.10.4/lib/bundler/shared_helpers.rb<br>
52 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/bundler-1.10.4/lib/bundler/gem_path_manipulation.rb<br>
53 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/bundler-1.10.4/lib/bundler/gem_helpers.rb<br>
54 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/bundler-1.10.4/lib/bundler/match_platform.rb<br>
55 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/bundler-1.10.4/lib/bundler/rubygems_ext.rb<br>
56 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/bundler-1.10.4/lib/bundler/version.rb<br>
57 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/bundler-1.10.4/lib/bundler.rb<br>
58 c:/Ruby22-x64/lib/ruby/2.2.0/uri/rfc2396_parser.rb<br>
59 c:/Ruby22-x64/lib/ruby/2.2.0/uri/rfc3986_parser.rb<br>
60 c:/Ruby22-x64/lib/ruby/2.2.0/uri/common.rb<br>
61 c:/Ruby22-x64/lib/ruby/2.2.0/uri/generic.rb<br>
62 c:/Ruby22-x64/lib/ruby/2.2.0/uri/ftp.rb<br>
63 c:/Ruby22-x64/lib/ruby/2.2.0/uri/http.rb<br>
64 c:/Ruby22-x64/lib/ruby/2.2.0/uri/https.rb<br>
65 c:/Ruby22-x64/lib/ruby/2.2.0/uri/ldap.rb<br>
66 c:/Ruby22-x64/lib/ruby/2.2.0/uri/ldaps.rb<br>
67 c:/Ruby22-x64/lib/ruby/2.2.0/uri/mailto.rb<br>
68 c:/Ruby22-x64/lib/ruby/2.2.0/uri.rb<br>
69 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/bundler-1.10.4/lib/bundler/settings.rb<br>
70 c:/Ruby22-x64/lib/ruby/2.2.0/x64-mingw32/strscan.so<br>
71 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/bundler-1.10.4/lib/bundler/source.rb<br>
72 c:/Ruby22-x64/lib/ruby/2.2.0/x64-mingw32/digest.so<br>
73 c:/Ruby22-x64/lib/ruby/2.2.0/digest.rb<br>
74 c:/Ruby22-x64/lib/ruby/2.2.0/x64-mingw32/digest/sha1.so<br>
75 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/bundler-1.10.4/lib/bundler/source/path.rb<br>
76 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/bundler-1.10.4/lib/bundler/source/git.rb<br>
77 c:/Ruby22-x64/lib/ruby/2.2.0/x64-mingw32/socket.so<br>
78 c:/Ruby22-x64/lib/ruby/2.2.0/socket.rb<br>
79 c:/Ruby22-x64/lib/ruby/2.2.0/timeout.rb<br>
80 c:/Ruby22-x64/lib/ruby/2.2.0/net/protocol.rb<br>
81 c:/Ruby22-x64/lib/ruby/2.2.0/x64-mingw32/zlib.so<br>
82 c:/Ruby22-x64/lib/ruby/2.2.0/x64-mingw32/stringio.so<br>
83 c:/Ruby22-x64/lib/ruby/2.2.0/net/http/exceptions.rb<br>
84 c:/Ruby22-x64/lib/ruby/2.2.0/net/http/header.rb<br>
85 c:/Ruby22-x64/lib/ruby/2.2.0/x64-mingw32/enc/windows_31j.so<br>
86 c:/Ruby22-x64/lib/ruby/2.2.0/net/http/generic_request.rb<br>
87 c:/Ruby22-x64/lib/ruby/2.2.0/net/http/request.rb<br>
88 c:/Ruby22-x64/lib/ruby/2.2.0/net/http/requests.rb<br>
89 c:/Ruby22-x64/lib/ruby/2.2.0/net/http/response.rb<br>
90 c:/Ruby22-x64/lib/ruby/2.2.0/net/http/responses.rb<br>
91 c:/Ruby22-x64/lib/ruby/2.2.0/net/http/proxy_delta.rb<br>
92 c:/Ruby22-x64/lib/ruby/2.2.0/net/http/backward.rb<br>
93 c:/Ruby22-x64/lib/ruby/2.2.0/net/http.rb<br>
94 c:/Ruby22-x64/lib/ruby/2.2.0/x64-mingw32/date_core.so<br>
95 c:/Ruby22-x64/lib/ruby/2.2.0/date.rb<br>
96 c:/Ruby22-x64/lib/ruby/2.2.0/time.rb<br>
97 c:/Ruby22-x64/lib/ruby/site_ruby/2.2.0/rubygems/request.rb<br>
98 c:/Ruby22-x64/lib/ruby/2.2.0/cgi/core.rb<br>
99 c:/Ruby22-x64/lib/ruby/2.2.0/cgi/util.rb<br>
100 c:/Ruby22-x64/lib/ruby/2.2.0/cgi/cookie.rb<br>
101 c:/Ruby22-x64/lib/ruby/2.2.0/cgi.rb<br>
102 c:/Ruby22-x64/lib/ruby/site_ruby/2.2.0/rubygems/uri_formatter.rb<br>
103 c:/Ruby22-x64/lib/ruby/2.2.0/x64-mingw32/openssl.so<br>
104 c:/Ruby22-x64/lib/ruby/2.2.0/openssl/bn.rb<br>
105 c:/Ruby22-x64/lib/ruby/2.2.0/openssl/cipher.rb<br>
106 c:/Ruby22-x64/lib/ruby/2.2.0/openssl/config.rb<br>
107 c:/Ruby22-x64/lib/ruby/2.2.0/openssl/digest.rb<br>
108 c:/Ruby22-x64/lib/ruby/2.2.0/openssl/x509.rb<br>
109 c:/Ruby22-x64/lib/ruby/2.2.0/openssl/buffering.rb<br>
110 c:/Ruby22-x64/lib/ruby/2.2.0/x64-mingw32/fcntl.so<br>
111 c:/Ruby22-x64/lib/ruby/2.2.0/openssl/ssl.rb<br>
112 c:/Ruby22-x64/lib/ruby/2.2.0/openssl.rb<br>
113 c:/Ruby22-x64/lib/ruby/2.2.0/securerandom.rb<br>
114 c:/Ruby22-x64/lib/ruby/2.2.0/x64-mingw32/fiddle.so<br>
115 c:/Ruby22-x64/lib/ruby/2.2.0/fiddle/function.rb<br>
116 c:/Ruby22-x64/lib/ruby/2.2.0/fiddle/closure.rb<br>
117 c:/Ruby22-x64/lib/ruby/2.2.0/fiddle.rb<br>
118 c:/Ruby22-x64/lib/ruby/2.2.0/fiddle/value.rb<br>
119 c:/Ruby22-x64/lib/ruby/2.2.0/fiddle/pack.rb<br>
120 c:/Ruby22-x64/lib/ruby/2.2.0/fiddle/struct.rb<br>
121 c:/Ruby22-x64/lib/ruby/2.2.0/fiddle/cparser.rb<br>
122 c:/Ruby22-x64/lib/ruby/2.2.0/fiddle/import.rb<br>
123 c:/Ruby22-x64/lib/ruby/2.2.0/win32/importer.rb<br>
124 c:/Ruby22-x64/lib/ruby/2.2.0/x64-mingw32/enc/utf_16le.so<br>
125 c:/Ruby22-x64/lib/ruby/2.2.0/x64-mingw32/enc/trans/utf_16_32.so<br>
126 c:/Ruby22-x64/lib/ruby/2.2.0/win32/registry.rb<br>
127 c:/Ruby22-x64/lib/ruby/2.2.0/win32/resolv.rb<br>
128 c:/Ruby22-x64/lib/ruby/2.2.0/resolv.rb<br>
129 c:/Ruby22-x64/lib/ruby/site_ruby/2.2.0/rubygems/remote_fetcher.rb<br>
130 c:/Ruby22-x64/lib/ruby/site_ruby/2.2.0/rubygems/text.rb<br>
131 c:/Ruby22-x64/lib/ruby/site_ruby/2.2.0/rubygems/name_tuple.rb<br>
132 c:/Ruby22-x64/lib/ruby/site_ruby/2.2.0/rubygems/spec_fetcher.rb<br>
133 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/bundler-1.10.4/lib/bundler/source/rubygems.rb<br>
134 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/bundler-1.10.4/lib/bundler/lockfile_parser.rb<br>
135 c:/Ruby22-x64/lib/ruby/2.2.0/set.rb<br>
136 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/bundler-1.10.4/lib/bundler/definition.rb<br>
137 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/bundler-1.10.4/lib/bundler/dependency.rb<br>
138 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/bundler-1.10.4/lib/bundler/ruby_dsl.rb<br>
139 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/bundler-1.10.4/lib/bundler/dsl.rb<br>
140 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/bundler-1.10.4/lib/bundler/source_list.rb<br>
141 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/bundler-1.10.4/lib/bundler/lazy_specification.rb<br>
142 c:/Ruby22-x64/lib/ruby/2.2.0/tsort.rb<br>
143 c:/Ruby22-x64/lib/ruby/2.2.0/forwardable.rb<br>
144 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/bundler-1.10.4/lib/bundler/spec_set.rb<br>
145 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/bundler-1.10.4/lib/bundler/environment.rb<br>
146 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/bundler-1.10.4/lib/bundler/runtime.rb<br>
147 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/bundler-1.10.4/lib/bundler/dep_proxy.rb<br>
148 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/bundler-1.10.4/lib/bundler/index.rb<br>
149 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/bundler-1.10.4/lib/bundler/remote_specification.rb<br>
150 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/bundler-1.10.4/lib/bundler/stub_specification.rb<br>
151 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/bundler-1.10.4/lib/bundler/endpoint_specification.rb<br>
152 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/bundler-1.10.4/lib/bundler/setup.rb<br>
153 C:/Users/uidj5532/Downloads/resdb.git/config/boot.rb<br>
154 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/thread_safe-0.3.3/lib/thread_safe/version.rb<br>
155 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/thread_safe-0.3.3/lib/thread_safe/synchronized_delegator.rb<br>
156 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/thread_safe-0.3.3/lib/thread_safe.rb<br>
157 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/array/prepend_and_<br>
append.rb<br>
158 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/hash/deep_merge.rb</p>
<p>159 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/hash/except.rb<br>
160 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/hash/slice.rb<br>
161 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/i18n-0.6.9/lib/i18n/version.rb<br>
162 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/i18n-0.6.9/lib/i18n/exceptions.rb<br>
163 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/i18n-0.6.9/lib/i18n/interpolate/ruby.rb<br>
164 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/i18n-0.6.9/lib/i18n.rb<br>
165 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/lazy_load_hooks.rb<br>
166 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/i18n-0.6.9/lib/i18n/config.rb<br>
167 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/i18n.rb<br>
168 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/thread_safe-0.3.3/lib/thread_safe/non_concurrent_cache_backend.rb<br>
169 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/thread_safe-0.3.3/lib/thread_safe/mri_cache_backend.rb<br>
170 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/thread_safe-0.3.3/lib/thread_safe/cache.rb<br>
171 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/inflector/inflections.rb<br>
172 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/inflections.rb<br>
173 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/inflector/methods.rb<br>
174 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/dependencies/autoload.rb<br>
175 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/version.rb<br>
176 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/array/extract_opti<br>
ons.rb<br>
177 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/class/attribute_ac<br>
cessors.rb<br>
178 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/concern.rb<br>
179 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/logger_silence.rb<br>
180 c:/Ruby22-x64/lib/ruby/2.2.0/logger.rb<br>
181 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/logger.rb<br>
182 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support.rb<br>
183 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/object/blank.rb<br>
184 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/kernel/singleton_c<br>
lass.rb<br>
185 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/module/remove_meth<br>
od.rb<br>
186 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/class/attribute.rb</p>
<p>187 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/module/delegation.<br>
rb<br>
188 c:/Ruby22-x64/lib/ruby/2.2.0/singleton.rb<br>
189 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/deprecation/instance_delega<br>
tor.rb<br>
190 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/notifications/instrumenter.<br>
rb<br>
191 c:/Ruby22-x64/lib/ruby/2.2.0/mutex_m.rb<br>
192 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/notifications/fanout.rb<br>
193 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/per_thread_registry.rb<br>
194 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/notifications.rb<br>
195 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/deprecation/behaviors.rb<br>
196 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/deprecation/reporting.rb<br>
197 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/module/aliasing.rb</p>
<p>198 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/deprecation/method_wrappers<br>
.rb<br>
199 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/deprecation/proxy_wrappers.<br>
rb<br>
200 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/module/deprecation<br>
.rb<br>
201 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/deprecation.rb<br>
202 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/rails.rb<br>
203 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/module/attribute_a<br>
ccessors.rb<br>
204 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-4.0.4/lib/action_pack/version.rb<br>
205 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-4.0.4/lib/action_pack.rb<br>
206 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/rack-1.5.2/lib/rack/multipart.rb<br>
207 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/rack-1.5.2/lib/rack/utils.rb<br>
208 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/rack-1.5.2/lib/rack.rb<br>
209 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-4.0.4/lib/action_dispatch.rb<br>
210 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/rack-1.5.2/lib/rack/server.rb<br>
211 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/railties-4.0.4/lib/rails/commands/server.rb<br>
212 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/railties-4.0.4/lib/rails/ruby_version_check.rb<br>
213 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/kernel/reporting.r<br>
b<br>
214 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/key_generator.rb<br>
215 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/railties-4.0.4/lib/rails/initializable.rb<br>
216 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/ordered_options.rb<br>
217 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/object/acts_like.r<br>
b<br>
218 c:/Ruby22-x64/lib/ruby/2.2.0/x64-mingw32/bigdecimal.so<br>
219 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/object/duplicable.<br>
rb<br>
220 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/object/deep_dup.rb</p>
<p>221 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/object/try.rb<br>
222 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/object/inclusion.r<br>
b<br>
223 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/object/to_param.rb</p>
<p>224 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/object/to_query.rb</p>
<p>225 c:/Ruby22-x64/lib/ruby/2.2.0/base64.rb<br>
226 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/multibyte.rb<br>
227 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/string/multibyte.r<br>
b<br>
228 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/inflector/transliterate.rb<br>
229 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/string/inflections<br>
.rb<br>
230 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/date_time/calculat<br>
ions.rb<br>
231 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/xml_mini/rexml.rb<br>
232 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/xml_mini.rb<br>
233 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/hash/keys.rb<br>
234 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/array/conversions.<br>
rb<br>
235 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/time/acts_like.rb<br>
236 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/proxy_object.rb<br>
237 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/duration.rb<br>
238 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/values/time_zone.rb<br>
239 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/time/conversions.r<br>
b<br>
240 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/time_with_zone.rb<br>
241 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/time/zones.rb<br>
242 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/date_and_time/calc<br>
ulations.rb<br>
243 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/time/calculations.<br>
rb<br>
244 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/time/marshal.rb<br>
245 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/time.rb<br>
246 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/date/acts_like.rb<br>
247 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/date/zones.rb<br>
248 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/date/calculations.<br>
rb<br>
249 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/date/conversions.r<br>
b<br>
250 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/date.rb<br>
251 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/date_time/acts_lik<br>
e.rb<br>
252 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/date_time/conversi<br>
ons.rb<br>
253 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/date_time/zones.rb</p>
<p>254 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/date_time.rb<br>
255 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/numeric/time.rb<br>
256 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/integer/time.rb<br>
257 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/string/conversions<br>
.rb<br>
258 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/string/zones.rb<br>
259 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/time.rb<br>
260 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/array/wrap.rb<br>
261 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/hash/reverse_merge<br>
.rb<br>
262 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/hash/conversions.r<br>
b<br>
263 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/object/conversions<br>
.rb<br>
264 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/object/instance_va<br>
riables.rb<br>
265 c:/Ruby22-x64/lib/ruby/2.2.0/json/version.rb<br>
266 c:/Ruby22-x64/lib/ruby/2.2.0/ostruct.rb<br>
267 c:/Ruby22-x64/lib/ruby/2.2.0/json/generic_object.rb<br>
268 c:/Ruby22-x64/lib/ruby/2.2.0/json/common.rb<br>
269 c:/Ruby22-x64/lib/ruby/2.2.0/x64-mingw32/enc/utf_16be.so<br>
270 c:/Ruby22-x64/lib/ruby/2.2.0/x64-mingw32/enc/utf_32be.so<br>
271 c:/Ruby22-x64/lib/ruby/2.2.0/x64-mingw32/enc/utf_32le.so<br>
272 c:/Ruby22-x64/lib/ruby/2.2.0/x64-mingw32/json/ext/parser.so<br>
273 c:/Ruby22-x64/lib/ruby/2.2.0/x64-mingw32/json/ext/generator.so<br>
274 c:/Ruby22-x64/lib/ruby/2.2.0/json/ext.rb<br>
275 c:/Ruby22-x64/lib/ruby/2.2.0/json.rb<br>
276 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/object/to_json.rb<br>
277 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/option_merger.rb<br>
278 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/object/with_option<br>
s.rb<br>
279 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/object.rb<br>
280 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/railties-4.0.4/lib/rails/paths.rb<br>
281 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/railties-4.0.4/lib/rails/rack.rb<br>
282 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/railties-4.0.4/lib/rails/configuration.rb<br>
283 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/inflector.rb<br>
284 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/module/introspecti<br>
on.rb<br>
285 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/railties-4.0.4/lib/rails/railtie.rb<br>
286 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/railties-4.0.4/lib/rails/engine/railties.rb<br>
287 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/railties-4.0.4/lib/rails/engine.rb<br>
288 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/railties-4.0.4/lib/rails/application.rb<br>
289 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/railties-4.0.4/lib/rails/version.rb<br>
290 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/railties-4.0.4/lib/rails/deprecation.rb<br>
291 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/file_update_checker.rb<br>
292 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/railties-4.0.4/lib/rails/railtie/configurable.rb<br>
293 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/railties-4.0.4/lib/rails/railtie/configuration.rb<br>
294 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/i18n_railtie.rb<br>
295 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/railtie.rb<br>
296 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-4.0.4/lib/action_dispatch/railtie.rb<br>
297 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/railties-4.0.4/lib/rails.rb<br>
298 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activemodel-4.0.4/lib/active_model/version.rb<br>
299 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activemodel-4.0.4/lib/active_model.rb<br>
300 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/crud.rb<br>
301 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/factory_methods.rb<br>
302 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/expressions.rb<br>
303 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/predications.rb<br>
304 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/window_predications.rb<br>
305 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/math.rb<br>
306 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/alias_predication.rb<br>
307 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/order_predications.rb<br>
308 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/table.rb<br>
309 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/attributes/attribute.rb<br>
310 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/attributes.rb<br>
311 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/compatibility/wheres.rb<br>
312 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/expression.rb<br>
313 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/visitors/visitor.rb<br>
314 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/visitors/depth_first.rb<br>
315 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/visitors/to_sql.rb<br>
316 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/visitors/sqlite.rb<br>
317 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/visitors/postgresql.rb<br>
318 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/visitors/mysql.rb<br>
319 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/visitors/mssql.rb<br>
320 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/visitors/oracle.rb<br>
321 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/visitors/join_sql.rb<br>
322 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/visitors/where_sql.rb<br>
323 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/visitors/order_clauses.rb<br>
324 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/visitors/dot.rb<br>
325 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/visitors/ibm_db.rb<br>
326 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/visitors/informix.rb<br>
327 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/visitors.rb<br>
328 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/tree_manager.rb<br>
329 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/insert_manager.rb<br>
330 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/select_manager.rb<br>
331 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/update_manager.rb<br>
332 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/delete_manager.rb<br>
333 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/nodes/node.rb<br>
334 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/nodes/select_statement.rb<br>
335 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/nodes/select_core.rb<br>
336 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/nodes/insert_statement.rb<br>
337 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/nodes/update_statement.rb<br>
338 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/nodes/terminal.rb<br>
339 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/nodes/true.rb<br>
340 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/nodes/false.rb<br>
341 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/nodes/unary.rb<br>
342 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/nodes/grouping.rb<br>
343 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/nodes/ascending.rb<br>
344 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/nodes/descending.rb<br>
345 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/nodes/unqualified_column.rb<br>
346 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/nodes/with.rb<br>
347 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/nodes/binary.rb<br>
348 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/nodes/equality.rb<br>
349 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/nodes/in.rb<br>
350 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/nodes/join_source.rb<br>
351 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/nodes/delete_statement.rb<br>
352 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/nodes/table_alias.rb<br>
353 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/nodes/infix_operation.rb<br>
354 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/nodes/over.rb<br>
355 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/nodes/and.rb<br>
356 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/nodes/function.rb<br>
357 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/nodes/count.rb<br>
358 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/nodes/extract.rb<br>
359 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/nodes/values.rb<br>
360 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/nodes/named_function.rb<br>
361 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/nodes/window.rb<br>
362 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/nodes/inner_join.rb<br>
363 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/nodes/outer_join.rb<br>
364 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/nodes/string_join.rb<br>
365 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/nodes/sql_literal.rb<br>
366 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/nodes.rb<br>
367 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/deprecated.rb<br>
368 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/sql/engine.rb<br>
369 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel/sql_literal.rb<br>
370 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/arel-4.0.2/lib/arel.rb<br>
371 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activerecord-deprecated_finders-1.0.3/lib/active_record/deprecated<br>
_finders/version.rb<br>
372 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activerecord-deprecated_finders-1.0.3/lib/active_record/deprecated<br>
<em>finders.rb<br>
373 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activerecord-4.0.4/lib/active_record/version.rb<br>
374 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/enumerable.rb<br>
375 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activemodel-4.0.4/lib/active_model/attribute_methods.rb<br>
376 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activerecord-4.0.4/lib/active_record/attribute_methods.rb<br>
377 c:/Ruby22-x64/lib/ruby/2.2.0/bigdecimal/util.rb<br>
378 c:/Ruby22-x64/lib/ruby/2.2.0/benchmark.rb<br>
379 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/benchmark.rb<br>
380 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activerecord-4.0.4/lib/active_record/connection_adapters/schema_ca<br>
che.rb<br>
381 c:/Ruby22-x64/lib/ruby/2.2.0/ipaddr.rb<br>
382 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activerecord-4.0.4/lib/active_record/connection_adapters/abstract/<br>
schema_dumper.rb<br>
383 c:/Ruby22-x64/lib/ruby/2.2.0/psych/exception.rb<br>
384 c:/Ruby22-x64/lib/ruby/2.2.0/psych/syntax_error.rb<br>
385 c:/Ruby22-x64/lib/ruby/2.2.0/x64-mingw32/psych.so<br>
386 c:/Ruby22-x64/lib/ruby/2.2.0/psych/omap.rb<br>
387 c:/Ruby22-x64/lib/ruby/2.2.0/psych/set.rb<br>
388 c:/Ruby22-x64/lib/ruby/2.2.0/psych/class_loader.rb<br>
389 c:/Ruby22-x64/lib/ruby/2.2.0/psych/scalar_scanner.rb<br>
390 c:/Ruby22-x64/lib/ruby/2.2.0/psych/nodes/node.rb<br>
391 c:/Ruby22-x64/lib/ruby/2.2.0/psych/nodes/stream.rb<br>
392 c:/Ruby22-x64/lib/ruby/2.2.0/psych/nodes/document.rb<br>
393 c:/Ruby22-x64/lib/ruby/2.2.0/psych/nodes/sequence.rb<br>
394 c:/Ruby22-x64/lib/ruby/2.2.0/psych/nodes/scalar.rb<br>
395 c:/Ruby22-x64/lib/ruby/2.2.0/psych/nodes/mapping.rb<br>
396 c:/Ruby22-x64/lib/ruby/2.2.0/psych/nodes/alias.rb<br>
397 c:/Ruby22-x64/lib/ruby/2.2.0/psych/nodes.rb<br>
398 c:/Ruby22-x64/lib/ruby/2.2.0/psych/streaming.rb<br>
399 c:/Ruby22-x64/lib/ruby/2.2.0/psych/visitors/visitor.rb<br>
400 c:/Ruby22-x64/lib/ruby/2.2.0/psych/visitors/to_ruby.rb<br>
401 c:/Ruby22-x64/lib/ruby/2.2.0/psych/visitors/emitter.rb<br>
402 c:/Ruby22-x64/lib/ruby/2.2.0/psych/handler.rb<br>
403 c:/Ruby22-x64/lib/ruby/2.2.0/psych/tree_builder.rb<br>
404 c:/Ruby22-x64/lib/ruby/2.2.0/psych/visitors/yaml_tree.rb<br>
405 c:/Ruby22-x64/lib/ruby/2.2.0/psych/json/ruby_events.rb<br>
406 c:/Ruby22-x64/lib/ruby/2.2.0/psych/visitors/json_tree.rb<br>
407 c:/Ruby22-x64/lib/ruby/2.2.0/psych/visitors/depth_first.rb<br>
408 c:/Ruby22-x64/lib/ruby/2.2.0/psych/visitors.rb<br>
409 c:/Ruby22-x64/lib/ruby/2.2.0/psych/parser.rb<br>
410 c:/Ruby22-x64/lib/ruby/2.2.0/psych/coder.rb<br>
411 c:/Ruby22-x64/lib/ruby/2.2.0/psych/core_ext.rb<br>
412 c:/Ruby22-x64/lib/ruby/2.2.0/psych/deprecated.rb<br>
413 c:/Ruby22-x64/lib/ruby/2.2.0/psych/stream.rb<br>
414 c:/Ruby22-x64/lib/ruby/2.2.0/psych/json/yaml_events.rb<br>
415 c:/Ruby22-x64/lib/ruby/2.2.0/psych/json/tree_builder.rb<br>
416 c:/Ruby22-x64/lib/ruby/2.2.0/psych/json/stream.rb<br>
417 c:/Ruby22-x64/lib/ruby/2.2.0/psych/handlers/document_stream.rb<br>
418 c:/Ruby22-x64/lib/ruby/2.2.0/psych.rb<br>
419 c:/Ruby22-x64/lib/ruby/2.2.0/yaml.rb<br>
420 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/big_decimal/conver<br>
sions.rb<br>
421 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activerecord-4.0.4/lib/active_record/connection_adapters/abstract/<br>
quoting.rb<br>
422 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activerecord-4.0.4/lib/active_record/connection_adapters/abstract/<br>
database_statements.rb<br>
423 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activerecord-4.0.4/lib/active_record/errors.rb<br>
424 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activerecord-4.0.4/lib/active_record/migration.rb<br>
425 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activerecord-4.0.4/lib/active_record/migration/join_table.rb<br>
426 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activerecord-4.0.4/lib/active_record/connection_adapters/abstract/<br>
schema_statements.rb<br>
427 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activerecord-4.0.4/lib/active_record/connection_adapters/abstract/<br>
database_limits.rb<br>
428 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activerecord-4.0.4/lib/active_record/connection_adapters/abstract/<br>
query_cache.rb<br>
429 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/descendants_tracker.rb<br>
430 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/callbacks.rb<br>
431 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activerecord-4.0.4/lib/active_record/connection_adapters/abstract</em><br>
adapter.rb<br>
432 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activerecord-4.0.4/lib/active_record/scoping.rb<br>
433 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activerecord-4.0.4/lib/active_record.rb<br>
434 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activemodel-4.0.4/lib/active_model/railtie.rb<br>
435 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/module/attr_intern<br>
al.rb<br>
436 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/module/anonymous.r<br>
b<br>
437 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-4.0.4/lib/abstract_controller.rb<br>
438 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/rack-1.5.2/lib/rack/request.rb<br>
439 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/rack-1.5.2/lib/rack/response.rb<br>
440 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-4.0.4/lib/action_dispatch/http/filter_redirect.rb<br>
441 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-4.0.4/lib/action_dispatch/http/cache.rb<br>
442 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-4.0.4/lib/action_dispatch/http/response.rb<br>
443 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-4.0.4/lib/action_controller/metal/live.rb<br>
444 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/hash_with_indifferent_acces<br>
s.rb<br>
445 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/hash/indifferent_a<br>
ccess.rb<br>
446 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/rescuable.rb<br>
447 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-4.0.4/lib/action_dispatch/http/upload.rb<br>
448 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/rack-test-0.6.2/lib/rack/mock_session.rb<br>
449 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/rack-test-0.6.2/lib/rack/test/cookie_jar.rb<br>
450 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/rack-test-0.6.2/lib/rack/test/mock_digest_request.rb<br>
451 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/rack-test-0.6.2/lib/rack/test/utils.rb<br>
452 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/rack-test-0.6.2/lib/rack/test/methods.rb<br>
453 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/rack-test-0.6.2/lib/rack/test/uploaded_file.rb<br>
454 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/rack-test-0.6.2/lib/rack/test.rb<br>
455 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-4.0.4/lib/action_controller/metal/strong_parameters.rb<br>
456 c:/Ruby22-x64/lib/ruby/2.2.0/erb.rb<br>
457 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/string/output_safe<br>
ty.rb<br>
458 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-4.0.4/lib/action_view.rb<br>
459 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-4.0.4/lib/action_view/vendor/html-scanner.rb<br>
460 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/load_error.rb<br>
461 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/name_error.rb<br>
462 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/uri.rb<br>
463 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-4.0.4/lib/action_controller.rb<br>
464 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-4.0.4/lib/action_view/railtie.rb<br>
465 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-4.0.4/lib/abstract_controller/railties/routes_helpers.r<br>
b<br>
466 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-4.0.4/lib/action_controller/railties/helpers.rb<br>
467 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-4.0.4/lib/action_controller/railtie.rb<br>
468 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activerecord-4.0.4/lib/active_record/railtie.rb<br>
469 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionmailer-4.0.4/lib/action_mailer/version.rb<br>
470 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/class/delegating_a<br>
ttributes.rb<br>
471 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/module/reachable.r<br>
b<br>
472 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/class/subclasses.r<br>
b<br>
473 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/class.rb<br>
474 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionmailer-4.0.4/lib/action_mailer.rb<br>
475 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionmailer-4.0.4/lib/action_mailer/railtie.rb<br>
476 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/railties-4.0.4/lib/rails/test_unit/railtie.rb<br>
477 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sprockets-2.11.0/lib/sprockets/version.rb<br>
478 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/hike-1.2.3/lib/hike.rb<br>
479 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/tilt-1.4.1/lib/tilt/template.rb<br>
480 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/tilt-1.4.1/lib/tilt/string.rb<br>
481 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/tilt-1.4.1/lib/tilt/erb.rb<br>
482 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/tilt-1.4.1/lib/tilt/etanni.rb<br>
483 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/tilt-1.4.1/lib/tilt/haml.rb<br>
484 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/tilt-1.4.1/lib/tilt/css.rb<br>
485 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/tilt-1.4.1/lib/tilt/csv.rb<br>
486 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/tilt-1.4.1/lib/tilt/coffee.rb<br>
487 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/tilt-1.4.1/lib/tilt/nokogiri.rb<br>
488 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/tilt-1.4.1/lib/tilt/builder.rb<br>
489 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/tilt-1.4.1/lib/tilt/markaby.rb<br>
490 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/tilt-1.4.1/lib/tilt/liquid.rb<br>
491 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/tilt-1.4.1/lib/tilt/radius.rb<br>
492 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/tilt-1.4.1/lib/tilt/markdown.rb<br>
493 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/tilt-1.4.1/lib/tilt/textile.rb<br>
494 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/tilt-1.4.1/lib/tilt/rdoc.rb<br>
495 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/tilt-1.4.1/lib/tilt/wiki.rb<br>
496 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/tilt-1.4.1/lib/tilt/yajl.rb<br>
497 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/tilt-1.4.1/lib/tilt/asciidoc.rb<br>
498 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/tilt-1.4.1/lib/tilt/plain.rb<br>
499 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/tilt-1.4.1/lib/tilt.rb<br>
500 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sprockets-2.11.0/lib/sprockets/eco_template.rb<br>
501 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sprockets-2.11.0/lib/sprockets/ejs_template.rb<br>
502 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sprockets-2.11.0/lib/sprockets/jst_processor.rb<br>
503 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sprockets-2.11.0/lib/sprockets/utils.rb<br>
504 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sprockets-2.11.0/lib/sprockets/engines.rb<br>
505 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/rack-1.5.2/lib/rack/mime.rb<br>
506 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sprockets-2.11.0/lib/sprockets/mime.rb<br>
507 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sprockets-2.11.0/lib/sprockets/processor.rb<br>
508 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sprockets-2.11.0/lib/sprockets/processing.rb<br>
509 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sprockets-2.11.0/lib/sprockets/compressing.rb<br>
510 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sprockets-2.11.0/lib/sprockets/paths.rb<br>
511 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/hike-1.2.3/lib/hike/normalized_array.rb<br>
512 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/hike-1.2.3/lib/hike/extensions.rb<br>
513 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/hike-1.2.3/lib/hike/index.rb<br>
514 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/hike-1.2.3/lib/hike/paths.rb<br>
515 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/hike-1.2.3/lib/hike/trail.rb<br>
516 c:/Ruby22-x64/lib/ruby/2.2.0/shellwords.rb<br>
517 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sprockets-2.11.0/lib/sprockets/directive_processor.rb<br>
518 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sprockets-2.11.0/lib/sprockets/safety_colons.rb<br>
519 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sprockets-2.11.0/lib/sprockets/charset_normalizer.rb<br>
520 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sprockets-2.11.0/lib/sprockets/sass_compressor.rb<br>
521 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sprockets-2.11.0/lib/sprockets/yui_compressor.rb<br>
522 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sprockets-2.11.0/lib/sprockets/closure_compressor.rb<br>
523 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sprockets-2.11.0/lib/sprockets/uglifier_compressor.rb<br>
524 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sprockets-2.11.0/lib/sprockets/sass_template.rb<br>
525 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sprockets-2.11.0/lib/sprockets/scss_template.rb<br>
526 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sprockets-2.11.0/lib/sprockets.rb<br>
527 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/benchmarkable.rb<br>
528 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-4.0.4/lib/action_view/helpers/active_model_helper.rb<br>
529 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-4.0.4/lib/action_view/helpers/asset_url_helper.rb<br>
530 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-4.0.4/lib/action_view/helpers/capture_helper.rb<br>
531 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-4.0.4/lib/action_view/helpers/tag_helper.rb<br>
532 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-4.0.4/lib/action_view/helpers/asset_tag_helper.rb<br>
533 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-4.0.4/lib/action_view/helpers/atom_feed_helper.rb<br>
534 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-4.0.4/lib/action_view/helpers/cache_helper.rb<br>
535 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-4.0.4/lib/action_view/helpers/controller_helper.rb<br>
536 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-4.0.4/lib/action_view/helpers/csrf_helper.rb<br>
537 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-4.0.4/lib/action_view/helpers/date_helper.rb<br>
538 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-4.0.4/lib/action_view/helpers/debug_helper.rb<br>
539 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-4.0.4/lib/action_view/helpers/javascript_helper.rb<br>
540 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/array/access.rb<br>
541 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-4.0.4/lib/action_view/helpers/url_helper.rb<br>
542 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/string/filters.rb<br>
543 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-4.0.4/lib/action_view/helpers/sanitize_helper.rb<br>
544 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-4.0.4/lib/action_view/helpers/output_safety_helper.rb<br>
545 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-4.0.4/lib/action_view/helpers/text_helper.rb<br>
546 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-4.0.4/lib/action_view/helpers/form_tag_helper.rb<br>
547 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-4.0.4/lib/action_view/helpers/tags.rb<br>
548 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-4.0.4/lib/action_view/model_naming.rb<br>
549 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-4.0.4/lib/action_view/helpers/form_helper.rb<br>
550 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-4.0.4/lib/action_view/helpers/form_options_helper.rb<br>
551 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/number_helper.rb<br>
552 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-4.0.4/lib/action_view/helpers/number_helper.rb<br>
553 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/module/qualified_c<br>
onst.rb<br>
554 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/module.rb<br>
555 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-4.0.4/lib/action_view/record_identifier.rb<br>
556 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-4.0.4/lib/action_view/helpers/record_tag_helper.rb<br>
557 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-4.0.4/lib/action_view/helpers/rendering_helper.rb<br>
558 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-4.0.4/lib/action_view/helpers/translation_helper.rb<br>
559 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-4.0.4/lib/action_view/helpers.rb<br>
560 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sprockets-rails-2.0.1/lib/sprockets/rails/helper.rb<br>
561 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/railties-4.0.4/lib/rails/engine/configuration.rb<br>
562 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/railties-4.0.4/lib/rails/application/configuration.rb<br>
563 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sprockets-rails-2.0.1/lib/sprockets/railtie.rb<br>
564 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/railties-4.0.4/lib/rails/all.rb<br>
565 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/string_inquirer.rb<br>
566 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-rails-4.0.3/lib/sass/rails/version.rb<br>
567 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/root.rb<br>
568 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/util/subset_map.rb<br>
569 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/util/multibyte_string_scanner.rb<br>
570 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/util.rb<br>
571 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/version.rb<br>
572 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/logger/log_level.rb<br>
573 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/logger/base.rb<br>
574 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/logger.rb<br>
575 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/cache_stores/base.rb<br>
576 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/cache_stores/filesystem.rb<br>
577 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/cache_stores/memory.rb<br>
578 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/cache_stores/chain.rb<br>
579 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/cache_stores.rb<br>
580 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/tree/node.rb<br>
581 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/tree/root_node.rb<br>
582 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/tree/rule_node.rb<br>
583 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/tree/comment_node.rb<br>
584 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/tree/prop_node.rb<br>
585 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/tree/directive_node.rb<br>
586 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/tree/media_node.rb<br>
587 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/tree/supports_node.rb<br>
588 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/tree/css_import_node.rb<br>
589 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/tree/variable_node.rb<br>
590 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/tree/mixin_def_node.rb<br>
591 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/tree/mixin_node.rb<br>
592 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/tree/trace_node.rb<br>
593 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/tree/content_node.rb<br>
594 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/tree/function_node.rb<br>
595 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/tree/return_node.rb<br>
596 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/tree/extend_node.rb<br>
597 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/tree/if_node.rb<br>
598 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/tree/while_node.rb<br>
599 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/tree/for_node.rb<br>
600 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/tree/each_node.rb<br>
601 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/tree/debug_node.rb<br>
602 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/tree/warn_node.rb<br>
603 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/tree/import_node.rb<br>
604 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/tree/charset_node.rb<br>
605 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/tree/visitors/base.rb<br>
606 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/tree/visitors/perform.rb<br>
607 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/tree/visitors/cssize.rb<br>
608 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/tree/visitors/extend.rb<br>
609 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/tree/visitors/convert.rb<br>
610 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/tree/visitors/to_css.rb<br>
611 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/tree/visitors/deep_copy.rb<br>
612 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/tree/visitors/set_options.rb<br>
613 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/tree/visitors/check_nesting.rb<br>
614 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/selector/simple.rb<br>
615 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/selector/abstract_sequence.rb<br>
616 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/selector/comma_sequence.rb<br>
617 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/selector/sequence.rb<br>
618 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/selector/simple_sequence.rb<br>
619 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/selector.rb<br>
620 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/environment.rb<br>
621 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/script/node.rb<br>
622 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/script/variable.rb<br>
623 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/script/functions.rb<br>
624 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/script/funcall.rb<br>
625 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/script/number.rb<br>
626 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/script/color.rb<br>
627 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/script/bool.rb<br>
628 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/script/null.rb<br>
629 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/script/list.rb<br>
630 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/script/arg_list.rb<br>
631 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/script/literal.rb<br>
632 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/script/string.rb<br>
633 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/script/unary_operation.rb<br>
634 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/script/interpolation.rb<br>
635 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/script/string_interpolation.rb<br>
636 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/script/operation.rb<br>
637 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/scss/rx.rb<br>
638 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/script/lexer.rb<br>
639 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/script/parser.rb<br>
640 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/script.rb<br>
641 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/scss/script_lexer.rb<br>
642 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/scss/script_parser.rb<br>
643 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/scss/parser.rb<br>
644 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/script/css_lexer.rb<br>
645 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/script/css_parser.rb<br>
646 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/scss/static_parser.rb<br>
647 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/scss/css_parser.rb<br>
648 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/scss.rb<br>
649 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/error.rb<br>
650 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/importers/base.rb<br>
651 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/importers/filesystem.rb<br>
652 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/importers.rb<br>
653 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/shared.rb<br>
654 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/media.rb<br>
655 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/supports.rb<br>
656 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/engine.rb<br>
657 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass/railtie.rb<br>
658 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-3.2.19/lib/sass.rb<br>
659 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sprockets-2.11.0/lib/sprockets/sass_functions.rb<br>
660 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-rails-4.0.3/lib/sass/rails/helpers.rb<br>
661 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sprockets-2.11.0/lib/sprockets/sass_importer.rb<br>
662 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-rails-4.0.3/lib/sass/rails/importer.rb<br>
663 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-rails-4.0.3/lib/sass/rails/template.rb<br>
664 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-rails-4.0.3/lib/sass/rails/logger.rb<br>
665 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-rails-4.0.3/lib/sass/rails/railtie.rb<br>
666 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-rails-4.0.3/lib/sass/rails.rb<br>
667 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/sass-rails-4.0.3/lib/sass-rails.rb<br>
668 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/execjs-2.0.2/lib/execjs/version.rb<br>
669 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/execjs-2.0.2/lib/execjs/module.rb<br>
670 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/execjs-2.0.2/lib/execjs/encoding.rb<br>
671 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/execjs-2.0.2/lib/execjs/runtime.rb<br>
672 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/execjs-2.0.2/lib/execjs/disabled_runtime.rb<br>
673 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/execjs-2.0.2/lib/execjs/external_runtime.rb<br>
674 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/execjs-2.0.2/lib/execjs/johnson_runtime.rb<br>
675 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/execjs-2.0.2/lib/execjs/mustang_runtime.rb<br>
676 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/execjs-2.0.2/lib/execjs/ruby_racer_runtime.rb<br>
677 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/execjs-2.0.2/lib/execjs/ruby_rhino_runtime.rb<br>
678 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/execjs-2.0.2/lib/execjs/runtimes.rb<br>
679 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/execjs-2.0.2/lib/execjs.rb<br>
680 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/uglifier-2.5.0/lib/uglifier/version.rb<br>
681 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/uglifier-2.5.0/lib/uglifier.rb<br>
682 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/coffee-script-source-1.7.0/lib/coffee_script/source.rb<br>
683 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/coffee-script-2.2.0/lib/coffee_script.rb<br>
684 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/coffee-script-2.2.0/lib/coffee-script.rb<br>
685 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/coffee-rails-4.0.1/lib/coffee/rails/engine.rb<br>
686 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/coffee-rails-4.0.1/lib/coffee/rails/template_handler.rb<br>
687 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/coffee-rails-4.0.1/lib/coffee/rails/version.rb<br>
688 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/coffee-rails-4.0.1/lib/coffee-rails.rb<br>
689 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/jquery-rails-3.1.0/lib/jquery/rails/engine.rb<br>
690 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/jquery-rails-3.1.0/lib/jquery/rails/railtie.rb<br>
691 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/jquery-rails-3.1.0/lib/jquery/rails/version.rb<br>
692 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/jquery-rails-3.1.0/lib/jquery/rails.rb<br>
693 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/jquery-rails-3.1.0/lib/jquery-rails.rb<br>
694 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/turbolinks-2.2.2/lib/turbolinks/version.rb<br>
695 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/turbolinks-2.2.2/lib/turbolinks/xhr_headers.rb<br>
696 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/turbolinks-2.2.2/lib/turbolinks/xhr_url_for.rb<br>
697 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/turbolinks-2.2.2/lib/turbolinks/cookies.rb<br>
698 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/turbolinks-2.2.2/lib/turbolinks/x_domain_blocker.rb<br>
699 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/turbolinks-2.2.2/lib/turbolinks/redirection.rb<br>
700 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/turbolinks-2.2.2/lib/turbolinks.rb<br>
701 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/ordered_hash.rb<br>
702 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/hash/diff.rb<br>
703 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/hash.rb<br>
704 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/numeric/bytes.rb<br>
705 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/cache.rb<br>
706 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/multi_json-1.9.3/lib/multi_json/options.rb<br>
707 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/multi_json-1.9.3/lib/multi_json/version.rb<br>
708 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/multi_json-1.9.3/lib/multi_json/adapter_error.rb<br>
709 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/multi_json-1.9.3/lib/multi_json/parse_error.rb<br>
710 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/multi_json-1.9.3/lib/multi_json.rb<br>
711 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/activesupport-4.0.4/lib/active_support/core_ext/string/starts_ends<br>
_with.rb<br>
712 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-4.0.4/lib/action_dispatch/http/mime_types.rb<br>
713 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-4.0.4/lib/action_dispatch/http/mime_type.rb<br>
714 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-4.0.4/lib/action_view/template/handlers.rb<br>
715 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/erubis-2.7.0/lib/erubis/util.rb<br>
716 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/erubis-2.7.0/lib/erubis/generator.rb<br>
717 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/erubis-2.7.0/lib/erubis/converter.rb<br>
718 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/erubis-2.7.0/lib/erubis/error.rb<br>
719 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/erubis-2.7.0/lib/erubis/context.rb<br>
720 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/erubis-2.7.0/lib/erubis/evaluator.rb<br>
721 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/erubis-2.7.0/lib/erubis/engine.rb<br>
722 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/erubis-2.7.0/lib/erubis/helper.rb<br>
723 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/erubis-2.7.0/lib/erubis/enhancer.rb<br>
724 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/erubis-2.7.0/lib/erubis/engine/eruby.rb<br>
725 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/erubis-2.7.0/lib/erubis/local-setting.rb<br>
726 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/erubis-2.7.0/lib/erubis.rb<br>
727 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-4.0.4/lib/action_view/template/handlers/erb.rb<br>
728 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-4.0.4/lib/action_view/template/handlers/builder.rb<br>
729 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-4.0.4/lib/action_view/template/handlers/raw.rb<br>
730 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/actionpack-4.0.4/lib/action_view/template.rb<br>
731 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/jbuilder-1.5.3/lib/jbuilder/jbuilder_template.rb<br>
732 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/jbuilder-1.5.3/lib/jbuilder/railtie.rb<br>
733 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/jbuilder-1.5.3/lib/jbuilder.rb<br>
734 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/high_voltage-2.1.0/lib/high_voltage/configuration.rb<br>
735 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/high_voltage-2.1.0/lib/high_voltage/constraints/root_route.rb<br>
736 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/high_voltage-2.1.0/lib/high_voltage/page_finder.rb<br>
737 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/high_voltage-2.1.0/lib/high_voltage/route_drawers/default.rb<br>
738 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/high_voltage-2.1.0/lib/high_voltage/route_drawers/root.rb<br>
739 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/high_voltage-2.1.0/lib/high_voltage/version.rb<br>
740 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/high_voltage-2.1.0/lib/high_voltage/engine.rb<br>
741 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/high_voltage-2.1.0/lib/high_voltage.rb<br>
742 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/rails-erd-1.1.0/lib/rails_erd/railtie.rb<br>
743 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/rails-erd-1.1.0/lib/rails_erd.rb<br>
744 c:/Ruby22-x64/lib/ruby/gems/2.2.0/gems/rails-erd-1.1.0/lib/rails-erd.rb</p>
</li>
</ul>
<p>[NOTE]<br>
You may have encountered a bug in the Ruby interpreter or extension libraries.<br>
Bug reports are welcome.<br>
For details: <a href="http://www.ruby-lang.org/bugreport.html" class="external">http://www.ruby-lang.org/bugreport.html</a></p>
<p>This application has requested the Runtime to terminate it in an unusual way.<br>
Please contact the application's support team for more information.</p> Ruby master - Feature #11141 (Rejected): new syntax suggestion for abbreviate definition on bloc...https://redmine.ruby-lang.org/issues/111412015-05-12T00:45:57Zneohunter (Arnold Roa)manolet@gmail.com
<p>One of the most commons things I do in Ruby are small block definitions:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">x</span><span class="p">.</span><span class="nf">each</span><span class="p">{</span><span class="o">|</span><span class="n">a</span><span class="o">|</span> <span class="n">a</span><span class="p">}</span>
</code></pre>
<p>One useful syntax introduced was the <strong><code>&:method</code></strong> that allows calling a method on a block if only one param is expected. It's a shortcut for <strong><code>a.each{|x|x.method}</code></strong>. I think it would be nice if Ruby had a syntax that allows me to not define the params that block would receive, but instead access them in order. For example:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">x</span><span class="p">.</span><span class="nf">each</span> <span class="p">{</span> <span class="vg">$1</span> <span class="p">}</span>
</code></pre>
<p>Let's suppose the block is waiting for two params, I normally do:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">x</span><span class="p">.</span><span class="nf">method</span> <span class="p">{</span><span class="o">|</span><span class="n">a</span><span class="p">,</span><span class="n">b</span><span class="o">|</span> <span class="n">a</span> <span class="o">-</span> <span class="n">b</span> <span class="p">}</span>
</code></pre>
<p>This syntax will allow us to use:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"> <span class="n">x</span><span class="p">.</span><span class="nf">method</span><span class="p">{</span> <span class="vg">$1</span> <span class="o">-</span> <span class="vg">$2</span> <span class="p">}</span>
</code></pre>
<p>So:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"> <span class="n">x</span><span class="p">.</span><span class="nf">each</span> <span class="p">{</span> <span class="n">p1</span><span class="p">.</span><span class="nf">stg</span> <span class="p">}</span>
<span class="n">x</span><span class="p">.</span><span class="nf">each</span> <span class="p">{</span><span class="o">|</span><span class="n">p1</span><span class="o">|</span> <span class="n">p1</span><span class="p">.</span><span class="nf">stg</span><span class="p">}</span>
<span class="n">x</span><span class="p">.</span><span class="nf">each</span> <span class="o">&</span><span class="ss">:stg</span>
</code></pre>
<p>would be the same.</p>
<p>Please consider <code>$1</code> and <code>$2</code> just as an example. I don't like the fact that they are global variables. It could be <code>_1</code> or <code>p1</code>, for example:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">x</span><span class="p">.</span><span class="nf">method</span><span class="p">{</span> <span class="n">p1</span> <span class="o">-</span> <span class="n">p2</span> <span class="p">}</span>
<span class="n">x</span><span class="p">.</span><span class="nf">each</span><span class="p">{</span> <span class="n">p1</span> <span class="o">-</span> <span class="n">p2</span> <span class="p">}</span> <span class="o">==</span> <span class="n">x</span><span class="p">.</span><span class="nf">each</span> <span class="p">{</span><span class="o">|</span><span class="n">p1</span><span class="p">,</span> <span class="n">p2</span><span class="o">|</span> <span class="n">p1</span> <span class="o">-</span> <span class="n">p2</span> <span class="p">}</span>
</code></pre>
<p>Or, as blocks already uses <strong><code>&:method</code></strong> it could be <strong><code>&:1</code></strong>. Or any other thing that you may consider more appropriated.</p>
<p>I think this syntax would be very nice for short block definitions, the downside is that it allows for bad practice on longer methods, but in the end, that's a decision that a programer should make.</p>
<p>Maybe this is not a valid reason, but I would like to point out that Regex is actually creating global vars as the results of match: $x vars. (for perl's historical reasons)</p>
<p>So why not introduce this into Ruby's syntax?</p>
<p>Personally I don't like either <code>$1</code> nor <code>p1</code>. They are just the first quick things that come to my mind.</p> Ruby master - Bug #11109 (Third Party's Issue): Crash of irb.https://redmine.ruby-lang.org/issues/111092015-04-30T13:51:36Zyangzhijava (Jeffrey Yang)yangzhijava@outlook.com
<p>ENV:<br>
Mac OS X 10.10.3<br>
ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-darwin14]</p>
<p>HOW TO COMPILE:</p>
<ol>
<li>cd to the dir of ruby 2.2.2.</li>
<li>./configure</li>
<li>make</li>
<li>make install as root.</li>
</ol>
<p>STEPS:</p>
<ol>
<li>
<p>Start the irb on console.</p>
</li>
<li>
<p>Type the following code lines in irb:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="nb">require</span> <span class="s1">'stringio'</span>
<span class="nb">require</span> <span class="s1">'bson'</span>
<span class="n">sio</span> <span class="o">=</span> <span class="no">StringIO</span><span class="p">.</span><span class="nf">new</span> <span class="mi">1</span><span class="p">.</span><span class="nf">to_bson</span>
<span class="no">BSON</span><span class="o">::</span><span class="no">Int64</span><span class="p">.</span> <span class="nf">from_bson</span> <span class="n">sio</span>
</code></pre>
</li>
<li>
<p>The crash happens.</p>
</li>
</ol>
<p>Please see also the attached file for all details.</p> Ruby master - Bug #10850 (Rejected): BigDecimal division incorrecthttps://redmine.ruby-lang.org/issues/108502015-02-13T11:14:06ZElyasin (Elyasin Shaladi)Elyas.Shaladi@gmail.com
<p>I tried this in Ruby 2.1.4, 2.1.5 and 2.2.0, but in none of the versions it seems correct to me.</p>
<p>irb(main):041:0* amount1 = BigDecimal("241.3")<br>
=> #<a href="BigDecimal:7f49bcb03558,'0.2413E3',18(18)" class="external">BigDecimal:7f49bcb03558,'0.2413E3',18(18)</a></p>
<p>irb(main):042:0> amount2 = BigDecimal("1800")<br>
=> #<a href="BigDecimal:7f49bcaf3400,'0.18E4',9(18)" class="external">BigDecimal:7f49bcaf3400,'0.18E4',9(18)</a></p>
<p>irb(main):043:0> rate = amount1 / amount2<br>
=> #<BigDecimal:7f49bcae8398,'0.1340555555 5555555555 5555556E0',27(45)></p>
<p>irb(main):044:0> rate * amount2 #should return amount1 = 241.3 in BigDecimal, but it does not<br>
=> #<BigDecimal:7f49bcad6a30,'0.2413000000 0000000000 00000008E3',36(45)></p>
<p>My guess is that there is a bug in the BigDecimal implementation.</p> Ruby master - Feature #10833 (Third Party's Issue): getting argument error in rails productionhttps://redmine.ruby-lang.org/issues/108332015-02-06T12:05:27Zraja (narasinga raja)raja.narasinga2@gmail.com
<ol>
<li>I deployed my rails application using passenger + nginx<br>
2.data base is postgresql</li>
<li>when i am creating a new issue its showing Sorry, the page you are looking for is currently unavailable.<br>
Please try again later.<br>
plz help me out to get out of this problen</li>
</ol>
<p>4.in my nginx error log goy this error "App 22249 stderr: [ 2015-02-06 14:20:36.5094 22323/0x0000000690c1c0(Worker 1) utils.rb:72 ]: *** Exception ArgumentError in Rack application object (could not find a temporary directory) (process 22323, thread 0x0000000690c1c0(Worker 1)):"</p> Ruby master - Bug #10630 (Third Party's Issue): ERB tags nested in escaped blocks are skippedhttps://redmine.ruby-lang.org/issues/106302014-12-22T09:48:36Ztonci (Tonči Damjanić)tonci.damjanic@gmail.com
<p>Hello,</p>
<p>First of all, is this a good place to report Erubis bugs? Their GitHub repo is stale (no action since 2011) and I was suggested by the Rails team to try here.</p>
<p>GitHub ticket: <a href="https://github.com/kwatch/erubis/issues/6" class="external">https://github.com/kwatch/erubis/issues/6</a><br>
Repro example: <a href="https://github.com/rails/rails/issues/18098#issuecomment-67667400" class="external">https://github.com/rails/rails/issues/18098#issuecomment-67667400</a></p>
<hr>
<p>It seems that ERB (Erubis) doesn't handle well tags embedded within another tag. My goal is to produce ERB code with some values prefilled in the first pass.</p>
<p>Input ERB code:</p>
<pre><code> <div>
<%%= Results: <%= 'first' %> | <%= 'second' %> | <%= 'third' %> %>
</div>
</code></pre>
<p>Produces the following output:</p>
<pre><code> <div>
<%= Results: <%= 'first' %> | second | third %>
</div>
</code></pre>
<p>Expected output is:</p>
<pre><code> <div>
<%= Results: first | second | third %>
</div>
</code></pre>
<p>The first nested ERB tag is skipped. The same happens when there is just one block nested.</p>
<p>This is reproducible in Rails v4.1.8, which is using Erubis v2.7.0.</p> Ruby master - Bug #10525 (Rejected): SegFault with mysql2 gemhttps://redmine.ruby-lang.org/issues/105252014-11-19T04:02:47Ztadlambjr (Tad Lamb)
<p>I received this segfault when executing the command<br>
<code>bundle exec rake db:migrate</code></p> Ruby master - Bug #10162 (Closed): Error while installing ruby 2.1.2 on freebsd https://redmine.ruby-lang.org/issues/101622014-08-22T08:06:01Zyogesh (yogesh yadav)yogesh.yadav2912@gmail.com
<p>Below is error while doing make install.</p>
<p>rm -f probes.o<br>
linking miniruby<br>
/usr/bin/ld: probes.o: relocation R_X86_64_32 can not be used when making a shared object; recompile with -fPIC<br>
probes.o: could not read symbols: Bad value<br>
*** Error code 1</p>
<p>Stop in /root/ruby-2.1.2.</p> Ruby master - Bug #10113 (Rejected): Ruby memoization behaving oddly when using hash keys with sp...https://redmine.ruby-lang.org/issues/101132014-08-06T10:11:24Zronald05arias (Ron Arias)ronald05arias@gmail.com
<p>Trying to use simple Hash memoization with a ruby hash in a class method, it "fails" when having spaces as the hash key. Example code is attached.<br>
When calling the memoization method, it fails to maintain the instance variable. It resets the variable every time the method is called.<br>
When not having spaces in the key of the Hash, it works as it should, memoizing the variable.</p>
<p>P.S. Despite my ruby version indicated bellow, it fails in the newest as well.</p> Ruby master - Feature #10083 (Rejected): String.to_i unexpected behaviorhttps://redmine.ruby-lang.org/issues/100832014-07-23T02:15:29Zjosecastro (joseph castro)joseph.castro.riquelme@gmail.com
<p>Hi</p>
<p>There's the issue:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="s2">"String"</span><span class="p">.</span><span class="nf">to_i</span> <span class="o">=></span> <span class="mi">0</span>
</code></pre>
<p>This must be NIL or at least error, but no 0, because the string is not a number, also:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="s2">"10String"</span><span class="p">.</span><span class="nf">to_i</span> <span class="o">=></span> <span class="mi">10</span>
</code></pre>
<p>Is not 10, because "10String" is not a number, maybe is necessary a new method to get a number from any string, because to_i is to convert into a Integer and that should return an error.</p>
<p>Greetings everyone</p> Ruby master - Bug #9458 (Rejected): File write modehttps://redmine.ruby-lang.org/issues/94582014-01-28T17:42:19Zpradeek (pradeek kyahvi)pradeek.k@gmail.com
<p>As i am working ruby 2.1.0p0,it is found that File write mode is pushing the data in to file with out calling the close method on File Oject.When i quit the irb enviroment with out calling the close method,the data is wrote to the file.</p> Ruby master - Feature #8631 (Closed): Add a new method to ERB to allow assigning the local variab...https://redmine.ruby-lang.org/issues/86312013-07-13T04:42:01Zrosenfeld (Rodrigo Rosenfeld Rosas)rr.rosas@gmail.com
<p>It would be interesting if ERB could allow a hash instead of a binding for processing the template.</p>
<p>We wouldn't have to do hacks like:</p>
<p>b = OpenStruct.new(hash).instance_eval{ binding }</p> Ruby master - Bug #6696 (Closed): [PATCH] ERB::Util.url_encode should not escape unreserved chara...https://redmine.ruby-lang.org/issues/66962012-07-04T17:03:28Zmadeofcode (Mark Dodwell)mark@madeofcode.com
<p>ERB::Util.url_encode is escaping tilde (~) where it should not according to the RFC.</p>
<p>This fixes that behaviour so that it now correctly avoids escaping all unreserved characters as per RFC 3986, Section 2.3:<br>
<a href="http://tools.ietf.org/html/rfc3986#section-2.3" class="external">http://tools.ietf.org/html/rfc3986#section-2.3</a></p>
<p>Fwiw., this is also how the Perl implementation works:<br>
<a href="http://search.cpan.org/dist/URI/URI/Escape.pm#DESCRIPTION" class="external">http://search.cpan.org/dist/URI/URI/Escape.pm#DESCRIPTION</a></p>
<p>I opened this issue originally on Github, but I think it warrants further discussion, so re-opening here.</p> Ruby master - Bug #5339 (Closed): ERB generates extra newlines on Windowshttps://redmine.ruby-lang.org/issues/53392011-09-20T01:02:22ZDNNX (Viktar Basharymau)6alliapumob@gmail.com
<p>Steps to reproduce:</p>
<p>(1) Create files from this gist: <a href="https://gist.github.com/1226780" class="external">https://gist.github.com/1226780</a>.<br>
(2) Run <code>ruby erbug.rb</code>.<br>
(3) If you're on windows, you'll see something like</p>
<ul>
<li>
<p>1</p>
<ul>
<li>
<p>2</p>
<ul>
<li>3<br>
Otherwise, it will be like this:</li>
</ul>
</li>
</ul>
</li>
<li>
<p>1</p>
<ul>
<li>2
<ul>
<li>3</li>
</ul>
</li>
</ul>
</li>
</ul>
<p>This bug also affects <code>bundler</code> gem (see <a href="https://github.com/carlhuda/bundler/issues/1371" class="external">https://github.com/carlhuda/bundler/issues/1371</a>).</p> Ruby master - Bug #1868 (Rejected): ERB single line comment does not workhttps://redmine.ruby-lang.org/issues/18682009-08-03T20:32:28Zjfahrenkrug (Johannes Fahrenkrug)jfahrenkrug@gmail.com
<p>=begin<br>
Hi,</p>
<p>I just ran into this and found that a 1.9 bug for this is open already. But this issue also applies to 1.8.7. So I'm duplicating the description from here: <a href="http://redmine.ruby-lang.org/issues/show/1559" class="external">http://redmine.ruby-lang.org/issues/show/1559</a></p>
<p>In erb you're supposed to be able to do single line comments:</p>
<p><% # this is a comment %></p>
<p>However, this does not work in ruby 1.9.1.</p>
<p>Temporary work around is to put the '%>' on a newline:</p>
<p><% # this comment works in 1.9.1<br>
%></p>
<p>Please see attached unit test.<br>
=end</p>