Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 10 additions & 6 deletions NEWS.md
Original file line number Diff line number Diff line change
Expand Up @@ -296,8 +296,8 @@ The following bundled gems are promoted from default gems.
* 0.4.0 to [v0.4.1][benchmark-v0.4.1], [v0.5.0][benchmark-v0.5.0]
* logger 1.7.0
* 1.6.4 to [v1.6.5][logger-v1.6.5], [v1.6.6][logger-v1.6.6], [v1.7.0][logger-v1.7.0]
* rdoc 7.0.2
* 6.14.0 to [v6.14.1][rdoc-v6.14.1], [v6.14.2][rdoc-v6.14.2], [v6.15.0][rdoc-v6.15.0], [v6.15.1][rdoc-v6.15.1], [v6.16.0][rdoc-v6.16.0], [v6.16.1][rdoc-v6.16.1], [v6.17.0][rdoc-v6.17.0], [v7.0.0][rdoc-v7.0.0], [v7.0.1][rdoc-v7.0.1], [v7.0.2][rdoc-v7.0.2]
* rdoc 7.0.3
* 6.14.0 to [v6.14.1][rdoc-v6.14.1], [v6.14.2][rdoc-v6.14.2], [v6.15.0][rdoc-v6.15.0], [v6.15.1][rdoc-v6.15.1], [v6.16.0][rdoc-v6.16.0], [v6.16.1][rdoc-v6.16.1], [v6.17.0][rdoc-v6.17.0], [v7.0.0][rdoc-v7.0.0], [v7.0.1][rdoc-v7.0.1], [v7.0.2][rdoc-v7.0.2], [v7.0.3][rdoc-v7.0.3]
* win32ole 1.9.2
* 1.9.1 to [v1.9.2][win32ole-v1.9.2]
* irb 1.16.0
Expand Down Expand Up @@ -373,13 +373,13 @@ The following default gems are updated.

The following bundled gems are updated.

* minitest 6.0.0
* minitest 5.27.0
* power_assert 3.0.1
* 2.0.5 to [v3.0.0][power_assert-v3.0.0], [v3.0.1][power_assert-v3.0.1]
* rake 13.3.1
* 13.2.1 to [v13.3.0][rake-v13.3.0], [v13.3.1][rake-v13.3.1]
* test-unit 3.7.3
* 3.6.7 to [3.6.8][test-unit-3.6.8], [3.6.9][test-unit-3.6.9], [3.7.0][test-unit-3.7.0], [3.7.1][test-unit-3.7.1], [3.7.2][test-unit-3.7.2], [3.7.3][test-unit-3.7.3]
* test-unit 3.7.5
* 3.6.7 to [3.6.8][test-unit-3.6.8], [3.6.9][test-unit-3.6.9], [3.7.0][test-unit-3.7.0], [3.7.1][test-unit-3.7.1], [3.7.2][test-unit-3.7.2], [3.7.3][test-unit-3.7.3], [3.7.4][test-unit-3.7.4], [3.7.5][test-unit-3.7.5]
* rexml 3.4.4
* rss 0.3.2
* 0.3.1 to [0.3.2][rss-0.3.2]
Expand Down Expand Up @@ -570,7 +570,8 @@ A lot of work has gone into making Ractors more stable, performant, and usable.

