<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Ruby Changes</title>
    <description>Comprehensive changelog of Ruby Programming Language</description>
    <link>https://rubyreferences.github.io/rubychanges/</link>
    <atom:link href="https://rubyreferences.github.io/rubychanges//feed.xml" rel="self" type="application/rss+xml" />
    

    
      <item>
        <title>Ruby 4.0</title>
        <description>&lt;p&gt;&lt;strong&gt;Highlights:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note: As Ruby doesn’t follow SemVer, the 4.0 version marks not some significant change/set of changes, but was chosen by Matz to celebrate Ruby’s 30s birthday.&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Support for line breaks before logical operators&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;Set&lt;/code&gt; reimplemented efficiently&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;Pathname&lt;/code&gt; became a core class&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;Ruby::Box&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;Ractor&lt;/code&gt;: ports&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://rubyreferences.github.io/rubychanges/4.0.html&quot;&gt;Read more »&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Fri, 26 Dec 2025 00:00:00 +0000</pubDate>
        <link>https://rubyreferences.github.io/rubychanges//4.0.html</link>
        <guid isPermaLink="true">https://rubyreferences.github.io/rubychanges//4.0.html</guid>
      </item>
    
      <item>
        <title>Ruby 3.3</title>
        <description>&lt;p&gt;&lt;strong&gt;Highlights:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code&gt;it&lt;/code&gt; will become anonymous block argument in 3.4&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;Module#set_temporary_name&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;ObjectSpace::WeakKeyMap&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;Range#overlap?&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;Fiber#kill&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://rubyreferences.github.io/rubychanges/3.3.html&quot;&gt;Read more »&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Mon, 25 Dec 2023 00:00:00 +0000</pubDate>
        <link>https://rubyreferences.github.io/rubychanges//3.3.html</link>
        <guid isPermaLink="true">https://rubyreferences.github.io/rubychanges//3.3.html</guid>
      </item>
    
      <item>
        <title>Ruby 3.4</title>
        <description>&lt;p&gt;&lt;strong&gt;Highlights:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code&gt;it&lt;/code&gt; anonymous block argument&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;**nil&lt;/code&gt; unpacking&lt;/li&gt;
  &lt;li&gt;String literals would be frozen in Ruby 3.5&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;Range#step&lt;/code&gt; iteration for any class via &lt;code&gt;+&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Backtrace improvements&lt;/li&gt;
  &lt;li&gt;Ractor improvements&lt;/li&gt;
  &lt;li&gt;Serious implementation updates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://rubyreferences.github.io/rubychanges/3.4.html&quot;&gt;Read more »&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Mon, 25 Dec 2023 00:00:00 +0000</pubDate>
        <link>https://rubyreferences.github.io/rubychanges//3.4.html</link>
        <guid isPermaLink="true">https://rubyreferences.github.io/rubychanges//3.4.html</guid>
      </item>
    
      <item>
        <title>Ruby 3.2</title>
        <description>&lt;p&gt;&lt;strong&gt;Highlights:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Anonymous method argument passing&lt;/li&gt;
  &lt;li&gt;More inspectable refinements&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;Data&lt;/code&gt; class&lt;/li&gt;
  &lt;li&gt;Support for pattern-matching in &lt;code&gt;Time&lt;/code&gt; and &lt;code&gt;MatchData&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;Set&lt;/code&gt; is a built-in class&lt;/li&gt;
  &lt;li&gt;Per-&lt;code&gt;Fiber&lt;/code&gt; storage&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;RubyVM::AbstractSyntaxTree&lt;/code&gt;: fault-tolerant and token-level parsing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://rubyreferences.github.io/rubychanges/3.2.html&quot;&gt;Read more »&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Fri, 04 Feb 2022 00:00:00 +0000</pubDate>
        <link>https://rubyreferences.github.io/rubychanges//3.2.html</link>
        <guid isPermaLink="true">https://rubyreferences.github.io/rubychanges//3.2.html</guid>
      </item>
    
      <item>
        <title>Ruby 3.1</title>
        <description>&lt;p&gt;&lt;strong&gt;Highlights:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The first major release after 3.0, Ruby 3.1 mostly dedicated to stabilizing new features like concurrency and pattern-matching, but also introduces a bunch of new features.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Hash literal value omission&lt;/li&gt;
  &lt;li&gt;Anonymous block argument&lt;/li&gt;
  &lt;li&gt;Pattern-matching: pinning of expressions&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;Time&lt;/code&gt;: better support for timezones in construction&lt;/li&gt;
  &lt;li&gt;Low-level &lt;code&gt;IO::Buffer&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;More methods become async with fiber scheduler&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;See also my this year’s ongoing post series on the making of the changelog and Ruby development process.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://rubyreferences.github.io/rubychanges/3.1.html&quot;&gt;Read more »&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Wed, 05 Jan 2022 00:00:00 +0000</pubDate>
        <link>https://rubyreferences.github.io/rubychanges//3.1.html</link>
        <guid isPermaLink="true">https://rubyreferences.github.io/rubychanges//3.1.html</guid>
      </item>
    
      <item>
        <title>Ruby 3.0</title>
        <description>&lt;p&gt;&lt;strong&gt;Highlights:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ruby 3.0 is a major language release. The core team worked hard to preserve backward compatibility while delivering some huge and exciting new features.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Full separation of keyword arguments&lt;/li&gt;
  &lt;li&gt;Ractors: Thread-alike object implementing the actor model, and finally lifting the GVL (Global Virtual machine Lock) and enabling true concurrency&lt;/li&gt;
  &lt;li&gt;Non-blocking IO with Fibers&lt;/li&gt;
  &lt;li&gt;Type declarations (in separate files)&lt;/li&gt;
  &lt;li&gt;Pattern matching:
    &lt;ul&gt;
      &lt;li&gt;No longer experimental&lt;/li&gt;
      &lt;li&gt;Two flavors for one-line pattern matching: &lt;code&gt;=&amp;gt;&lt;/code&gt; (aka rightward assignment) and &lt;code&gt;in&lt;/code&gt; (aka boolean check)&lt;/li&gt;
      &lt;li&gt;Find patterns&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;“Endless” methods&lt;/li&gt;
  &lt;li&gt;GC auto-compaction&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://rubyreferences.github.io/rubychanges/3.0.html&quot;&gt;Read more »&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Fri, 25 Dec 2020 00:00:00 +0000</pubDate>
        <link>https://rubyreferences.github.io/rubychanges//3.0.html</link>
        <guid isPermaLink="true">https://rubyreferences.github.io/rubychanges//3.0.html</guid>
      </item>
    
      <item>
        <title>Ruby 2.7</title>
        <description>&lt;p&gt;&lt;strong&gt;Highlights:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Ruby 2.7 is a last major release before 3.0¹, so it introduces several important changes, larger in scale than previous releases (and also a bit lean on a “just nice to have” features side). Be prepared!&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Pattern matching&lt;/li&gt;
  &lt;li&gt;“Real” keyword argument&lt;/li&gt;
  &lt;li&gt;Numbered block parameters&lt;/li&gt;
  &lt;li&gt;Beginless range&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;Enumerator.produce&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;GC.compact&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Large update of IRB&lt;/li&gt;
  &lt;li&gt;Serious cleanup of the standard library&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;small&gt;¹There is a possibility 2.8 will also be released, but in any case, Christmas release of 2020 is promised to be Ruby 3.0.&lt;/small&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://rubyreferences.github.io/rubychanges/2.7.html&quot;&gt;Read more »&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Fri, 27 Dec 2019 00:00:00 +0000</pubDate>
        <link>https://rubyreferences.github.io/rubychanges//2.7.html</link>
        <guid isPermaLink="true">https://rubyreferences.github.io/rubychanges//2.7.html</guid>
      </item>
    
      <item>
        <title>Ruby 2.4</title>
        <description>&lt;p&gt;&lt;strong&gt;Highlights:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Toplevel &lt;code&gt;return&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Unification of &lt;code&gt;Fixnum&lt;/code&gt; and &lt;code&gt;Bignum&lt;/code&gt; into &lt;code&gt;Integer&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Full Unicode support for String case operations&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;Warning&lt;/code&gt; module for fine-grained warnings output control&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;Comparable#clamp&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://rubyreferences.github.io/rubychanges/2.4.html&quot;&gt;Read more »&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Mon, 14 Oct 2019 00:00:00 +0000</pubDate>
        <link>https://rubyreferences.github.io/rubychanges//2.4.html</link>
        <guid isPermaLink="true">https://rubyreferences.github.io/rubychanges//2.4.html</guid>
      </item>
    
      <item>
        <title>Ruby 2.5</title>
        <description>&lt;p&gt;&lt;strong&gt;Highlights:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code&gt;rescue&lt;/code&gt;/&lt;code&gt;ensure&lt;/code&gt; inside blocks&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;#yield_self&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;Struct&lt;/code&gt; with keyword initialization&lt;/li&gt;
  &lt;li&gt;Exceptions output changed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://rubyreferences.github.io/rubychanges/2.5.html&quot;&gt;Read more »&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Thu, 06 Jun 2019 00:00:00 +0000</pubDate>
        <link>https://rubyreferences.github.io/rubychanges//2.5.html</link>
        <guid isPermaLink="true">https://rubyreferences.github.io/rubychanges//2.5.html</guid>
      </item>
    
      <item>
        <title>Ruby 2.6</title>
        <description>&lt;p&gt;&lt;strong&gt;Highlights:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Endless range&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;#then&lt;/code&gt; “piping” method&lt;/li&gt;
  &lt;li&gt;Support for timezones in &lt;code&gt;Time&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;Proc&lt;/code&gt; composition&lt;/li&gt;
  &lt;li&gt;Enumerator chaining&lt;/li&gt;
  &lt;li&gt;&lt;code&gt;RubyVM::AbstractSyntaxTree&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href=&quot;https://rubyreferences.github.io/rubychanges/2.6.html&quot;&gt;Read more »&lt;/a&gt;&lt;/p&gt;
</description>
        <pubDate>Sat, 29 Dec 2018 00:00:00 +0000</pubDate>
        <link>https://rubyreferences.github.io/rubychanges//2.6.html</link>
        <guid isPermaLink="true">https://rubyreferences.github.io/rubychanges//2.6.html</guid>
      </item>
    
      <item>
        <title>Ruby Evolution</title>
        <description></description>
        <pubDate></pubDate>
        <link>https://rubyreferences.github.io/rubychanges//evolution.html</link>
        <guid isPermaLink="true">https://rubyreferences.github.io/rubychanges//evolution.html</guid>
      </item>
    
  </channel>
</rss>