Skip to content

Commit c01ed72

Browse files
Watson1978claude
andcommitted
レビュー対応: 未収録 API へのリンクを平文にし、PAGE_SIZE の境界を修正
リンク切れの指摘への対応。IO::Buffer は段階的に追加している途中なので、 未収録のものは収録する回までコードスパンにし、#@# コメントを残した。 - IO::Buffer#set_value / IO::Buffer.map (指摘のあった2件) - IO::Buffer.for (4箇所。うち2箇所は #3301 由来) - IO::Buffer#locked (#3295 由来)。LOCKED 定数の説明が 「[m:IO::Buffer#locked] を参照してください」だけだったので、 本 PR で追加する locked? で調べられる旨の説明に書き換えた - Fiber::Scheduler (#3278 由来) は rdoc へのリンクにした (#3299 と同じ扱い) あわせて、参考として指摘のあった IO::Buffer.new の説明を 「PAGE_SIZE より大きい場合」から「PAGE_SIZE 以上の場合」に修正した。 io_buffer.c は size >= RUBY_IO_BUFFER_PAGE_SIZE で判定しており、 実機でも 3.1〜4.0 のすべてで size == PAGE_SIZE のとき mapped? が true になる。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
1 parent f68d293 commit c01ed72

1 file changed

Lines changed: 16 additions & 9 deletions

File tree

manual/api/_builtin/IO__Buffer.md

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ include:
1010
Ruby 3.1 で導入されました。
1111

1212
[c:String] を経由せずにメモリ領域を扱えるため、コピーを避けた入出力
13-
(zero-copy IO)を実現するために使われます。主に [c:Fiber::Scheduler]
13+
(zero-copy IO)を実現するために使われます。主に
14+
[Fiber::Scheduler](https://docs.ruby-lang.org/en/4.0/Fiber/Scheduler.html)
1415
実装のような、低レベルな入出力を扱う場面で利用します。
1516

1617
バッファは以下のいずれかの方法で確保されたメモリ領域を指します。
@@ -78,7 +79,8 @@ OS のページサイズをバイト数で表した値です。
7879
バッファがロックされていることを表すフラグです。
7980

8081
ロックされている間はバッファの解放やリサイズができません。
81-
[m:IO::Buffer#locked] を参照してください。
82+
バッファがロックされているかどうかは [m:IO::Buffer#locked?] で調べられます。
83+
#@# locked を収録したら、ブロックの間ロックする IO::Buffer#locked への言及も足す
8284

8385
### const PRIVATE -> Integer
8486

@@ -118,7 +120,7 @@ p IO::Buffer::HOST_ENDIAN == IO::Buffer::LITTLE_ENDIAN # => true
118120
size バイトの、0 で埋められた新しいバッファを作成して返します。
119121

120122
既定では内部(internal)バッファ、すなわち Ruby が直接確保したメモリ領域に
121-
なります。ただし size が OS 依存の [m:IO::Buffer::PAGE_SIZE] より大きい場合は
123+
なります。ただし size が OS 依存の [m:IO::Buffer::PAGE_SIZE] 以上の場合は
122124
仮想メモリ機構(Unix では匿名 mmap、Windows では VirtualAlloc)を用いて
123125
確保されます。flags に [m:IO::Buffer::MAPPED] を指定すると、
124126
size によらず後者の方法で確保されます。
@@ -299,7 +301,8 @@ p buf.get_string # => "\x00AA\x00"
299301
変更後の大きさによっては、メモリ領域が別の場所に確保しなおされ、
300302
内容がそこへコピーされます。
301303

302-
[m:IO::Buffer.for] で作った外部バッファや、ロックされたバッファは大きさを変更できません。
304+
#@# for を収録したらリンクに戻す
305+
`IO::Buffer.for` で作った外部バッファや、ロックされたバッファは大きさを変更できません。
303306

304307
- **param** `size` -- 変更後の大きさをバイト数で指定します。
305308
- **raise** `IO::Buffer::AccessError` -- 大きさを変更できないバッファに対して呼び出した場合に発生します。
@@ -374,8 +377,9 @@ p buf.size # => 4
374377

375378
バッファの大きさが 0 の場合に true を返します。
376379

380+
#@# for を収録したらリンクに戻す
377381
大きさ 0 のバッファは、[m:IO::Buffer.new] に 0 を渡すか、
378-
空文字列から [m:IO::Buffer.for] で作った場合などにできます。
382+
空文字列から `IO::Buffer.for` で作った場合などにできます。
379383

380384
```ruby
381385
p IO::Buffer.new(0).empty? # => true
@@ -426,7 +430,8 @@ p IO::Buffer.new(4).internal? # => true
426430
バッファが外部(external)バッファである場合に true を返します。
427431

428432
外部バッファは、バッファ自身が確保・マップしたのではないメモリ領域を参照します。
429-
[m:IO::Buffer.for] で作ったバッファは、文字列のメモリを外部参照します。
433+
#@# for を収録したらリンクに戻す
434+
`IO::Buffer.for` で作ったバッファは、文字列のメモリを外部参照します。
430435
外部バッファは大きさを変更できません。
431436

432437
```ruby
@@ -440,9 +445,10 @@ p IO::Buffer.new(4).external? # => false
440445

441446
バッファが読み取り専用の場合に true を返します。
442447

443-
読み取り専用のバッファは、[m:IO::Buffer#set_value][m:IO::Buffer#set_string]
448+
#@# set_value / for を収録したらリンクに戻す
449+
読み取り専用のバッファは、`IO::Buffer#set_value`[m:IO::Buffer#set_string]
444450
[m:IO::Buffer#copy] などで変更できません。
445-
[m:IO::Buffer.for] で作ったバッファや、読み取り専用のファイルから作ったバッファが
451+
`IO::Buffer.for` で作ったバッファや、読み取り専用のファイルから作ったバッファが
446452
これにあたります。
447453

448454
```ruby
@@ -457,7 +463,8 @@ p IO::Buffer.new(4).readonly? # => false
457463
マップバッファは、仮想メモリ機構でマップされたメモリ領域を参照します。
458464
[m:IO::Buffer.new][m:IO::Buffer::MAPPED] を指定した場合や、
459465
大きさが [m:IO::Buffer::PAGE_SIZE] 以上の場合は匿名のマップになります。
460-
[m:IO::Buffer.map] で作った場合はファイルに紐づいたマップになります。
466+
#@# map を収録したらリンクに戻す
467+
`IO::Buffer.map` で作った場合はファイルに紐づいたマップになります。
461468

462469
### def locked? -> bool
463470

0 commit comments

Comments
 (0)