それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

ruby1.9への愚痴

やっぱりruby1.9が好きになれない。takuyaですこんばんは

たったこれだけのコードで動作が違う。

list = (1..10).map{|e| Thread.new{loop{puts "test from #{e}";$stdout.flush}} }
list.each{|t| t.join}

ruby1.8とruby1.9で動作が違って困ることが多い。

スレッドコンテキスト切り替わるタイミングが 改行の前後とか明らかにオカシイだろ。

文字コードといいスレッドといい、そこ変えるかぁって思う。大事なところが変わっててマジ困る。


・変数のスコープ
・スレッドの切り替わりタイミング
・マジックコメント
文字コード

そこ変える必要あったのかなぁ。VM化と文字コードって同時にしなくちゃダメだったのかなぁ。

なんだろう。Rubyは期待を裏切らない動作が多い印象だったけど、1.9は期待を裏切る動作がおおいな。Rubyっていままでもこういう大胆な進化をしてきたんだろうか。

RVMやらrbenvが必要なのってこういうところを変えすぎて、互換性失ったからだよね。

ruby --1.8-comatibple

みたいな、オプション作っておいてほしいのである。

追加:実例

冒頭の例は、本当にオカシイんだよ。


Ruby1.8で実行すると、次のような感じ。

test from 5
test from 4
test from 3
test from 2
test from 1

ruby1.9で実行すると

test from 1

test from 7test from 8test from 5
test from 5

test from 9test from 4test from 10

test from 2test from 6test from 1




test from 8test from 10

改行が分れるのどう考えても不便だし何とかして欲しい。