* ZJIT
* Introduce an [experimental method-based JIT compiler](https://docs.ruby-lang.org/en/master/jit/zjit_md.html).
To enable ZJIT on supported platforms, supply the `--zjit` option or call `RubyVM::ZJIT.enable` at runtime.
Where available, ZJIT can be enabled at runtime with the `--zjit` option or by calling `RubyVM::ZJIT.enable`.
When building Ruby, Rust 1.85.0 or later is required to include ZJIT support.
* As of Ruby 4.0.0, ZJIT is faster than the interpreter, but not yet as fast as YJIT.
We encourage experimentation with ZJIT, but advise against deploying it in production for now.
* Our goal is to make ZJIT faster than YJIT and production-ready in Ruby 4.1.
Expand Down Expand Up @@ -652,6 +653,7 @@ A lot of work has gone into making Ractors more stable, performant, and usable.
[rdoc-v7.0.0]: https://github.com/ruby/rdoc/releases/tag/v7.0.0
[rdoc-v7.0.1]: https://github.com/ruby/rdoc/releases/tag/v7.0.1
[rdoc-v7.0.2]: https://github.com/ruby/rdoc/releases/tag/v7.0.2
[rdoc-v7.0.3]: https://github.com/ruby/rdoc/releases/tag/v7.0.3
[win32ole-v1.9.2]: https://github.com/ruby/win32ole/releases/tag/v1.9.2
[irb-v1.15.0]: https://github.com/ruby/irb/releases/tag/v1.15.0
[irb-v1.15.1]: https://github.com/ruby/irb/releases/tag/v1.15.1
Expand Down Expand Up @@ -755,6 +757,8 @@ A lot of work has gone into making Ractors more stable, performant, and usable.
[test-unit-3.7.1]: https://github.com/test-unit/test-unit/releases/tag/3.7.1
[test-unit-3.7.2]: https://github.com/test-unit/test-unit/releases/tag/3.7.2
[test-unit-3.7.3]: https://github.com/test-unit/test-unit/releases/tag/3.7.3
[test-unit-3.7.4]: https://github.com/test-unit/test-unit/releases/tag/3.7.4
[test-unit-3.7.5]: https://github.com/test-unit/test-unit/releases/tag/3.7.5
[rss-0.3.2]: https://github.com/ruby/rss/releases/tag/0.3.2
[net-ftp-v0.3.9]: https://github.com/ruby/net-ftp/releases/tag/v0.3.9
[net-imap-v0.5.9]: https://github.com/ruby/net-imap/releases/tag/v0.5.9
Expand Down
7 changes: 0 additions & 7 deletions doc/language/options.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,3 @@
<!---
CAUTION
This page on docs.ruby-lang.org is displayed in Ruby's help message (-h and --help).
Please make sure you update the link when renaming or moving this file.
--->

# Ruby Command-Line Options

## About the Examples
Expand Down
6 changes: 3 additions & 3 deletions gems/bundled_gems
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,10 @@
# - revision: revision in repository-url to test
# if `revision` is not given, "v"+`version` or `version` will be used.

minitest 6.0.0 https://github.com/minitest/minitest
minitest 5.27.0 https://github.com/minitest/minitest
power_assert 3.0.1 https://github.com/ruby/power_assert
rake 13.3.1 https://github.com/ruby/rake
test-unit 3.7.3 https://github.com/test-unit/test-unit
test-unit 3.7.5 https://github.com/test-unit/test-unit
rexml 3.4.4 https://github.com/ruby/rexml
rss 0.3.2 https://github.com/ruby/rss
net-ftp 0.3.9 https://github.com/ruby/net-ftp
Expand Down Expand Up @@ -39,7 +39,7 @@ ostruct 0.6.3 https://github.com/ruby/ostruct
pstore 0.2.0 https://github.com/ruby/pstore
benchmark 0.5.0 https://github.com/ruby/benchmark
logger 1.7.0 https://github.com/ruby/logger
rdoc 7.0.2 https://github.com/ruby/rdoc
rdoc 7.0.3 https://github.com/ruby/rdoc
win32ole 1.9.2 https://github.com/ruby/win32ole
irb 1.16.0 https://github.com/ruby/irb
reline 0.6.3 https://github.com/ruby/reline
Expand Down
3 changes: 0 additions & 3 deletions ruby.c
Original file line number Diff line number Diff line change
Expand Up @@ -410,9 +410,6 @@ usage(const char *name, int help, int highlight, int columns)
#define SHOW(m) show_usage_line(&(m), help, highlight, w, columns)

printf("%sUsage:%s %s [options] [--] [filepath] [arguments]\n", sb, se, name);
printf("\n""Details and examples at https://docs.ruby-lang.org/en/%s/ruby/options_md.html\n",
ruby_api_version_name);

for (i = 0; i < num; ++i)
SHOW(usage_msg[i]);

Expand Down
13 changes: 3 additions & 10 deletions test/ruby/test_rubyoptions.rb
Original file line number Diff line number Diff line change
Expand Up @@ -47,25 +47,18 @@ def test_source_file
assert_in_out_err([], "", [], [])
end

version = RUBY_PATCHLEVEL == -1 ? "master" : "#{RUBY_VERSION_MAJOR}.#{RUBY_VERSION_MINOR}"
OPTIONS_LINK = "https://docs.ruby-lang.org/en/#{version}/ruby/options_md.html"

def test_usage
assert_in_out_err(%w(-h)) do |r, e|
_, _, link, *r = r
assert_include(link, OPTIONS_LINK)
assert_operator(r.size, :<=, 24)
longer = r.select {|x| x.size >= 80}
assert_operator(r.size, :<=, 25)
longer = r[1..-1].select {|x| x.size >= 80}
assert_equal([], longer)
assert_equal([], e)
end
end

def test_usage_long
assert_in_out_err(%w(--help)) do |r, e|
_, _, link, *r = r
assert_include(link, OPTIONS_LINK)
longer = r.select {|x| x.size > 80}
longer = r[1..-1].select {|x| x.size > 80}
assert_equal([], longer)
assert_equal([], e)
end
Expand Down
2 changes: 1 addition & 1 deletion test/rubygems/test_gem_commands_update_command.rb
Original file line number Diff line number Diff line change
Expand Up @@ -722,7 +722,7 @@ def test_pass_down_the_job_option_to_make

gem_make_out = File.read(File.join(gemspec.extension_dir, "gem_make.out"))
if vc_windows? && nmake_found?
refute_includes(gem_make_out, "-j2")
refute_includes(gem_make_out, " -j2")
else
assert_includes(gem_make_out, "make -j2")
end
Expand Down
2 changes: 2 additions & 0 deletions tool/rbs_skip_tests_windows
Original file line number Diff line number Diff line change
Expand Up @@ -105,3 +105,5 @@ test_new(TempfileSingletonTest)

# Errno::EACCES: Permission denied @ apply2files - C:/a/_temp/d20250813-10156-f8z9pn/test.gz
test_open(ZlibGzipReaderSingletonTest)

test_reachable_objects_from_root(ObjectSpaceTest) To avoid NoMemoryError with test-unit 3.7.5
16 changes: 15 additions & 1 deletion zjit/src/hir.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5299,6 +5299,20 @@ impl ProfileOracle {
}
}

