Repository navigation
README: the Net::FTP hang figures describe code that has since changed - #934
Merged
Merged
Conversation
The map of where the work is said:
The largest single debt is a hang, not a missing feature. Net::FTP alone
is 442 examples behind, and 39 of its 56 spec files have to be killed by
the clock on rbgo and none on MRI (#916).
Re-measured today against MRI 4.0.6, same corpus, 30 s per file, on main at
ba89ba6: Net::FTP is 128 behind (459 -> 331) and NO file is killed at all.
Only the figures this measurement actually covers are touched; the whole-corpus
numbers above that bullet are left exactly as they were, because I have not
re-swept the corpus.
The replacement states the thing that took a day to establish and that a
single number hides: ONE SYMPTOM, TWO UNRELATED CAUSES. Half the files hung
because a blocking socket call held the emulated GVL (#924); the other half
because TCPSocket.open with a block never closed the socket, so the peer waited
for an EOF that never came (#932, open). Neither fix moves the other's files,
which is why the first one looked like it had done nothing when it was measured
against the second one's specs.
The table also carries what is NOT fixed, with its cause named rather than left
as a count: library/socket 8 and library/timeout 1, both because Thread#kill
cannot interrupt a thread blocked in a native call (#933). A reader should be
able to tell the fixed from the merely counted.
⛔ And the note that outlives all of these numbers: none of it was measurable
until the reference interpreter was repaired. It had been scoring a clean 0 on
every file because its bundled gems were off the load path, and a sweep reports
that as a RESULT -- 56 files of "control 0 passing" reads as the implementation
under test beating the reference. cmd/mriref (#930) is named so the next person
measuring starts from a working oracle.
Co-Authored-By: Claude Opus 5 <[email protected]>
#932 merged while this was in review, so the table's net-http row said 27 as the CURRENT figure for a module that no longer hangs at all. Publishing that would have been the same defect this pull request exists to correct. Re-measured on main at 6b51deb, 321 files across library/net-http + library/socket + library/timeout, MRI 4.0.6 as the control, 30 s per file: 275 passing against MRI's 371, NINE killed under rbgo and none under MRI. So the tally is 75 -> 9, and the nine are the last two rows: Thread#kill cannot interrupt a thread blocked in a native call (#933). Co-Authored-By: Claude Opus 5 <[email protected]>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
README: the Net::FTP hang figures describe code that has since changed
The map of where the work is still says:
Re-measured today against MRI 4.0.6, same corpus, 30 s per file, on
mainatba89ba6f:Net::FTPis 128 behind (459 → 331), and no file is killed atall.
Only the figures that measurement covers are touched. The whole-corpus numbers
in the lines above that bullet are left exactly as they were, because I have not
re-swept the corpus and will not quote a number I did not take.
What the replacement says that a single figure cannot
One symptom, two unrelated causes — which is the thing that took a day to
establish:
library/net-ftplibrary/net-httpTCPSocket.open { … }never closed the socket (#932, open)library/socketThread#killcannot interrupt a blocking native call (#933)library/timeoutNeither fix moves the other's files. That is exactly why #924 looked like it had
done nothing when I first measured it against the HTTP specs, and why the table
names a cause per row instead of a count: a reader should be able to tell what
is fixed from what is merely counted.
⛔ The note that outlives all of these numbers
None of this was measurable until the reference interpreter was repaired. It had
been scoring a clean 0 on every file, because its bundled gems were off the
load path — and a sweep reports that as a result: 56 rows of
control 0 passingreads as the implementation under test beating thereference.
cmd/mriref(#930) is named in the README so the next person tomeasure starts from an oracle that answers.
Refs #916, #924, #930, #932, #933
(All stay open or already merged as noted; this changes documentation only.)
🤖 Generated with Claude Code