Thread: native_thread_id・thread_variables・each_caller_location を追加#3308
Thread: native_thread_id・thread_variables・each_caller_location を追加#3308Watson1978 wants to merge 2 commits into
Conversation
実機で登場バージョンを確認し、#@SInCE で分岐した。 3.0 以前から存在: Thread#thread_variables スレッドローカル変数名の一覧 3.1 で追加: Thread#native_thread_id ネイティブスレッドの ID 3.4 で追加: Thread.each_caller_location 実行スタックを配列を作らず順に渡す 配置は関連メソッドの近くにした。thread_variables は thread_variable_set / thread_variable? の並び、native_thread_id は その直後、each_caller_location は Singleton Methods の Thread.stop の後。 thread_variables は既に Thread#thread_variable_set の例 (p thr.thread_variables) で使われていたが独立した項目が無かった。 その例の出力は rdoc 由来で [:dog, :cat] だったが、実機は挿入順の [:cat, :dog] を返す (2.7〜4.0 で確認)。新設の項目と食い違わないよう、 既存の例も [:cat, :dog] に直し、SEE に thread_variables を足した。 native_thread_id の返り値は OS 依存で、その他のプラットフォームでは NotImplementedError、ネイティブスレッドと未結合/切り離し済みなら nil に なることを記載した。死んだスレッドで nil が返ることは実機で確認済み。 each_caller_location は Kernel#caller_locations と同じ引数 (start/length, range) を取れることを C 実装 (vm_backtrace.c の ec_backtrace_range) で 確認し、シグネチャに反映した。 bitclust のデータベース生成を 3.0 / 3.1 / 3.3 / 3.4 / 4.0 で実行してエラーが 出ないこと、登録されるメソッドが 1 / 2 / 2 / 3 / 3 件と追加バージョンどおりに なることを確認済み。サンプルコードは対象の全バージョンで実行して出力を確認した。 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
レビューしました。 検証できた点(実機 3.0.7 / 3.1.7 / 3.3.12 / 3.4.10 / 4.0.6)
相談1:
|
- Thread.each_caller_location は 3.2 で追加され、start / length / range の 引数を取れるようになったのは 3.4 から (3.2/3.3 で引数を渡すと ArgumentError)。 セクション全体を #@SInCE 3.4 で囲んでいたため 3.2/3.3 でメソッドごと消えていた。 メソッド自体を #@SInCE 3.2 とし、引数付きシグネチャと引数の説明だけを #@SInCE 3.4 の入れ子にした。 - シグネチャに引数があるのに - **param** が無かったので、start / length / range を Kernel?.caller_locations の記述に揃えて追加した。 - [m:Kernel#caller_locations] (3箇所) は Kernel が module_function なので /method/Kernel/i/... を指してリンク切れになる。[m:Kernel?.caller_locations] に修正した。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
レビューありがとうございます。2 点とも対応しました。 相談1:
|
| 版 | bitclust lookup --method='Thread.each_caller_location' |
|---|---|
| 3.1 | no such method |
| 3.3 | ### def each_caller_location {|location| ... } -> nil |
| 3.4 / 4.0 | (start = 1, length = nil) と (range) の 2 本 |
相談2: Kernel#caller_locations
3 箇所とも直しました。1 点だけ、記法は .# ではなく ?. にしています。
docs/ReferenceManualFormatDigest.md に「モジュール関数 [m:Kernel?.open]
(旧記法の「.#」は「?.」に変わりました)」とあり、manual/api 配下の実使用も
?. が 724 箇所に対して .# が 3 箇所なので、移行後の記法に揃えました。
.# のほうが良ければ直します。
参考(本 PR 対象外): 同じファイルに既存のリンク切れが 2 件あります
今回の指摘を受けて、変更ファイルの [m:...] / [c:...] を DB と機械的に
突き合わせたところ、Thread.md に以前からあるものが 2 件見つかりました。
[c:Thread#raise](1 箇所) -- メソッドをc:で参照しており、
[m:Thread#raise]が正しい記法です。[c:TimeoutError](2 箇所) --TimeoutErrorは 3.1〜4.0 のどれにも存在せず
(defined?(TimeoutError)が nil)、実在するのはTimeout::Errorだけです。
マニュアルにも[c:Timeout::Error]しかありません。
同じファイルなので並行 PR にはしづらく、ご希望なら本 PR に含めて直します。
🤖 Generated with Claude Code
- [m:Kernel#caller] / [m:Kernel#caller_locations] (3箇所) は、caller と caller_locations が functions.md で module_function として定義されているため /method/Kernel/i/... を指してリンク切れになる。[m:Kernel?.caller] / [m:Kernel?.caller_locations] に修正した。rurema#3308 での同種の指摘を受けたもの。 - Fiber.scheduler は 3.0 から存在するが、その SEE が参照する Fiber.current_scheduler は 3.1 から (3.0.7 では respond_to? が false)。 3.0 のページでリンク切れになるため、SEE 行を分けて #@SInCE 3.1 で囲んだ。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
2 点とも対応ありがとうございます。確認しました。
|
概要
Ruby 4.0 に存在するのにリファレンスに項目が無い [c:Thread] のメソッド 3 個を追加しました。
Thread#thread_variables— スレッドローカル変数名の一覧Thread#native_thread_id— ネイティブスレッドの IDThread.each_caller_location— 実行スタックを配列を作らず順に渡す登場バージョン
実機で確認しました。
thread_variables… 3.0 以前からnative_thread_id… 3.1 からeach_caller_location… 3.4 から既存の例の修正を含みます
thread_variablesは独立した項目が無い一方、既に [m:Thread#thread_variable_set] の例の中で
p thr.thread_variablesとして使われていました。その出力が rdoc 由来で[:dog, :cat]になっていましたが、実機は挿入順の[:cat, :dog]を返します(2.7〜4.0 で確認)。
新設した項目と食い違わないよう、既存の例も
[:cat, :dog]に直し、SEE にthread_variablesを足しています。記述の根拠
native_thread_idの返り値は OS 依存で、その他のプラットフォームでは[c:NotImplementedError]、ネイティブスレッドと未結合/切り離し済みなら nil に
なる旨を記載しました。死んだスレッドで nil が返ることは実機で確認済みです。
each_caller_locationは [m:Kernel#caller_locations] と同じ引数 (start/length、range) を取れることを、CRuby の
vm_backtrace.c(ec_backtrace_range) で確認してシグネチャに反映しました。
検証
rake check_blank_lines/check_indent_in_samplecode/check_single_space_indentbitclust update --markdowntree=manual/apiを 3.0 / 3.1 / 3.3 / 3.4 / 4.0 で実行し、エラーが出ないこと、登録されるメソッドが 1 / 2 / 2 / 3 / 3 件と追加バージョン
どおりになることを確認しました。
🤖 Generated with Claude Code