Commit 7a42be9
Regexp: タイムアウト機能一式を追加 (Ruby 3.2)
Ruby 3.2 で追加された正規表現のタイムアウト機能が、るりまに一切収録されて
いなかった (Regexp.md に timeout / linear_time / TimeoutError の記述がゼロ)。
追加したもの:
- Regexp.timeout クラス全体の上限の取得
- Regexp.timeout= クラス全体の上限の設定
- Regexp#timeout 正規表現ごとの上限の取得
- Regexp.linear_time? 線形時間でマッチできるかの判定
- Regexp::TimeoutError 上限を超えたときに発生する例外
いずれも 3.2 で追加されたことを実機で確認し (3.1 には存在しない)、
#@SInCE 3.2 で分岐した。
例に使う正規表現は実機で検証して選んだ。Ruby 3.2 以降はメモ化により
古典的な破滅的バックトラック (/^(a+)+$/ など) が線形時間で処理されるため
タイムアウトしない。後方参照を含み linear_time? が false になる
/^((a|a)+)\1$/ を用いており、3.2.11 / 4.0.6 の両方で TimeoutError が
発生することを確認済み。
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>1 parent 4703a68 commit 7a42be9
1 file changed
Lines changed: 102 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
244 | 244 | | |
245 | 245 | | |
246 | 246 | | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
| 251 | + | |
| 252 | + | |
| 253 | + | |
| 254 | + | |
| 255 | + | |
| 256 | + | |
| 257 | + | |
| 258 | + | |
| 259 | + | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
| 267 | + | |
| 268 | + | |
| 269 | + | |
| 270 | + | |
| 271 | + | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
| 278 | + | |
| 279 | + | |
| 280 | + | |
| 281 | + | |
| 282 | + | |
| 283 | + | |
| 284 | + | |
| 285 | + | |
| 286 | + | |
| 287 | + | |
| 288 | + | |
| 289 | + | |
| 290 | + | |
| 291 | + | |
| 292 | + | |
| 293 | + | |
| 294 | + | |
| 295 | + | |
| 296 | + | |
| 297 | + | |
| 298 | + | |
| 299 | + | |
| 300 | + | |
| 301 | + | |
| 302 | + | |
| 303 | + | |
| 304 | + | |
| 305 | + | |
| 306 | + | |
| 307 | + | |
| 308 | + | |
| 309 | + | |
247 | 310 | | |
248 | 311 | | |
249 | 312 | | |
| |||
544 | 607 | | |
545 | 608 | | |
546 | 609 | | |
| 610 | + | |
| 611 | + | |
| 612 | + | |
| 613 | + | |
| 614 | + | |
| 615 | + | |
| 616 | + | |
| 617 | + | |
| 618 | + | |
| 619 | + | |
| 620 | + | |
| 621 | + | |
| 622 | + | |
| 623 | + | |
| 624 | + | |
| 625 | + | |
| 626 | + | |
| 627 | + | |
| 628 | + | |
| 629 | + | |
| 630 | + | |
547 | 631 | | |
548 | 632 | | |
549 | 633 | | |
| |||
693 | 777 | | |
694 | 778 | | |
695 | 779 | | |
| 780 | + | |
| 781 | + | |
| 782 | + | |
| 783 | + | |
| 784 | + | |
| 785 | + | |
| 786 | + | |
| 787 | + | |
| 788 | + | |
| 789 | + | |
| 790 | + | |
| 791 | + | |
| 792 | + | |
| 793 | + | |
| 794 | + | |
| 795 | + | |
| 796 | + | |
| 797 | + | |
0 commit comments