Age | Commit message (Collapse) | Author | |
---|---|---|---|
2021-06-23 | Fix a link [ci skip] | Kazuhiro NISHIYAMA | |
2021-06-22 | Fix NEWS formatting. | Samuel Williams | |
2021-06-22 | Add fiber scheduler news. | Samuel Williams | |
Notes: Merged: https://github.com/ruby/ruby/pull/4593 | |||
2021-06-02 | Note about 07c05b6fe931337e928a89ac5ebf654862dc0eca | Takashi Kokubun | |
2021-05-31 | Change the default --jit-max-cache to 10000 | Takashi Kokubun | |
This is useful for large applications like Rails. https://k0kubun.medium.com/ruby-3-jit-can-make-rails-faster-756310f235a | |||
2021-05-26 | Add NEWS about 46655156dcc37509dcb69fcd0717c110eb1c624a | NARUSE, Yui | |
* Add Thread#native_thread_id [Feature #17853] | |||
2021-05-17 | NEWS.md: mention lib/objspace/trace.rb [Feature #17762] | Yusuke Endoh | |
2021-04-21 | Evaluate multiple assignment left hand side before right hand side | Jeremy Evans | |
In regular assignment, Ruby evaluates the left hand side before the right hand side. For example: ```ruby foo[0] = bar ``` Calls `foo`, then `bar`, then `[]=` on the result of `foo`. Previously, multiple assignment didn't work this way. If you did: ```ruby abc.def, foo[0] = bar, baz ``` Ruby would previously call `bar`, then `baz`, then `abc`, then `def=` on the result of `abc`, then `foo`, then `[]=` on the result of `foo`. This change makes multiple assignment similar to single assignment, changing the evaluation order of the above multiple assignment code to calling `abc`, then `foo`, then `bar`, then `baz`, then `def=` on the result of `abc`, then `[]=` on the result of `foo`. Implementing this is challenging with the stack-based virtual machine. We need to keep track of all of the left hand side attribute setter receivers and setter arguments, and then keep track of the stack level while handling the assignment processing, so we can issue the appropriate topn instructions to get the receiver. Here's an example of how the multiple assignment is executed, showing the stack and instructions: ``` self # putself abc # send abc, self # putself abc, foo # send abc, foo, 0 # putobject 0 abc, foo, 0, [bar, baz] # evaluate RHS abc, foo, 0, [bar, baz], baz, bar # expandarray abc, foo, 0, [bar, baz], baz, bar, abc # topn 5 abc, foo, 0, [bar, baz], baz, abc, bar # swap abc, foo, 0, [bar, baz], baz, def= # send abc, foo, 0, [bar, baz], baz # pop abc, foo, 0, [bar, baz], baz, foo # topn 3 abc, foo, 0, [bar, baz], baz, foo, 0 # topn 3 abc, foo, 0, [bar, baz], baz, foo, 0, baz # topn 2 abc, foo, 0, [bar, baz], baz, []= # send abc, foo, 0, [bar, baz], baz # pop abc, foo, 0, [bar, baz] # pop [bar, baz], foo, 0, [bar, baz] # setn 3 [bar, baz], foo, 0 # pop [bar, baz], foo # pop [bar, baz] # pop ``` As multiple assignment must deal with splats, post args, and any level of nesting, it gets quite a bit more complex than this in non-trivial cases. To handle this, struct masgn_state is added to keep track of the overall state of the mass assignment, which stores a linked list of struct masgn_attrasgn, one for each assigned attribute. This adds a new optimization that replaces a topn 1/pop instruction combination with a single swap instruction for multiple assignment to non-aref attributes. This new approach isn't compatible with one of the optimizations previously used, in the case where the multiple assignment return value was not needed, there was no lhs splat, and one of the left hand side used an attribute setter. This removes that optimization. Removing the optimization allowed for removing the POP_ELEMENT and adjust_stack functions. This adds a benchmark to measure how much slower multiple assignment is with the correct evaluation order. This benchmark shows: * 4-9% decrease for attribute sets * 14-23% decrease for array member sets * Basically same speed for local variable sets Importantly, it shows no significant difference between the popped (where return value of the multiple assignment is not needed) and !popped (where return value of the multiple assignment is needed) cases for attribute and array member sets. This indicates the previous optimization, which was dropped in the evaluation order fix and only affected the popped case, is not important to performance. Fixes [Bug #4443] Notes: Merged: https://github.com/ruby/ruby/pull/4390 Merged-By: jeremyevans <code@jeremyevans.net> | |||
2021-04-16 | NEWS for [Feature #15198] [ci skip] | Nobuyoshi Nakada | |
2021-03-26 | Enumerable#tally with the resulting hash [Feature #17744] | Nobuyoshi Nakada | |
Notes: Merged: https://github.com/ruby/ruby/pull/4318 Merged-By: nobu <nobu@ruby-lang.org> | |||
2021-03-21 | Pattern matching pin operator against expression [Feature #17411] | Kazuki Tsujimoto | |
This commit is based on the patch by @nobu. | |||
2021-03-16 | Fix a link [ci skip] | Kazuhiro NISHIYAMA | |
2021-03-15 | NEWS of [Feature #12194] [ci skip] | Nobuyoshi Nakada | |
2021-02-16 | Add NEWS entry for [Feature #16043] | Kazuhiro NISHIYAMA | |
2021-02-15 | [DOC] NEWS for Thread::Backtrace.limit [Feature #17479] | Nobuyoshi Nakada | |
Notes: Merged: https://github.com/ruby/ruby/pull/4187 | |||
2021-02-11 | The Queue constructor should take an initial set of objects | Chris Seaton | |
Co-authored-by: Nobuyoshi Nakada <nobu@ruby-lang.org> Notes: Merged: https://github.com/ruby/ruby/pull/4140 Merged-By: nobu <nobu@ruby-lang.org> | |||
2021-01-20 | Update NEWS.md about deprecation | Takashi Kokubun | |
2021-01-17 | Warn Struct#initialize with only keyword args (#4070) | Takashi Kokubun | |
* Warn Struct#initialize with only keyword args A part of [Feature #16806] * Do not warn if `keyword_init: false` is explicitly specified * Add a NEWS entry * s/in/from/ * Make sure all fields are initialized Notes: Merged-By: k0kubun <takashikkbn@gmail.com> | |||
2021-01-14 | Make Module#prepend affect ancestor chain even if argument already included ↵ | Jeremy Evans | |
in receiver Previously, if a class included a module and then prepended the same module, the prepend had no effect. This changes the behavior so that the prepend has an effect unless the module is already prepended the receiver. While here, rename the origin_seen variable in include_modules_at, since it is misleading. The variable tracks whether c has been seen, not whether the origin of klass has been. Fixes [Bug #17423] Notes: Merged: https://github.com/ruby/ruby/pull/4072 | |||
2021-01-13 | Rename RubyVM::MJIT to RubyVM::JIT | Takashi Kokubun | |
because the name "MJIT" is an internal code name, it's inconsistent with --jit while they are related to each other, and I want to discourage future JIT implementation-specific (e.g. MJIT-specific) APIs by this rename. [Feature #17490] | |||
2021-01-02 | NEWS: We have links now, and there is no changelog anymore [doc] | Marc-Andre Lafortune | |
2021-01-02 | NEWS: [Feature #17312] [ci skip] | Nobuyoshi Nakada | |
Notes: Merged: https://github.com/ruby/ruby/pull/3851 | |||
2020-12-25 | Copy NEWS.md to doc/NEWS-3.0.0.md and update for 3.1.0 | Kazuhiro NISHIYAMA | |
2020-12-25 | Sort URLs by issue numbers and remove duplicated [ci skip] | Kazuhiro NISHIYAMA | |
2020-12-25 | Update stdlib section for Ruby 3.0 | Hiroshi SHIBATA | |
2020-12-23 | Let's be more accurate [ci skip] | Takashi Kokubun | |
2020-12-23 | Add NEWS entries about JIT in Jul ~ Dec | Takashi Kokubun | |
* Instance variables * Merge ivar guards on JIT https://github.com/ruby/ruby/commit/a69dd699ee630dd1086627dbca15a218a8538b6f https://github.com/ruby/ruby/commit/e4f7eee009ebe1f23ee3e5ea69ccd9ea1530bc6f * Prefer RB_OBJ_FROZEN_RAW https://github.com/ruby/ruby/commit/5611066e03fe73bdbb08cc46f79530c69975cf17 * Skip checking ROBJECT_EMBED https://github.com/ruby/ruby/commit/81a8d1cf09d59f0d69143d7896545f849f580a4e * Method inlining * Mark some Integer methods as inline https://github.com/ruby/ruby/commit/0703e014713ae92f4c8a2b31e385718dc2452eac * Allow inlining Integer#-@ and #~ https://github.com/ruby/ruby/commit/dbb4f1996939d0ce977e6b37579e28dd886428ff * Inline builtin struct aref https://github.com/ruby/ruby/commit/167d139487d67613bd02522e24476f06ffa137b7 * Make Kernel#then, #yield_self, #frozen? builtin https://github.com/ruby/ruby/commit/24fa37d87a24dc932c1d778bcaf91204f5c12a76 * (For future) Rewrite Kernel#tap with Ruby https://github.com/ruby/ruby/commit/f3a0d7a2035e9f5e0c70effd55732607e3def263 * Other optimizations * Inline constant references https://github.com/ruby/ruby/commit/53babf35ef5b643774636550ea23851e2607e076 * Lazily move PC with RUBY_VM_CHECK_INTS https://github.com/ruby/ruby/commit/5d74894f2bc4a3a18aec952d946ead3d784cb4b4 * Cache access to reg_cfp->self on JIT https://github.com/ruby/ruby/commit/d40983772966938828a28c6e89752a3e76447b9e * JIT compaction * Shrink the blocking region for compile_compact_jit_code https://github.com/ruby/ruby/commit/ed8e552d4d2c825a3f780ac8bd898eaaca7c21e7 * Stop leaving .c files for JIT compaction in /tmp https://github.com/ruby/ruby/commit/fa1250a506e9b6a1bcbf664f6b7b9c06e045d9b9 * GC of JIT-ed code * Run unload_units in the JIT worker thread https://github.com/ruby/ruby/commit/16dab6b69263ed9c816bc0283c8c1f2f95dc1027 * Avoid unloading units which have enough total_calls https://github.com/ruby/ruby/commit/d80226e7bd801fcbccf71f19ba373b7baf71a49e * Throttle unload_units https://github.com/ruby/ruby/commit/122cd35939ddf8ef7bfa17ad75570c01d0cf06ab * Throttle JIT compaction https://github.com/ruby/ruby/commit/096f54428d8000cccce430022784cb0e7cd31cb4 * Compilation speed * Eliminate IVC sync between JIT and Ruby threads https://github.com/ruby/ruby/commit/0960f56a1d773c5417e9de729e159d346aec17ca * Lazily move units from active_units to stale_units https://github.com/ruby/ruby/commit/5d8f227d0edd3c542fcac465eb82005a5f852d34 Please see https://github.com/ruby/ruby/commit/200c5f4075cb1d179c2eba5b30b5b0a500870f67 for other improvements in Jan ~ Jun. | |||
2020-12-24 | NEWS.md: grammatical improvement | Yusuke Endoh | |
2020-12-23 | Document shareable_constant_value and other magic constants [doc] | Marc-Andre Lafortune | |
2020-12-24 | Module#public_class_method also accepts a symbol array as an argument | Yusuke Endoh | |
I'm unsure if this is intentional, but add a document anyway. [Feature #17314] | |||
2020-12-22 | NEWS: fix typos and grammar | Marcus Stollsteimer | |
2020-12-23 | fiddle: Update to 1.0.5 | Sutou Kouhei | |
Notes: Merged: https://github.com/ruby/ruby/pull/3970 | |||
2020-12-22 | NEWS: Mention deprecation warnings not being shown by default | Marc-Andre Lafortune | |
Notes: Merged: https://github.com/ruby/ruby/pull/3974 | |||
2020-12-22 | NEWS: group keyword arguments related items together | Marc-Andre Lafortune | |
Notes: Merged: https://github.com/ruby/ruby/pull/3974 | |||
2020-12-22 | NEWS: combine $SAFE and $KCODE, move lower | Marc-Andre Lafortune | |
Notes: Merged: https://github.com/ruby/ruby/pull/3974 | |||
2020-12-22 | NEWS: move error handling at end of section | Marc-Andre Lafortune | |
Notes: Merged: https://github.com/ruby/ruby/pull/3974 | |||
2020-12-22 | Update fiber scheduler documentation. | Samuel Williams | |
Notes: Merged: https://github.com/ruby/ruby/pull/3965 | |||
2020-12-22 | NEWS.md: fix the format | Yusuke Endoh | |
2020-12-22 | add a NEWS entry about ractor C API | Koichi Sasada | |
2020-12-22 | Add entries for set 1.0.0 | Akinori MUSHA | |
2020-12-22 | NEWS.md: mention the behavior change of Binding#eval | Yusuke Endoh | |
[Bug #17419] | |||
2020-12-21 | NEWS: JSON is Ractor compatible [ci skip] | Kenta Murata | |
2020-12-21 | Document usage of ArithmeticSequence in Array#slice, and add to NEWS (#3952) | Victor Shepelev | |
Notes: Merged-By: mrkn <mrkn@ruby-lang.org> | |||
2020-12-20 | NEWS.md: remove nonsense caveat | Yusuke Endoh | |
3.0 will be released in a few days (hopefully), so remove a caution: "it may be reverted until 3.0 release." | |||
2020-12-20 | NEWS: Add an entry of Pathname [ci skip] | Kenta Murata | |
2020-12-19 | NEWS: Update BigDecimal version [ci skip] | Kenta Murata | |
2020-12-19 | Feature 17314: allow to pass array to public, protected and private methods | Radosław Bułat | |
2020-12-19 | NEWS: Add an entry of Digest 3.0.0 [ci skip] | Kenta Murata | |
2020-12-19 | Feature 17314: alias_method returns symbol | Radosław Bułat | |
2020-12-19 | Feature 17314: update docs and NEWS about attr* methods returning array of ↵ | Radosław Bułat | |
symbols |