summaryrefslogtreecommitdiff
path: root/lib
AgeCommit message (Collapse)Author
2023-09-29[ruby/ostruct] Emit a performance warning when OpenStruct is usedJean byroot Boussier
(https://github.com/ruby/ostruct/pull/56) The OpenStruct documentation clearly state that it shouldn't be used when performance is expected. Ruby 3.3 introduce a new category of warnings that is silenced by default: performance. The expected use case is to enable this warning when looking for potential performance issues within an application. As such I think it would make sense to emit a performance warning when OpenStruct is used, as it may help pinpoint that a dependency rely on it, etc. https://github.com/ruby/ostruct/commit/5826e12db8 Co-authored-by: Jean Boussier <jean.boussier@gmail.com>
2023-09-28[ruby/open3] [DOC] RDoc for Open3BurdetteLamar
https://github.com/ruby/open3/commit/457cae3a51
2023-09-28[ruby/open3] [DOC] RDoc for Open3Peter Zhu
2023-09-28[ruby/reline] Properly restore Reline::IOGate in test teardowntomoya ishida
(https://github.com/ruby/reline/pull/593) * Properly restore Reline::IOGate in test teardown * GeneralIO.reset should reset class variable existence https://github.com/ruby/reline/commit/c16d33dae5
2023-09-27[DOC] RDoc for Open3.popen3 (#8521)Burdette Lamar
2023-09-27Rename YARP symbols to prismKevin Newton
2023-09-27Sync to prism rename commitsKevin Newton
2023-09-27Rename YARP filepaths to prism filepathsKevin Newton
2023-09-27[ruby/yarp] Move node ext and parse result to their own filesKevin Newton
https://github.com/ruby/yarp/commit/916828767c
2023-09-27[ruby/yarp] Move lex compat into its own fileKevin Newton
https://github.com/ruby/yarp/commit/e90f88f21f
2023-09-27[ruby/yarp] Move node inspector into its own fileKevin Newton
https://github.com/ruby/yarp/commit/1c843d2f22
2023-09-27[ruby/yarp] Move debug into its own fileKevin Newton
https://github.com/ruby/yarp/commit/139362c90a
2023-09-27[ruby/yarp] More documentation for desugar compilerKevin Newton
https://github.com/ruby/yarp/commit/4a6df3c2a4
2023-09-27[ruby/yarp] Split up compiler versus visitorKevin Newton
https://github.com/ruby/yarp/commit/2e6baa3f19
2023-09-27[ruby/yarp] Move DSL into its own fileKevin Newton
https://github.com/ruby/yarp/commit/3d34404d80
2023-09-27[ruby/yarp] Move BasicVisitor below ParseResult in yarp.rbKevin Newton
https://github.com/ruby/yarp/commit/d51014582a
2023-09-27[ruby/yarp] Move more features under autoloadKevin Newton
https://github.com/ruby/yarp/commit/2f1f3fa448
2023-09-27[ruby/yarp] Move dispatcher into its own autoloadKevin Newton
https://github.com/ruby/yarp/commit/52bd001ea2
2023-09-27[ruby/yarp] Use less magical numbers for regular expression flagsKevin Newton
https://github.com/ruby/yarp/commit/c6a0abdd24
2023-09-27[rubygems/rubygems] Centralize logic using `Pathname#relative_path_from`Ry Biesemeyer
To avoid potential crashes when trying to jump from a drive to another on Windows, and take the change refactor things a bit. https://github.com/rubygems/rubygems/commit/7c9a9a431a
2023-09-27[rubygems/rubygems] Reword a couple of error messagesDavid Rodriguez
When a path does not make a lot of sense. https://github.com/rubygems/rubygems/commit/d173c79e9a
2023-09-27[rubygems/rubygems] Refactor full sha revision match logickrororo
https://github.com/rubygems/rubygems/commit/f0d8255ebd
2023-09-27[rubygems/rubygems] Fix bundle install when older revisions of git sourcekrororo
https://github.com/rubygems/rubygems/commit/a30712c0fc
2023-09-27[rubygems/rubygems] Fix `bundle lock --minor --update <dep>` edge caseDavid Rodriguez
When the latest allowed minor of `dep` adds a new dependency, that new dependency would be incorrectly resolved to the latest minor of the first major version. https://github.com/rubygems/rubygems/commit/fd50c9d4f3
2023-09-26[ruby/reline] Fix config.rb to File.expand_path $include path inelfham
inputrc (https://github.com/ruby/reline/pull/592) * Fix config.rb to File.expand_path $include path in inputrc * fix bug of test_include_expand_path on Windows https://github.com/ruby/reline/commit/4d34e52d0b
2023-09-25[ruby/reline] Update to Unicode 15.1.0elfham
(https://github.com/ruby/reline/pull/591) https://github.com/ruby/reline/commit/c2fc1f771a
2023-09-25[rubygems/rubygems] Allow standalone mode to work on a Windows edge caseDavid Rodriguez
If a gem is located in a different drive than the Gemfile, standalone mode will fail to generate the `bundler/setup` script, failing with an error like ``` ArgumentError: different prefix: "C:/" and "D:/a/rubygems/rubygems/bundler/tmp/2/bundled_app/bundle/bundler" C:/hostedtoolcache/windows/Ruby/3.0.5/x64/lib/ruby/3.0.0/pathname.rb:528:in `relative_path_from' D:/a/rubygems/rubygems/bundler/tmp/2/gems/system/gems/bundler-2.4.20/lib/bundler/installer/standalone.rb:58:in `gem_path' D:/a/rubygems/rubygems/bundler/tmp/2/gems/system/gems/bundler-2.4.20/lib/bundler/installer/standalone.rb:33:in `block (2 levels) in paths' D:/a/rubygems/rubygems/bundler/tmp/2/gems/system/gems/bundler-2.4.20/lib/bundler/installer/standalone.rb:32:in `map' D:/a/rubygems/rubygems/bundler/tmp/2/gems/system/gems/bundler-2.4.20/lib/bundler/installer/standalone.rb:32:in `block in paths' ``` I'm fixing this by falling back to using a full path in this case. This was caught by a failing spec, so I'm not adding new specs. https://github.com/rubygems/rubygems/commit/3cb9b9ab7a
2023-09-23Improve performance of include? by 5-10xHartley McGuire
Rails uses IPAddr#include? to evaluate what it should use as the client's remote ip by filtering potential ips against a trusted list of internal ips. In a _very_ minimal app, #include? was showing up in a profile as ~1% of request time. The issue is that #include? was converting itself and the other value passed in to ranges of IPAddr. This mean as a worst case (where other is a non-IPAddr, like a String) then there would be 5 IPAddr instances created (other -> IPAddr, and two each for the conversions to ranges). However, wrapping the begin and end values as IPAddr is not needed because they are necessarily fixed addresses already. This patch extracts the logic for getting the begin_addr and end_addr from the #to_range method so that they can be used in #include? without having to instantiate so many IPAddr. Benchmark: ```ruby net1 = IPAddr.new("192.168.2.0/24") net2 = IPAddr.new("192.168.2.100") net3 = IPAddr.new("192.168.3.0") net4 = IPAddr.new("192.168.2.0/16") Benchmark.ips do |x| x.report("/24 includes address") { net1.include? net2 } x.report("/24 not includes address") { net1.include? net3 } x.report("/16 includes /24") { net4.include? net1 } x.report("/24 not includes /16") { net1.include? net4 } x.compare! end ``` Before: ``` Comparison: /24 not includes /16: 175041.3 i/s /24 not includes address: 164933.2 i/s - 1.06x (± 0.00) slower /16 includes /24: 163881.9 i/s - 1.07x (± 0.00) slower /24 includes address: 163558.4 i/s - 1.07x (± 0.00) slower ``` After: ``` Comparison: /24 not includes /16: 2588364.9 i/s /24 not includes address: 1474650.7 i/s - 1.76x (± 0.00) slower /16 includes /24: 1461351.0 i/s - 1.77x (± 0.00) slower /24 includes address: 1425463.5 i/s - 1.82x (± 0.00) slower ```
2023-09-22[ruby/yarp] Introduce YP_TOKEN_METHOD_NAMEHaldun Bayhantopcu
https://github.com/ruby/yarp/commit/e855bf415c
2023-09-22[ruby/prettyprint] [DOC] Link fixesBurdetteLamar
https://github.com/ruby/prettyprint/commit/f1f583c827
2023-09-22[ruby/irb] Page show_source's outputStan Lo
(https://github.com/ruby/irb/pull/719) https://github.com/ruby/irb/commit/3cedc5cb62
2023-09-21[ruby/pstore] [DOC] Link fixesBurdetteLamar
https://github.com/ruby/pstore/commit/3f328a1e0e
2023-09-21[rubygems/rubygems] Reduce allocations when parsing lockfileSamuel Giddins
``` ==> memprof.after.txt <== Total allocated: 673.08 kB (7644 objects) Total retained: 107.35 kB (1018 objects) ==> memprof.before.txt <== Total allocated: 739.12 kB (9140 objects) Total retained: 138.61 kB (1695 objects) ``` Savings will scale by the number of lines in the lockfile https://github.com/rubygems/rubygems/commit/f6abf4439c
2023-09-21[rubygems/rubygems] Remove usage of Dir.chdir that just execute a subprocessSamuel Giddins
Preferring instead to spawn the subprocess in the correct directory https://github.com/rubygems/rubygems/commit/ad5abd6a45
2023-09-21[rubygems/rubygems] Stop bundler eagerly loading all specs with extsSamuel Giddins
We were setting the wrong `extension_dir` for git specs stubs Additionally, the call to `self.extension_dir` was loading the remote spec, which was avoidable since the stub had an extension dir (and in fact its #gem_build_complete_path does exactly what we want anyway) Finally, now set the base_dir when loading the remote_spec from a stub specification, since the git source sets the base dir for stubs based on where the spec _will_ be installed to, and we want to preserve that so the base_dir for the loaded spec & the stub are the same https://github.com/rubygems/rubygems/commit/a94acb465b
2023-09-21[rubygems/rubygems] Freeze more strings in generated gemspecsSamuel Giddins
Specifically, this will have frozen string literals for: - Gem platform tuple entries - Gem::Version strings - Gem::Specification#installed_by_version - Dependency requirement strings https://github.com/rubygems/rubygems/commit/6195da5bdb
2023-09-21[rubygems/rubygems] Aggressively optimize allocations in SafeMarshalSamuel Giddins
Reduces allocations in a bundle install --full-index by an order of magnitude Main wins are (a) getting rid of exessive string allocations for exception message stack (b) Avoiding hash allocations caused by kwargs for #initialize (c) avoid using unpack to do bit math, its easy enough to do by hand (d) special case the most common elements so they can be read without an allocation (e) avoid string allocations every time a symbol->string lookup is done by using symbol#name https://github.com/rubygems/rubygems/commit/7d2ee51402
2023-09-20[ruby/yarp] Print locations using line / col instead of offsetsJemma Issroff
This commit changes printing of locations to use the format (start_line,start_column)-(end_line,end_column) instead of using offsets. https://github.com/ruby/yarp/commit/c078696e22
2023-09-20[rubygems/rubygems] Give up, load Time via Marshal.loadSamuel Giddins
https://github.com/rubygems/rubygems/commit/6c92ba2ba3
2023-09-20[rubygems/rubygems] All rubies working with different time zonesSamuel Giddins
Tested with: `ruby -e 'trap("INT") { exit 1 }; TZ=%w[UTC +0000 -0000]; RUBY=%w[ruby-2.7 ruby-3.2.2 jruby-9.4 truffleruby-22 truffleruby-23]; TZ.product(RUBY).each { |t, r| puts ?**120, "TZ=#{t} RUBY=#{r}", "*"*120; system({"TZ"=>t,"RUBY"=>r}, *ARGV) }' zsh -lic 'chruby $RUBY; ruby -vw -Ilib test/rubygems/test_gem_safe_marshal.rb --verbose=progress'` https://github.com/rubygems/rubygems/commit/6192005afb
2023-09-20[rubygems/rubygems] Tests passing on truffleruby 22 in addition to 23Samuel Giddins
https://github.com/rubygems/rubygems/commit/8065530d43
2023-09-20[rubygems/rubygems] Bundler error handlingSamuel Giddins
https://github.com/rubygems/rubygems/commit/63b422b71a
2023-09-20[rubygems/rubygems] Allow bundler to load from the dependency apiSamuel Giddins
https://github.com/rubygems/rubygems/commit/3303957286
2023-09-20[rubygems/rubygems] Use safe_load in bundler when availableSamuel Giddins
https://github.com/rubygems/rubygems/commit/34d096e38a
2023-09-20[rubygems/rubygems] Verified working on mri/jruby/truffleruby with specs on ↵Samuel Giddins
rubygems.org https://github.com/rubygems/rubygems/commit/4f51741cc6
2023-09-20[rubygems/rubygems] Broader version compatibility in marshal testsSamuel Giddins
https://github.com/rubygems/rubygems/commit/6ec518c563
2023-09-20[rubygems/rubygems] Fix UTC time loadingSamuel Giddins
https://github.com/rubygems/rubygems/commit/2a4d0a44b0
2023-09-20[rubygems/rubygems] Add a Marshal.load replacement that walks an AST to ↵Samuel Giddins
safely load permitted classes/symbols https://github.com/rubygems/rubygems/commit/7e4478fe73
2023-09-19[ruby/yarp] Only keep semantic fields in Java, i.e. skip location fieldsBenoit Daloze
* Add $YARP_SERIALIZE_ONLY_SEMANTICS_FIELDS to control where to serialize location fields at templating time, this way there is no overhead for either case and nothing to check at runtime. * Add a byte in the header to indicate whether location fields are included as expected. * Fixes https://github.com/ruby/yarp/issues/807 * Simplify the build-java CI job now that the FFI backend is available so JRuby can serialize. * Support keeping some location fields which are still needed until there is a replacement https://github.com/ruby/yarp/commit/fc5cf2df12
2023-09-19[ruby/yarp] Better Node#pretty_printKevin Newton
Respect the current indentation https://github.com/ruby/yarp/commit/068333ef49