Ruby Issue Tracking System: Issues
https://bugs.ruby-lang.org/
https://bugs.ruby-lang.org/favicon.ico?1711330511
2022-12-01T08:06:38Z
Ruby Issue Tracking System
Redmine
Ruby master - Feature #19163 (Closed): Data object should be frozen
https://bugs.ruby-lang.org/issues/19163
2022-12-01T08:06:38Z
matz (Yukihiro Matsumoto)
matz@ruby.or.jp
<p>If we call <code>initialize</code> (via <code>send</code>), we can rewrite an existing <code>Data</code> object.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">d</span><span class="o">=</span><span class="no">Data</span><span class="p">.</span><span class="nf">define</span><span class="p">(</span><span class="ss">:a</span><span class="p">,</span> <span class="ss">:b</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="mi">2</span><span class="p">)</span>
<span class="nb">p</span> <span class="n">d</span> <span class="c1">#=> #<data a=1, b=2></span>
<span class="n">d</span><span class="p">.</span><span class="nf">send</span><span class="p">(</span><span class="ss">:initialize</span><span class="p">,</span> <span class="p">{</span><span class="n">a</span><span class="p">:</span><span class="mi">3</span><span class="p">,</span><span class="n">b</span><span class="p">:</span><span class="mi">4</span><span class="p">})</span>
<span class="nb">p</span> <span class="n">d</span> <span class="c1">#=> #<data a=3, b=4></span>
</code></pre>
<p>Should we freeze the <code>Data</code> object after calling <code>initialize</code> for the first time?</p>
<p>Matz.</p>
Ruby master - Bug #17423 (Closed): `Prepend` should prepend a module before the class
https://bugs.ruby-lang.org/issues/17423
2020-12-22T01:56:53Z
matz (Yukihiro Matsumoto)
matz@ruby.or.jp
<p>I see</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">module</span> <span class="nn">M</span><span class="p">;</span> <span class="k">end</span>
<span class="k">module</span> <span class="nn">A</span><span class="p">;</span> <span class="k">end</span>
<span class="k">class</span> <span class="nc">B</span><span class="p">;</span> <span class="kp">include</span> <span class="no">A</span><span class="p">;</span> <span class="k">end</span>
<span class="no">A</span><span class="p">.</span><span class="nf">prepend</span> <span class="no">M</span>
<span class="no">B</span><span class="p">.</span><span class="nf">prepend</span> <span class="no">M</span>
<span class="nb">p</span> <span class="no">B</span><span class="p">.</span><span class="nf">ancestors</span>
</code></pre>
<p>gives <code>[B, M, A, Object, Kernel, BasicObject]</code> now. It used to be <code>[M, B, A, Object, Kernel, BasicObject]</code>.</p>
<p>I think it should be prepended to class <code>B</code>. Probably it should be <code>[M, B, M, A, Object, Kernel, BasicObject]</code>.</p>
<p>The reason behind this change may be duplication removing, but considering the following code, it is OK to duplicate prepende modules.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">module</span> <span class="nn">M</span><span class="p">;</span> <span class="k">end</span>
<span class="k">class</span> <span class="nc">A</span><span class="p">;</span> <span class="k">end</span>
<span class="k">class</span> <span class="nc">B</span><span class="o"><</span><span class="no">A</span><span class="p">;</span> <span class="k">end</span>
<span class="no">A</span><span class="p">.</span><span class="nf">prepend</span> <span class="no">M</span>
<span class="no">B</span><span class="p">.</span><span class="nf">prepend</span> <span class="no">M</span>
<span class="nb">p</span> <span class="no">B</span><span class="p">.</span><span class="nf">ancestors</span> <span class="c1"># => [M, B, M, A, Object, Kernel, BasicObject]</span>
</code></pre>
<p>Am I missing something?</p>
<p>Matz.</p>
Ruby master - Misc #16512 (Assigned): Improving `www.ruby-lang.org` reference by merging with `ru...
https://bugs.ruby-lang.org/issues/16512
2020-01-16T08:38:13Z
matz (Yukihiro Matsumoto)
matz@ruby.or.jp
<p><a class="user active user-mention" href="https://bugs.ruby-lang.org/users/710">@zverok (Victor Shepelev)</a> prepared better-looking reference pages at <code>rubyreferences.github.io</code>. I think there's room for improvement of reference pages on <code>www.ruby-lang.org</code>. <a class="user active user-mention" href="https://bugs.ruby-lang.org/users/572">@hsbt (Hiroshi SHIBATA)</a> Is there a chance to work with?</p>
<p>Matz.</p>
Ruby master - Bug #16044 (Closed): Float::ROUNDS (FLT_ROUNDS) should not be a constant.
https://bugs.ruby-lang.org/issues/16044
2019-08-04T22:36:56Z
matz (Yukihiro Matsumoto)
matz@ruby.or.jp
<p>According to the reference, <code>FLT_ROUNDS</code> is not a constant in C.</p>
<blockquote>
<p><code>FLT_ROUNDS</code><br>
Returns the current rounding direction of floating-point arithmetic operations.<br>
Notes<br>
The rounding mode can be changed with <code>fesetround</code> and <code>FLT_ROUNDS</code> reflects that change.</p>
</blockquote>
<p>So it should not be a constant in Ruby too. Or it should be removed altogether.</p>
Ruby master - Feature #13067 (Closed): TrueClass,FalseClass to provide `===` to match truthy/fals...
https://bugs.ruby-lang.org/issues/13067
2016-12-24T17:08:20Z
matz (Yukihiro Matsumoto)
matz@ruby.or.jp
<p>I propose to make <code>TrueClass</code>, <code>FalseClass</code> to provide <code>===</code> method to match truthy values (<code>TrueClass</code>), and falsy values (<code>FalseClass</code>), so that we can use true and false for case pattern matching. And we can pick truthy values using <code>grep</code> e.g. <code>ary.grep(true)</code>.</p>
<p>Matz.</p>
Ruby master - Bug #11301 (Closed): Module#prepend should have always added the module before the ...
https://bugs.ruby-lang.org/issues/11301
2015-06-24T05:55:14Z
matz (Yukihiro Matsumoto)
matz@ruby.or.jp
<p>I don't think it's ideal:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">module</span> <span class="nn">M</span>
<span class="k">end</span>
<span class="k">class</span> <span class="nc">A</span>
<span class="n">prepend</span> <span class="no">M</span>
<span class="k">end</span>
<span class="no">A</span><span class="p">.</span><span class="nf">ancestors</span>
<span class="c1"># => [M, A, Object, PP::ObjectMixin, Kernel, BasicObject]</span>
<span class="k">class</span> <span class="nc">B</span><span class="o"><</span><span class="no">A</span>
<span class="n">prepend</span> <span class="no">M</span>
<span class="k">end</span>
<span class="no">B</span><span class="p">.</span><span class="nf">ancestors</span>
<span class="c1"># => [B, M, A, Object, PP::ObjectMixin, Kernel, BasicObject]</span>
</code></pre>
<p>It should be either error (for not adding module) or the module appearing multiple times,<br>
i.e. <code>B.ancestors</code> to be</p>
<pre><code>[M, B, M, A, Object, PP::ObjectMixin, Kernel, BasicObject]
</code></pre>
<p>Matz.</p>
Ruby master - Bug #11296 (Rejected): Proc#arity returns weird value for non-lambda proc with opti...
https://bugs.ruby-lang.org/issues/11296
2015-06-23T05:48:08Z
matz (Yukihiro Matsumoto)
matz@ruby.or.jp
<p><code>Proc.new(x=0){}.arity</code> returns 0, not -1 unlike lambdas.<br>
I don't remember if it's intentional or not. Anyone remember?</p>
<p>Matz.</p>
Ruby master - Feature #7517 (Closed): Fixnum::MIN,MAX
https://bugs.ruby-lang.org/issues/7517
2012-12-05T22:31:17Z
matz (Yukihiro Matsumoto)
matz@ruby.or.jp
<p>Maximum (or minimum) number of fixnum can not be get in portable fashion, so I propose Fixnum::MAX and Fixnum::MIN just like Float::MAX and Float::MIN.</p>
<p>Matz</p>
Ruby master - Bug #7262 (Closed): module extension (#include/#prepend) in refinements
https://bugs.ruby-lang.org/issues/7262
2012-11-02T06:12:45Z
matz (Yukihiro Matsumoto)
matz@ruby.or.jp
<p>refinementの中でモジュールのincludeやprependがしたい(かつ、そのスコープの範囲内だけで有効にしたい)なんて思ったんですが、きっと困難ですよね。<br>
「無理」と思ったら遠慮なくrejectしてください。</p>
<p>module Experiment<br>
refine String do<br>
include Enumerable<br>
def foo; p :foo; end<br>
end<br>
end</p>
<p>using Experiment<br>
"foo".foo<br>
"foo".each(&:p)</p>
<p>Matz.</p>
Ruby master - Bug #7261 (Closed): Symbol#to_proc to retrieve a method from current refinement
https://bugs.ruby-lang.org/issues/7261
2012-11-02T05:52:43Z
matz (Yukihiro Matsumoto)
matz@ruby.or.jp
<p>Currently Symbol#to_proc retrieves the global definition of the method, since refinement is a lexical scope.<br>
But if possible, it is better that Symbol#to_proc can retrieve a method from current refinement.</p>
<p>module Silly<br>
refine Integer do<br>
def bar; p :bar; end<br>
end<br>
end</p>
<p>module Stupid<br>
using Silly<br>
1.bar # => :bar<br>
[1,2].each(&:bar) # => undefined method `bar'<br>
end</p>
<p>What do you think?</p>
<p>It should be done before 2.0.0 if we merge, to avoid future compatibility issues.</p>
<p>Matz.</p>
Ruby master - Bug #5730 (Closed): Optinal block parameters assigns wrong
https://bugs.ruby-lang.org/issues/5730
2011-12-09T08:59:25Z
matz (Yukihiro Matsumoto)
matz@ruby.or.jp
<p>The following program do not expand the given array, but it should expand the value.</p>
<p>def foo(&block)<br>
block.call([1,2])<br>
end<br>
h = foo{|k=6,v=8|<br>
p [k,v] # gives [[1,2],8] but should be [1,2]<br>
}</p>
Ruby master - Feature #5653 (Closed): "I strongly discourage the use of autoload in any standard ...
https://bugs.ruby-lang.org/issues/5653
2011-11-21T17:24:00Z
matz (Yukihiro Matsumoto)
matz@ruby.or.jp
<p>Hi,</p>
<p>Today, I talked with NaHi about enhancing const_missing to enable<br>
autoload-like feature with nested modules. But autoload itself has<br>
fundamental flaw under multi-thread environment. I should have remove<br>
autoload when I added threads to the language (threads came a few<br>
months after autoload).</p>
<p>So I hereby declare the future deprecation of autoload. Ruby will<br>
keep autoload for a while, since 2.0 should keep compatibility to 1.9.<br>
But you don't expect it will survive further future, e.g. 3.0.</p>
<p>I strongly discourage the use of autoload in any standard libraries.</p>
<p>matz.</p>
Ruby master - Bug #4536 (Closed): 定数参照について1.8と1.9の違い
https://bugs.ruby-lang.org/issues/4536
2011-03-29T17:41:13Z
matz (Yukihiro Matsumoto)
matz@ruby.or.jp
<p>=begin<br>
以下のプログラムは1.8ではエラーになりますが、1.9ではエラーを<br>
示さず動作します。定数参照は(できるだけ)静的スコープで、とい<br>
う設計方針に従えば、1.8の方が正しいと思います。</p>
<p>どうやって直したら良いと思いますか? あるいは直さずに今後は<br>
1.9的挙動が正としますか?</p>
<p>module A<br>
B = 42<br>
end</p>
<p>A.class_eval do<br>
def self.f<br>
p B<br>
end<br>
end</p>
<p>A.f</p>
<p>=end</p>
Backport187 - Backport #2665 (Closed): compatibility issue of BigDecimal#** and #power
https://bugs.ruby-lang.org/issues/2665
2010-01-27T18:18:24Z
matz (Yukihiro Matsumoto)
matz@ruby.or.jp
<p>=begin<br>
まつもと ゆきひろです</p>
<p>In message "Re: <a href="https://blade.ruby-lang.org/ruby-dev/40172">[ruby-dev:40172]</a> Re: [Bug:1.8] compatibility issue of BigDecimal#** and #power"<br>
on Wed, 27 Jan 2010 16:09:18 +0900, Tadashi Saito <a href="mailto:shiba@mail2.accsnet.ne.jp" class="email">shiba@mail2.accsnet.ne.jp</a> writes:</p>
<p>|> - 1.8.7 以前のバグだった (1.8.6/1.8.7 にもバックポートすべき)<br>
|<br>
|当然こっちだと思います。<br>
|<br>
|1 / Infinity (=> 0) と Infinity ** -1 (=> NaN?) が異なるのはおかしいです。</p>
<p>私もバグだと思いますが、実際にDecimalを使う人が、元の方がう<br>
れしいというのであれば(1.9も含めて)、戻しても構いません。<br>
=end</p>
Ruby master - Bug #2591 (Closed): ENV.[]= should raise an error on failure
https://bugs.ruby-lang.org/issues/2591
2010-01-11T09:28:16Z
matz (Yukihiro Matsumoto)
matz@ruby.or.jp
<p>=begin<br>
まつもと ゆきひろです</p>
<p>In message "Re: <a href="https://blade.ruby-lang.org/ruby-dev/40023">[ruby-dev:40023]</a> [Bug:trunk] ENV.[]= should raise an error on failure"<br>
on Mon, 11 Jan 2010 03:42:34 +0900, "Akinori MUSHA" <a href="mailto:knu@iDaemons.org" class="email">knu@iDaemons.org</a> writes:</p>
<p>| 現在 ENV.[]= は setenv(3) や putenv(3) の返り値を見ていませんが、<br>
|エラーは検知して例外を上げるべきではないでしょうか。<br>
|<br>
| わかりやすい例では ENV["A="] = "1" のように不正な名前の環境変数を<br>
|設定しようとすると Error::EINVAL が発生するようになります。</p>
<p>賛成します。コミットしてくださいませんか。<br>
=end</p>
Ruby master - Feature #2325 (Closed): Dir instance methods for relative path
https://bugs.ruby-lang.org/issues/2325
2009-11-03T21:10:17Z
matz (Yukihiro Matsumoto)
matz@ruby.or.jp
<p>まつもと ゆきひろです</p>
<p>In message "Re: <a href="https://blade.ruby-lang.org/ruby-dev/39620">[ruby-dev:39620]</a> Re: [Feature:trunk] Dir instance methods for relative path"<br>
on Tue, 3 Nov 2009 12:57:58 +0900, KOSAKI Motohiro <a href="mailto:kosaki.motohiro@jp.fujitsu.com" class="email">kosaki.motohiro@jp.fujitsu.com</a> writes:</p>
<blockquote>
<p>単純な疑問として、最初に思ったのは自分が相対パスでファイルを<br>
開きたい状況になったときに、「まっさきに調べるのが<code>Dir</code>クラスのAPIリファレンスか?」<br>
というとNOだと思ったからです。</p>
</blockquote>
<p>そうですよねえ。</p>
<blockquote>
<p>自分なら、「ファイルオープン」ってどうやるんだっけ?と、思考が働くので</p>
<p><code>open(dir, relative-path)</code> or<br>
<code>openat(dir, relative-path)</code></p>
<p>のほうが、APIに一発ヒットできてナイスかなと。まあ直感なんですが。</p>
</blockquote>
<p>中田さんがすでに指摘したような理由でopen(dir, relative-path)<br>
は難しそうです。open(relative-path, "rw", base: dir) とかな<br>
ら可能かもしれませんが、ちょっと冗長な気もします。</p>
<blockquote>
<p># ところで、みなさんが<code>openat</code>が嫌なのは名前がダサイからでしょうか?</p>
</blockquote>
<p>ダサいというか、openateという単語の省略形かと思って辞書引きま<br>
した、最初。そんな単語ないんですけど。create → creat みたい<br>
なものかと思って。</p>
Ruby master - Bug #1638 (Closed): called on terminated object
https://bugs.ruby-lang.org/issues/1638
2009-06-15T18:31:15Z
matz (Yukihiro Matsumoto)
matz@ruby.or.jp
<p>=begin<br>
まつもと ゆきひろです</p>
<p>In message "Re: <a href="https://blade.ruby-lang.org/ruby-dev/38625">[ruby-dev:38625]</a> Re: [BUG: trunk] called on terminated object"<br>
on Mon, 15 Jun 2009 18:10:51 +0900, Tanaka Akira <a href="mailto:akr@fsij.org" class="email">akr@fsij.org</a> writes:</p>
<p>|回収されていない配列が回収されたオブジェクトを指してるんです<br>
|か?</p>
<p>そうです。</p>
<p>|ということは、GC は後者を回収したのに前者を回収しなかったっ<br>
|てことで、それは変じゃないですか?</p>
<p>変なのは確かです。が、だれがオブジェクトを壊しているのか見付<br>
けられませんでした。<br>
=end</p>
Ruby master - Feature #1492 (Closed): enhancement of Array#drop
https://bugs.ruby-lang.org/issues/1492
2009-05-20T01:49:48Z
matz (Yukihiro Matsumoto)
matz@ruby.or.jp
<p>=begin<br>
まつもと ゆきひろです</p>
<p>In message "Re: <a href="https://blade.ruby-lang.org/ruby-dev/38505">[ruby-dev:38505]</a> Re: [Feature:trunk] enhancement of Array#drop"<br>
on Wed, 20 May 2009 01:19:11 +0900, Tanaka Akira <a href="mailto:akr@fsij.org" class="email">akr@fsij.org</a> writes:</p>
<p>|>> [:a, :b, :a, :b].drop(1){|e| e == :b} #=> [:a, :a, :b]<br>
|>> [:a, :b, :a, :b].drop(2){|e| e == :b} #=> [:a, :a]<br>
|><br>
|> だそうですから、これは「引数で指定した範囲内で条件を満たす要<br>
|> 素を削除する」メソッドになっています。うささんのほしいものは<br>
|> こっちなんですか?<br>
|<br>
|これは、<br>
|<br>
| drop one element which equals :b<br>
| drop two elements which equals :b<br>
|<br>
|と読むんじゃないですかねぇ。</p>
<p>おお。そんな読み方が。</p>
<p>そっちの方が意味はありそうですね。あんまり賛成じゃないのは変<br>
わらないんですが。<br>
=end</p>
Ruby master - Bug #1481 (Closed): exact Time and inexact Time
https://bugs.ruby-lang.org/issues/1481
2009-05-18T09:05:34Z
matz (Yukihiro Matsumoto)
matz@ruby.or.jp
<p>=begin<br>
まつもと ゆきひろです</p>
<p>In message "Re: <a href="https://blade.ruby-lang.org/ruby-dev/38484">[ruby-dev:38484]</a> Re: [Bug:1.9] exact Time and inexact Time"<br>
on Sun, 17 May 2009 21:46:01 +0900, Tanaka Akira <a href="mailto:akr@fsij.org" class="email">akr@fsij.org</a> writes:</p>
<p>|Time#to_r を加えるのはあり得ると思います。</p>
<p>私もこちらに賛成します。<br>
=end</p>
Backport187 - Backport #1450 (Closed): Tempfile and extended Enumerable
https://bugs.ruby-lang.org/issues/1450
2009-05-09T21:05:28Z
matz (Yukihiro Matsumoto)
matz@ruby.or.jp
<p>=begin<br>
まつもと ゆきひろ@Euruko09です</p>
<p>In message "Re: <a href="https://blade.ruby-lang.org/ruby-dev/38391">[ruby-dev:38391]</a> Re: [Bug:1.8] Tempfile and extended Enumerable"<br>
on Sat, 9 May 2009 04:06:30 +0900, "Akinori MUSHA" <a href="mailto:knu@iDaemons.org" class="email">knu@iDaemons.org</a> writes:</p>
<p>|Tanaka Akira wrote:<br>
|> 1.8.8dev で、以下のように、Enumerable に each2 を定義し、<br>
|> Tempfile を each2 で繰り返そうとすると、ブロックが呼ばれませ<br>
|> ん。<br>
|<br>
| ブロックが渡されていないのが原因なので、こうすれば直ります。</p>
<p>コミットしていただけませんか?<br>
=end</p>
Ruby master - Feature #1211 (Rejected): nested loop construct
https://bugs.ruby-lang.org/issues/1211
2009-02-26T03:34:29Z
matz (Yukihiro Matsumoto)
matz@ruby.or.jp
<p>=begin<br>
まつもと ゆきひろです</p>
<p>最近、AO Benchを見ています。<a href="http://lucille.atso-net.jp/aobench/" class="external">http://lucille.atso-net.jp/aobench/</a><br>
実行時間の1/3はGCが消費していて涙目。</p>
<p>それはそれとして、AO Benchの中には</p>
<pre><code> nphi.times do |j|
ntheta.times do |i|
</code></pre>
<p>のような多重ループがあります。これを</p>
<p>nloop(nphi, ntheta) do |j,i|</p>
<p>というように書けたら、よりわかりやすく、かつ、やや高速なので<br>
はないかと考えました。実際に実装したところ、AO Benchでは5%程<br>
度実行時間が短縮されるようです。</p>
<p>検討事項は</p>
<ul>
<li>
<p>そもそも必要なのか。YARVではややブロック呼び出しが重い傾<br>
向があるので効果があったが、よりブロック呼び出しが軽量に<br>
なれば不要ではないか</p>
</li>
<li>
<p>名前。今回はnested loopということでnloopという名前で実装<br>
したが、もっと適切な名前があるかもしれない。妙な短縮形よ<br>
りも長くても記述的な名前を好む人も多いかも。Ruby(というか<br>
私)は前者を好む傾向はあるけど</p>
</li>
<li>
<p>他の案としてはloopが引数を取るようにして、nloop相当にす<br>
るというものがある。しかし、1.9のloopメソッドが持つ<br>
StopIteration例外でループ終了というセマンティックスと多<br>
重ループがうまくつながらなかったので、今回はやめておいた</p>
</li>
</ul>
<p>などが考えられます。どう思いますか?</p>
<pre><code> まつもと ゆきひろ /:|)
</code></pre>
<p>=end</p>
Ruby master - Feature #1119 (Closed): with_index_from
https://bugs.ruby-lang.org/issues/1119
2009-02-06T18:40:17Z
matz (Yukihiro Matsumoto)
matz@ruby.or.jp
<p>=begin<br>
まつもと ゆきひろです</p>
<p>In message "Re: <a href="https://blade.ruby-lang.org/ruby-dev/37928">[ruby-dev:37928]</a> Re: [Feature:trunk] with_index_from"<br>
on Fri, 6 Feb 2009 12:04:30 +0900, "Akinori MUSHA" <a href="mailto:knu@iDaemons.org" class="email">knu@iDaemons.org</a> writes:</p>
<p>| しかし、 each_with_index_from という名前は長すぎると思います。<br>
|また each_with_index 自体、 Enumerator が導入された今となっては<br>
|each.with_index よりも若干実行効率がよいことを除けば存在意義が<br>
|薄いですね。<br>
|<br>
| ここは、 with_index にだけ引数を追加して each_with_index は<br>
|そのままにしてはどうでしょう。<br>
|<br>
|StringIO.new("foo|bar|baz").each("|").with_index(1) { ... }<br>
|<br>
| ちょっと凝ったことをしたければ Enumerator 経由で行ってね、<br>
|というスタンスは悪くはないと思います。</p>
<p>each_with_indexは放置。Enumerator#with_indexの方で手当てする<br>
方に賛成します。が、現時点では簡潔なwith_index(1)にするのか、<br>
より明確なwith_index_from(1)にするのかは決断できません。どっ<br>
ちがよいでしょうねえ。<br>
=end</p>
Ruby master - Bug #987 (Closed): Socket.getaddrinfo("www.ruby-lang.org", 80) returns only UDP inf...
https://bugs.ruby-lang.org/issues/987
2009-01-06T17:15:51Z
matz (Yukihiro Matsumoto)
matz@ruby.or.jp
<p>=begin<br>
まつもと ゆきひろです</p>
<p>In message "Re: <a href="https://blade.ruby-lang.org/ruby-dev/37674">[ruby-dev:37674]</a> [Bug:trunk] Socket.getaddrinfo("www.ruby-lang.org", 80) returns only UDP information"<br>
on Fri, 2 Jan 2009 00:44:13 +0900, Tanaka Akira <a href="mailto:akr@fsij.org" class="email">akr@fsij.org</a> writes:</p>
<p>|1.9 と 1.8 で Socket.getaddrinfo("www.ruby-lang.org", 80) の返り値が違います。<br>
|以下のように、1.9 では 1要素の配列が返り、1.8 では 2要素の配列が返ります。</p>
<p>|www.ruby-lang.org:80 の情報を要求して TCP が出てこないのはよ<br>
|ろしくないんじゃないでしょうか。<br>
|<br>
|調べてみると、r20387 の<br>
|<br>
|Fri Nov 28 18:31:21 2008 Yukihiro Matsumoto <a href="mailto:matz@ruby-lang.org" class="email">matz@ruby-lang.org</a><br>
|<br>
| * ext/socket/socket.c (sock_s_getaddrinfo): refactored to remove<br>
| code duplication regarding getaddrinfo.<br>
|<br>
|という変更が原因なようなのですが、挙動が変わってしまっている<br>
|ので、リファクタリングとしては失敗ではないでしょうか。</p>
<p>おっしゃる通りだと思います。が、先程私の手元で確認したところ<br>
Ruby 1.8と1.9で同じ結果になりました</p>
<p>[["AF_INET", 80, "carbon.ruby-lang.org", "221.186.184.68", 2, 1, 6],<br>
["AF_INET", 80, "carbon.ruby-lang.org", "221.186.184.68", 2, 2, 17],<br>
["AF_INET", 80, "carbon.ruby-lang.org", "221.186.184.68", 2, 3, 0]]</p>
<p>実行したのは</p>
<p>ruby 1.9.1 (2009-01-06 patchlevel-5000 trunk 21348) [i686-linux]</p>
<p>ですが、これは</p>
<ul>
<li>環境によって異なる</li>
<li>誰かが直してくださった</li>
</ul>
<p>のいずれかでしょうか。最近socket.cに手を入れていただいている<br>
のは田中さんなのでみずから直してくださったのでしょうか。私と<br>
田中さんでは今回は同じi686-linuxですから、環境依存の可能性は<br>
低いのですが、ライブラリその他のバージョンの違いなどもあるか<br>
もしれません。</p>
<pre><code> まつもと ゆきひろ /:|)
</code></pre>
<p>=end</p>
Ruby master - Bug #930 (Closed): [m17n] TestCSVFeatures fails because of r20905
https://bugs.ruby-lang.org/issues/930
2008-12-26T16:42:36Z
matz (Yukihiro Matsumoto)
matz@ruby.or.jp
<p>=begin<br>
まつもと ゆきひろです</p>
<p>以下の内容はなんとかしてJames Grayに伝えた方がよいと思います。</p>
<p>In message "Re: <a href="https://blade.ruby-lang.org/ruby-dev/37603">[ruby-dev:37603]</a> Re: [BUG:trunk] [m17n] TestCSVFeatures fails because of r20905"<br>
on Fri, 26 Dec 2008 13:13:29 +0900, Tanaka Akira <a href="mailto:akr@fsij.org" class="email">akr@fsij.org</a> writes:</p>
<p>|CSV#inspect をみると、ASCII 互換の encoding にしたい、という<br>
|意図を感るんですが、違うんでしょうか。UTF-16 が来たときの対<br>
|策というか。<br>
|<br>
|UTF-16 を考えると、force_encoding にすると、中身が文字として<br>
|ASCII の範囲内でも \0 がひとつおきに入って嬉しくないんじゃな<br>
|いでしょうか。<br>
|<br>
|UTF-16 についての議論がどうなったかちゃんと覚えてないんです<br>
|が、もし UTF-16 は扱わないでもいいという話だったら、単純に<br>
|.encode("ASCII-8BIT") を消してしまうというのはどうでしょうか。<br>
|<br>
|また、UTF-16 を扱うのであれば、UTF-16 に対応する ASCII 互換<br>
|な encoding に変換するということで、<br>
|<br>
| e = Encoding::Converter.asciicompat_encoding(s.encoding)<br>
| e ? s.encode(e) : s.force_encoding("ASCII-8BIT")<br>
|</p>
<table>
<thead>
<tr>
<th>とかはどうでしょう。</th>
</tr>
</thead>
<tbody>
<tr>
<td>[田中 哲][たなか あきら][Tanaka Akira]</td>
</tr>
<tr>
<td>=end</td>
</tr>
</tbody>
</table>
Ruby master - Bug #923 (Closed): `initialize_copy': wrong argument type #<Class:0x825d23c> (expec...
https://bugs.ruby-lang.org/issues/923
2008-12-24T10:17:15Z
matz (Yukihiro Matsumoto)
matz@ruby.or.jp
<p>=begin<br>
まつもと ゆきひろです</p>
<p>In message "Re: <a href="https://blade.ruby-lang.org/ruby-dev/37572">[ruby-dev:37572]</a> [Bug:1.9] `initialize_copy': wrong argument type #<a href="Class:0x825d23c" class="external">Class:0x825d23c</a> (expected Data) (TypeError)"<br>
on Wed, 24 Dec 2008 01:44:13 +0900, Tanaka Akira <a href="mailto:akr@fsij.org" class="email">akr@fsij.org</a> writes:<br>
|<br>
|以下のプログラムで、<br>
| wrong argument type #<a href="Class:0x825d23c" class="external">Class:0x825d23c</a> (expected Data) (TypeError)<br>
|という奇妙なエラーが出ます。<br>
|<br>
|% ./ruby -ve 'f = open("/tmp/x", "w")<br>
|1000.times { f.dup.print "a" }<br>
|GC.start<br>
|'</p>
<p>IOのファイナライザを実行する時点ではwrite_lockがすでに解放さ<br>
れちゃってるからのようです。とりあえず、</p>
<ul>
<li>ファイナライザ実行前にwrite_lockをクリア</li>
<li>io_fflushでwrite_lockを問答無用で参照していたのをやめる</li>
</ul>
<p>という対応で上記のプログラムは動いているように見えます。が、<br>
わざわざwrite_lockをかけていたのをはずしちゃって良いのかとい<br>
う判断は私にはつきかねます。</p>
<p>パッチを添付します。</p>
<p>--- a/io.c<br>
+++ b/io.c<br>
@@ -558,7 +558,13 @@ io_fflush(rb_io_t *fptr)<br>
retry:<br>
if (fptr->wbuf_len == 0)<br>
return 0;</p>
<ul>
<li>r = rb_mutex_synchronize(fptr->write_lock, io_flush_buffer, (VALUE)fptr);</li>
</ul>
<ul>
<li>if (fptr->write_lock) {</li>
<li>r = rb_mutex_synchronize(fptr->write_lock, io_flush_buffer, (VALUE)fptr);</li>
<li>}</li>
<li>else {</li>
<li>long l = io_writable_length(fptr, fptr->wbuf_len);</li>
<li>r = rb_write_internal(fptr->fd, fptr->wbuf+fptr->wbuf_off, l);</li>
<li>}<br>
/* xxx: Other threads may modify wbuf.
<ul>
<li>A lock is required, definitely. */<br>
rb_io_check_closed(fptr);<br>
@@ -3194,6 +3200,7 @@ rb_io_fptr_finalize(rb_io_t *fptr)<br>
{<br>
if (!fptr) return 0;<br>
fptr->pathv = Qnil;</li>
</ul>
</li>
<li>fptr->write_lock = 0;<br>
if (0 <= fptr->fd)<br>
rb_io_fptr_cleanup(fptr, Qtrue);<br>
if (fptr->rbuf) {<br>
=end</li>
</ul>
Ruby master - Bug #892 (Closed): test/ruby/test_metaclass.rb: no such file to load -- ~/dev/metac...
https://bugs.ruby-lang.org/issues/892
2008-12-16T22:56:08Z
matz (Yukihiro Matsumoto)
matz@ruby.or.jp
<p>=begin<br>
test_metaclass.rbが"~/dev/metaclass_util/metaclass_util"をrequireしていますが、そのファイルが見当たりません。<br>
=end</p>
Ruby master - Bug #867 (Closed): pty hang
https://bugs.ruby-lang.org/issues/867
2008-12-13T19:34:03Z
matz (Yukihiro Matsumoto)
matz@ruby.or.jp
<p>=begin<br>
まつもと ゆきひろです</p>
<p>In message "Re: <a href="https://blade.ruby-lang.org/ruby-dev/37418">[ruby-dev:37418]</a> [Bug:1.9] pty hang"<br>
on Sat, 13 Dec 2008 14:49:56 +0900, Tanaka Akira <a href="mailto:akr@fsij.org" class="email">akr@fsij.org</a> writes:<br>
|<br>
|pty でハングすることがあります。<br>
|<br>
|% ./ruby -rpty -e 'p $$; r,w,pid = PTY.spawn("echo a"); p pid; p r.gets'<br>
|19510<br>
|19512<br>
|ここでハング<br>
|<br>
|他の端末から ps でみると、子プロセスが echo になってません。<br>
|つまり、exec 以前でハングしているようです。</p>
<p>サブプロセスで</p>
<p>proc_exec_v<br>
before_exec<br>
rb_thread_stop_timer_thread<br>
native_stop_timer_thread</p>
<p>と呼び出されて native_cond_signal がハングしてます。って、こ<br>
れがなぜハングするのか私にはわからないんですが。<br>
=end</p>
Ruby master - Feature #850 (Closed): Symbian patch for 1.9.x
https://bugs.ruby-lang.org/issues/850
2008-12-11T13:48:50Z
matz (Yukihiro Matsumoto)
matz@ruby.or.jp
<p>=begin<br>
Alexandre Zavorine at Symbian Software kindly sent us a patch for<br>
Symbian OS. This patch will be a part of trunk, but we will wait<br>
merging until the release of 1.9.1 (on January).</p>
<p>Check or try the attached patch if you please.</p>
<p>Enjoy.<br>
=end</p>
Ruby master - Feature #818 (Closed): Enumerator#inspect
https://bugs.ruby-lang.org/issues/818
2008-12-03T18:23:48Z
matz (Yukihiro Matsumoto)
matz@ruby.or.jp
<p>=begin<br>
まつもと ゆきひろです</p>
<p>In message "Re: <a href="https://blade.ruby-lang.org/ruby-dev/37259">[ruby-dev:37259]</a> Re: [Feature:1.9] Enumerator#inspect"<br>
on Wed, 3 Dec 2008 17:32:59 +0900, "Akinori MUSHA" <a href="mailto:knu@iDaemons.org" class="email">knu@iDaemons.org</a> writes:</p>
<p>|> Enumerator の中身をわかりやすく表示してくれる Enumerator#inspect を<br>
|> 提供すると便利だと思います。例えばこんな感じ。<br>
|><br>
|> $ ruby19 -e 'g = (1..1000).each; p g'<br>
|> #<Enumerator:[1, 2, 3, ...(snipped)]><br>
|><br>
|> 現状は #<a href="Enumerator:0x8269654" class="external">Enumerator:0x8269654</a> とかなので、デバッグには不便です。<br>
|<br>
| inspect で実際に回してしまうのは(中身を見るための)副作用として<br>
|大きすぎ、適切ではない気がします。</p>
<p>そうですねえ。IOのように再開可能でないEnumerableもありますし<br>
ねえ。私もあまり賛成できません。わかりやすくするというアイディ<br>
アには反対ではないんですが。</p>
<p>Enumeratorの中に最初の3要素を取っておくとかは、たぶんやりすぎ<br>
でしょうねえ。<br>
=end</p>
Ruby master - Bug #431 (Closed): Time.now <=> SimpleDelegator.new(Time.now)
https://bugs.ruby-lang.org/issues/431
2008-08-13T16:06:01Z
matz (Yukihiro Matsumoto)
matz@ruby.or.jp
<p>=begin<br>
まつもと ゆきひろです</p>
<p>In message "Re: <a href="https://blade.ruby-lang.org/ruby-dev/35830">[ruby-dev:35830]</a> Re: [Bug:1.9] Time.now <=> SimpleDelegator.new(Time.now)"<br>
on Tue, 12 Aug 2008 18:49:39 +0900, wanabe <a href="mailto:s.wanabe@gmail.com" class="email">s.wanabe@gmail.com</a> writes:</p>
<p>|2008/06/09 15:56 Tanaka Akira <a href="mailto:akr@fsij.org" class="email">akr@fsij.org</a>:<br>
|> Time.now <=> SimpleDelegator.new(Time.now) が nil になるのは<br>
|> SimpleDelegator.new(Time.now) <=> Time.now がそうならないの<br>
|> と違ってよろしくないんじゃないでしょうか。<br>
|<br>
|パッチを書いてみましたが rb_funcall が多く、結果がコストに見合っていない気がします。<br>
|なにか良い方法をご存知の方は教えていただけるとありがたいです。</p>
<p><=>が型が合わないとnilを返すことが期待されていることを利用し<br>
て以下のようにしてみました。</p>
<p>--- a/time.c<br>
+++ b/time.c<br>
@@ -1087,8 +1087,18 @@ time_cmp(VALUE time1, VALUE time2)<br>
if (tobj1->ts.tv_sec > tobj2->ts.tv_sec) return INT2FIX(1);<br>
return INT2FIX(-1);<br>
}</p>
<ul>
<li>else {</li>
<li>VALUE cmp;</li>
<li>int n;</li>
<li>
<li>cmp = rb_funcall(time2, rb_intern("<=>"), 1, time1);</li>
<li>if (NIL_P(cmp)) return Qnil;</li>
</ul>
<ul>
<li>return Qnil;</li>
</ul>
<ul>
<li>n = rb_cmpint(cmp, time1, time2);</li>
<li>if (n == 0) return INT2FIX(0);</li>
<li>if (n > 0) return INT2FIX(1);</li>
<li>return INT2FIX(-1);</li>
<li>}<br>
}</li>
</ul>
<p>/*<br>
=end</p>