[#37892] 配列の重複検出用Hashの使いまわし — wanabe <s.wanabe@...>
ワナベと申します。
[#37898] [Bug #1105] Ruby1.9でのrescue節の例外ハンドラのマッチの処理 — Tatsuji Kawai <redmine@...>
Bug #1105: Ruby1.9でのrescue節の例外ハンドラのマッチの処理
[#37910] [Bug:1.9] lack consistency in hash iteration — Yusuke ENDOH <mame@...>
遠藤です。
まつもと ゆきひろです
[#37918] [BUG: 1.9] encoding warning — SASADA Koichi <ko1@...>
ささだです.
[#37921] [Feature:trunk] with_index_from — Yusuke ENDOH <mame@...>
遠藤です。
At Thu, 5 Feb 2009 23:18:49 +0900,
遠藤です。
At Fri, 6 Feb 2009 00:58:59 +0900,
[#37936] zombie processes by drb tests — Tanaka Akira <akr@...>
OpenBSD で、test-all をすると、drb のところで、テストに 100
咳といいます。
[#37956] proposal: Module#method_adding — SASADA Koichi <ko1@...>
ささだです.
[#37959] [Bug:trunk] I can modify literals — Yusuke ENDOH <mame@...>
遠藤です。
[#37980] Re: [ruby-changes:10687] Ruby:r22250 (trunk): * iseq.c (simple_default_value): allow plain strings as default — SASADA Koichi <ko1@...>
ささだです.
[#37995] Add POSTARG support to rb_scan_args() — Akinori MUSHA <akinori.musha@...>
rb_scan_args()をPOSTARG対応にするパッチです。
[#37998] [Feature:1.9] {Array,Enumerable}#uniq_by, #uniq_by! — Nobuyoshi Nakada <nobu@...>
なかだです。
[#38005] Is URI.decode() broken? — MOROHASHI Kyosuke <moronatural@...>
もろはしです。いつもお世話になっております。
なかだです。
成瀬です、
xibbarこと藤岡です。
成瀬です。
NARUSE, Yui さんは書きました:
成瀬です。
(2009年03月03日 22:45), NARUSE, Yui さんは書きました:
成瀬です。
In article <4A9E44DD.6050706@airemix.jp>,
成瀬です。
小崎@思いつきを適当に書いてみるテスト
In article <20090907091830.2C7A.A69D9226@jp.fujitsu.com>,
> In article <20090907091830.2C7A.A69D9226@jp.fujitsu.com>,
2009/09/07 14:38, Tanaka Akira wrote:
In article <4AA5EA67.1040504@airemix.jp>,
[#38007] [Feature #1159] StringScanner に文字ベースでのインデックスを返すメソッドがほしい — Akira Matsuda <redmine@...>
Feature #1159: StringScanner に文字ベースでのインデックスを返すメソッドがほしい
[#38018] circular require in openssl — Tanaka Akira <akr@...>
以下のように、openssl には環状の require があり、警告が出ます。
In article <87vdrcul7y.fsf@fsij.org>,
まつもと ゆきひろです
In article <E1LYyoE-0005P0-Hi@x61.netlab.jp>,
[#38022] ENCODING_FIXED と ENCODING_NONE の廃止 — "NARUSE, Yui" <naruse@...>
成瀬です。
In article <49986A0A.5060602@airemix.jp>,
成瀬です。
In article <49995412.6040000@airemix.jp>,
[#38048] Add option hash support to rb_scan_args() — "Akinori MUSHA" <knu@...>
rb_scan_args() にoption hash対応を組み込むのはどうでしょうか。
[#38067] Re: [ruby-cvs:29304] Ruby:r22086 (trunk): * ruby.c (process_options): set initial default_external before -r. — "Yugui (Yuki Sonoda)" <yugui@...>
Yuguiです。
[#38075] [Bug #1198] corrupted iteratoin during "enum_for :inject" — Shyouhei Urabe <redmine@...>
Bug #1198: corrupted iteratoin during "enum_for :inject"
[#38080] [Feature:trunk] nested loop construct — Yukihiro Matsumoto <matz@...>
まつもと ゆきひろです
ささだです.
[#38096] 多重代入やメソッド引数の展開でto_aが呼ばれます — nagachika <nagachika00@...>
nagachika と申します。
前田です。
まつもと ゆきひろです
前田です。
In article <704d5db90907141754p285e6e51xdd3208b27d556906@mail.gmail.com>,
[#38098] ブロック引数と括弧・引数なしsuper — Shugo Maeda <shugo@...>
前田です。
まつもと ゆきひろです
[ruby-dev:38035] Stack Caching を有効にした時のビルドについて
nagachika と申します。
前回のRHGの逆襲で Stack Caching Optimization をネタにするため、
OPT_STACK_CACHING を ON にしてビルドしてみることに挑戦しました。
まだ make が最後まで通っていないのですが、miniruby で例外処理等がうまく
いかない問題について調査したので報告します。
ついでに訊いてしまいますが STACK_CACHING のオプションの扱いというのは
今後どうなっていくのでしょうか。今後有効にする可能性はあるでしょうか。
もう廃れていくオプションなののだとしたらあんまり深追いしてもなぁと
思いまして。
vm_opt.h の OPT_STACK_CACHING を 1 に変更して
$ make opt_sc.inc
$ make mniruby
して、以下のスクリプトを実行すると[BUG]が発生します。
$ cat test.rb
p :hoge # レジスタ状態をAXにするため
begin
raise "err"
rescue
end
$ ./miniruby test.rb
:hoge
test.rb:4: [BUG] Stack consistency error (sp: 7, bp: 6)
ruby 1.9.2dev (2009-02-16 trunk 22360) [i386-darwin8.11.1]
-- control frame ----------
c:0003 p:0026 s:0007 b:0006 l:0012e4 d:002124 EVAL test.rb:4
c:0002 p:---- s:0004 b:0004 l:000003 d:000003 FINISH
c:0001 p:0000 s:0002 b:0002 l:0012e4 d:0012e4 TOP
---------------------------
test.rb:4:in `<main>'
Stack Caching 用に生成された命令語のスタック消費量がレジスタによる
キャッシュを考慮していないために、 catch_table_entry に保存される sp が
違うためのようです。
また CATCH_TYPE_RESCUEの場合にスタックトップに積まれるべき値が
キャンセルされるために sp をデクリメントしている処理は、Stack Caching 有効時
には結果がレジスタに格納される予定になるので不要になると思います。
(BREAK, NEXTのほうはもしかしたら違うかも)
tool/instruction.rb を修正してスタック消費量にレジスタの状態遷移を考慮するように
してみました。
ただこれでもまだ make は途中で失敗してしまいます。
以下一応パッチはります。 trunk に対するパッチです。
まあデフォルトで無効なオプションなのですけど。
Index: tool/instruction.rb
===================================================================
--- tool/instruction.rb (リビジョン 22360)
+++ tool/instruction.rb (作業コピー)
@@ -8,7 +8,7 @@
class Instruction
def initialize name, opes, pops, rets, comm, body, tvars, sp_inc,
orig = self, defopes = [], type = nil,
- nsc = [], psc = [[], []]
+ fsc = [], nsc = [], psc = [[], []]
@name = name
@opes = opes # [[type, name], ...]
@@ -22,6 +22,7 @@
@type = type
@tvars = tvars
+ @fromsc = fsc
@nextsc = nsc
@pushsc = psc
@sc = []
@@ -38,7 +39,7 @@
attr_reader :name, :opes, :pops, :rets
attr_reader :body, :comm
- attr_reader :nextsc, :pushsc
+ attr_reader :fromsc, :nextsc, :pushsc
attr_reader :orig, :defopes, :type
attr_reader :sc
attr_reader :unifs, :optimized
@@ -58,12 +59,16 @@
@optimized << insn
end
+ def sp_increase_with_sc
+ @fromsc.size - @nextsc.size
+ end
+
def sp_increase_c_expr
if(pops.any?{|t, v| v == '...'} ||
rets.any?{|t, v| v == '...'})
# user definision
raise "no sp increase definition" if @sp_inc.nil?
- ret = "int inc = 0;\n"
+ ret = "int inc = #{sp_increase_with_sc};\n"
@opes.each_with_index{|(t, v), i|
if t == 'rb_num_t' && ((re = /\b#{v}\b/n) =~ @sp_inc ||
@@ -81,7 +86,7 @@
ret << " return depth + inc;"
ret
else
- "return depth + #{rets.size - pops.size};"
+ "return depth + #{rets.size - pops.size + sp_increase_with_sc};"
end
end
@@ -519,19 +524,19 @@
name, pops, rets, pushs1, pushs2, nextsc =
*calc_stack(insn, from, after, opops, orets)
- make_insn_sc(insn, name, oopes, pops, rets, [pushs1, pushs2], nextsc)
+ make_insn_sc(insn, name, oopes, pops, rets, [pushs1,
pushs2], from, nextsc)
}
}
end
- def make_insn_sc orig_insn, name, opes, pops, rets, pushs, nextsc
+ def make_insn_sc orig_insn, name, opes, pops, rets, pushs, fromsc, nextsc
comm = orig_insn.comm.dup
comm[:c] = 'optimize(sc)'
scinsn = Instruction.new(
name, opes, pops, rets, comm,
orig_insn.body, orig_insn.tvars, orig_insn.sp_inc,
- orig_insn, orig_insn.defopes, :sc, nextsc, pushs)
+ orig_insn, orig_insn.defopes, :sc, fromsc, nextsc, pushs)
add_insn scinsn
orig_insn.add_sc scinsn
@@ -611,7 +616,7 @@
exit
end
- ret = ["#{insn.name}_SC_#{InstructionsLoader.complement_name(ofrom)}_#{complement_name(from)}",
+ ret = ["#{insn.name}_SC_#{InstructionsLoader.complement_name(ofrom)}_#{InstructionsLoader.complement_name(from)}",
pops, rets, pushs_before, pushs, from]
end
end
@@ -1176,7 +1181,11 @@
else
insns = Array.new(6){'SC_ERROR'}
end
- sc_insn_info << " {\n#{insns.join(",\n")}}"
+ if verbose?
+ sc_insn_info << " { /* #{insn.name} */\n#{insns.join(",\n")}}"
+ else
+ sc_insn_info << " {\n#{insns.join(",\n")}}"
+ end
}
sc_insn_info = sc_insn_info.join(",\n")
Index: compile.c
===================================================================
--- compile.c (リビジョン 22360)
+++ compile.c (作業コピー)
@@ -1535,12 +1535,14 @@
entry->cont = label_get_position(lobj);
entry->sp = label_get_sp(lobj);
+#if !OPT_STACK_CACHING
/* TODO: Dirty Hack! Fix me */
if (entry->type == CATCH_TYPE_RESCUE ||
entry->type == CATCH_TYPE_BREAK ||
entry->type == CATCH_TYPE_NEXT) {
entry->sp--;
}
+#endif
}
else {
entry->cont = 0;