A ruby built this way also builds extension libraries with `make` from PATH, so installing gems with C extensions needs GNU make there.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Coding agents build in a new worktree for each task, so every worktree meets the dialog. The hook runs without stopping only when User Account Control never notifies, and otherwise it starts a task registered once with the highest privileges.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Windows Defender Firewall asks about every new executable path that listens on all interfaces. A block rule for the build directory stops the dialog without exposing the tests to other machines, and connections from the same machine still work. With -delete the directory need not exist, since the rules outlive the worktree or build directory they were added for.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
clang-cl 15 is the oldest version the build accepts. The component is not in Visual Studio 2017, which mswin still supports.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Ruby::Prism itself does not compile the program (prism_compile.c does,
and other implementations may not even compile an AST into bytecode).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
An extension that defines only the types as a fallback for older versions still misses `NUM2LEN` and `PRIdLEN` there.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Once rb_len_t widens this changes the `long *` output parameters of rb_range_beg_len(), rb_str_subpos(), rb_arithmetic_sequence_beg_len_step(), ruby_enc_find_basename() and ruby_enc_find_extname(), so extensions passing `long *` to them will need to be updated. The extension guides list these signatures verbatim and follow along.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The section has grown past building with the crash dumps, so give it its own page next to building and testing.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The CI uploads crash dumps on Windows, Linux and macOS now, and a crash that leaves no [BUG] report can only be followed through one.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Windows Server 2016 and Windows 10 Enterprise LTSB 2016 reach end of support by January 2027. Version 1809 is the oldest release still supported afterwards, as Windows Server 2019 and Windows 10 Enterprise LTSC 2019 until January 2029.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The registered_globals list made every Ractor's GC scan every slot under
a shared lock. This commit splits it into per-Ractor lists.
We also maintain a global registry that references every Ractor that has
ever registered so that unregistering from a Ractor other than the one
that registered can look up the owning list.
When a Ractor is joined, the dead Ractor's slots are moved to the
joining Ractor's heap before the objspace merge happens.
This change tightens up the requirements for values stored in a
registered address.
Previously, Every Ractor's local GC scanned the shared list. So if a
slot held an unshareable object living in a different Ractor's heap,
that object was always kept alive regardless.
After this change, only the registering Ractor's GC scans its list. So if a
slot holds another Ractor's unshareable object, the owning Ractor's
local GC cannot see that reference, so it can collect the object while
the registered slot still points at it.
Storing such an object was already a Ractor containment violation. It
was just hidden by the shared scan.
[Feature #22277]
Document the model: only the creator Ractor can modify a class/module,
singleton class ownership follows the attached object, classes of a terminated
Ractor become read-only, and the main-Ractor-only rules for class instance
variables, constants and class variables are generalized to the owner. For a
class variable, say which owner decides -- the class it is stored in, not the
receiver it was looked up through.
State explicitly what ownership does not give. Reads are unsynchronized and a
class modification is not atomic, so a non-owner Ractor can observe a class
while its owner is modifying it: ownership is a single-writer guarantee, not a
consistent view for readers. And that single writer is not always the class's
own owner -- M.include(N) rewires the ancestor chain of every class that
already includes M, whoever owns them, because modifying M is M's owner's
right.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
The premature `ruby` link it warned about comes from `programs` running
before `exts` under `make test-all`, not from parallelism, and whether
the extension build repairs it afterwards varies. Documenting a make
version is the wrong place to address it.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
The option was described only by configure --help, so the extra
--with-EXTLIB-dir options it needs had to be found by trial and error.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>