fn invalidates_locals(opcode: u32, operands: *const VALUE) -> bool {
match opcode {
// Control-flow is non-leaf in the interpreter because it can execute arbitrary code on
// interrupt. But in the JIT, we side-exit if there is a pending interrupt.
YARVINSN_jump
| YARVINSN_branchunless
| YARVINSN_branchif
| YARVINSN_branchnil
| YARVINSN_leave => false,
// TODO(max): Read the invokebuiltin target from operands and determine if it's leaf
_ => unsafe { !rb_zjit_insn_leaf(opcode as i32, operands) }
}
}

/// The index of the self parameter in the HIR function
pub const SELF_PARAM_IDX: usize = 0;

Expand Down Expand Up @@ -5434,7 +5448,7 @@ pub fn iseq_to_hir(iseq: *const rb_iseq_t) -> Result<Function, ParseError> {
}

// Flag a future getlocal/setlocal to add a patch point if this instruction is not leaf.
if unsafe { !rb_zjit_insn_leaf(opcode as i32, pc.offset(1)) } {
if invalidates_locals(opcode, unsafe { pc.offset(1) }) {
local_inval = true;
}

Expand Down
30 changes: 14 additions & 16 deletions zjit/src/hir/opt_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9638,26 +9638,24 @@ mod hir_opt_tests {
Jump bb2(v8, v9, v10, v11, v12)
bb2(v14:BasicObject, v15:BasicObject, v16:BasicObject, v17:BasicObject, v18:NilClass):
CheckInterrupts
v27:BasicObject = GetLocal :a, l0, EP@6
SetLocal :formatted, l0, EP@3, v27
v39:BasicObject = GetLocal :formatted, l0, EP@3
SetLocal :formatted, l0, EP@3, v15
PatchPoint SingleRactorMode
v56:HeapBasicObject = GuardType v14, HeapBasicObject
v57:HeapBasicObject = GuardShape v56, 0x1000
StoreField v57, :@formatted@0x1001, v39
WriteBarrier v57, v39
v60:CShape[0x1002] = Const CShape(0x1002)
StoreField v57, :_shape_id@0x1003, v60
v45:Class[VMFrozenCore] = Const Value(VALUE(0x1008))
v54:HeapBasicObject = GuardType v14, HeapBasicObject
v55:HeapBasicObject = GuardShape v54, 0x1000
StoreField v55, :@formatted@0x1001, v15
WriteBarrier v55, v15
v58:CShape[0x1002] = Const CShape(0x1002)
StoreField v55, :_shape_id@0x1003, v58
v43:Class[VMFrozenCore] = Const Value(VALUE(0x1008))
PatchPoint MethodRedefined(Class@0x1010, lambda@0x1018, cme:0x1020)
PatchPoint NoSingletonClass(Class@0x1010)
v65:BasicObject = CCallWithFrame v45, :RubyVM::FrozenCore.lambda@0x1048, block=0x1050
v48:BasicObject = GetLocal :a, l0, EP@6
v49:BasicObject = GetLocal :_b, l0, EP@5
v50:BasicObject = GetLocal :_c, l0, EP@4
v51:BasicObject = GetLocal :formatted, l0, EP@3
v63:BasicObject = CCallWithFrame v43, :RubyVM::FrozenCore.lambda@0x1048, block=0x1050
v46:BasicObject = GetLocal :a, l0, EP@6
v47:BasicObject = GetLocal :_b, l0, EP@5
v48:BasicObject = GetLocal :_c, l0, EP@4
v49:BasicObject = GetLocal :formatted, l0, EP@3
CheckInterrupts
Return v65
Return v63
");
}

Expand Down
56 changes: 23 additions & 33 deletions zjit/src/hir/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1069,17 +1069,14 @@ pub mod hir_build_tests {
v18:CBool = Test v11
IfFalse v18, bb3(v10, v11, v12)
v22:Fixnum[3] = Const Value(3)
PatchPoint NoEPEscape(test)
CheckInterrupts
Jump bb4(v10, v11, v22)
bb3(v29:BasicObject, v30:BasicObject, v31:NilClass):
v35:Fixnum[4] = Const Value(4)
PatchPoint NoEPEscape(test)
Jump bb4(v29, v30, v35)
bb4(v40:BasicObject, v41:BasicObject, v42:Fixnum):
PatchPoint NoEPEscape(test)
bb3(v27:BasicObject, v28:BasicObject, v29:NilClass):
v33:Fixnum[4] = Const Value(4)
Jump bb4(v27, v28, v33)
bb4(v36:BasicObject, v37:BasicObject, v38:Fixnum):
CheckInterrupts
Return v42
Return v38
");
}

Expand Down Expand Up @@ -1366,23 +1363,20 @@ pub mod hir_build_tests {
CheckInterrupts
Jump bb4(v10, v16, v20)
bb4(v26:BasicObject, v27:BasicObject, v28:BasicObject):
PatchPoint NoEPEscape(test)
v34:Fixnum[0] = Const Value(0)
v37:BasicObject = SendWithoutBlock v28, :>, v34 # SendFallbackReason: Uncategorized(opt_gt)
v32:Fixnum[0] = Const Value(0)
v35:BasicObject = SendWithoutBlock v28, :>, v32 # SendFallbackReason: Uncategorized(opt_gt)
CheckInterrupts
v40:CBool = Test v37
IfTrue v40, bb3(v26, v27, v28)
v43:NilClass = Const Value(nil)
PatchPoint NoEPEscape(test)
v38:CBool = Test v35
IfTrue v38, bb3(v26, v27, v28)
v41:NilClass = Const Value(nil)
CheckInterrupts
Return v27
bb3(v53:BasicObject, v54:BasicObject, v55:BasicObject):
PatchPoint NoEPEscape(test)
v62:Fixnum[1] = Const Value(1)
v65:BasicObject = SendWithoutBlock v54, :+, v62 # SendFallbackReason: Uncategorized(opt_plus)
v70:Fixnum[1] = Const Value(1)
v73:BasicObject = SendWithoutBlock v55, :-, v70 # SendFallbackReason: Uncategorized(opt_minus)
Jump bb4(v53, v65, v73)
bb3(v49:BasicObject, v50:BasicObject, v51:BasicObject):
v56:Fixnum[1] = Const Value(1)
v59:BasicObject = SendWithoutBlock v50, :+, v56 # SendFallbackReason: Uncategorized(opt_plus)
v64:Fixnum[1] = Const Value(1)
v67:BasicObject = SendWithoutBlock v51, :-, v64 # SendFallbackReason: Uncategorized(opt_minus)
Jump bb4(v49, v59, v67)
");
}

Expand Down Expand Up @@ -3064,15 +3058,13 @@ pub mod hir_build_tests {
CheckInterrupts
v35:CBool[true] = Test v32
IfFalse v35, bb3(v16, v17, v18, v19, v20, v25)
PatchPoint NoEPEscape(open)
v42:BasicObject = InvokeBlock, v25 # SendFallbackReason: Uncategorized(invokeblock)
v45:BasicObject = InvokeBuiltin dir_s_close, v16, v25
v40:BasicObject = InvokeBlock, v25 # SendFallbackReason: Uncategorized(invokeblock)
v43:BasicObject = InvokeBuiltin dir_s_close, v16, v25
CheckInterrupts
Return v42
bb3(v51, v52, v53, v54, v55, v56):
PatchPoint NoEPEscape(open)
Return v40
bb3(v49, v50, v51, v52, v53, v54):
CheckInterrupts
Return v56
Return v54
");
}

Expand Down Expand Up @@ -3548,12 +3540,10 @@ pub mod hir_build_tests {
v22:Fixnum[1] = Const Value(1)
v24:Fixnum[1] = Const Value(1)
v27:BasicObject = SendWithoutBlock v22, :+, v24 # SendFallbackReason: Uncategorized(opt_plus)
PatchPoint NoEPEscape(test)
Jump bb3(v10, v27, v12)
bb3(v32:BasicObject, v33:BasicObject, v34:BasicObject):
PatchPoint NoEPEscape(test)
bb3(v30:BasicObject, v31:BasicObject, v32:BasicObject):
CheckInterrupts
Return v33
Return v31
");
}

Expand Down