Skip to content

Ruby 3.3.0-preview1 Released #3058

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
May 12, 2023
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
5 changes: 5 additions & 0 deletions _data/branches.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,11 @@
# date: date of first stable release (YYYY-MM-DD)
# eol_date: date of EOL (YYYY-MM-DD)

- name: 3.3
status: preview
date:
eol_date:

- name: 3.2
status: normal maintenance
date: 2022-12-25
Expand Down
1 change: 1 addition & 0 deletions _data/downloads.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
# optional
preview:

- 3.3.0-preview1

stable:

Expand Down
31 changes: 31 additions & 0 deletions _data/releases.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,37 @@
# In order to get the release listed on the downloads page,
# you also need to add an entry to `_data/downloads.yml'.

# 3.3 series

- version: 3.3.0-preview1
date: 2023-05-12
post: /en/news/2023/05/12/ruby-3-3-0-preview1-released/
tag: v3_3_0_preview1
stats:
files_changed: 1922
insertions: 75283
deletions: 44896
url:
gz: https://cache.ruby-lang.org/pub/ruby/3.3/ruby-3.3.0-preview1.tar.gz
zip: https://cache.ruby-lang.org/pub/ruby/3.3/ruby-3.3.0-preview1.zip
xz: https://cache.ruby-lang.org/pub/ruby/3.3/ruby-3.3.0-preview1.tar.xz
size:
gz: 20428213
zip: 24846962
xz: 15074600
sha1:
gz: 5445eec1cd9ddb44e03e74568cac94209c91b42d
zip: 31774fa653c54107b6afc30adda3a0350d8f41d2
xz: 4c22ebca287c87811e1050bf4d59b7d32255b212
sha256:
gz: c3454a911779b8d747ab0ea87041030d002d533edacb2485fe558b7084da25ed
zip: 6ecafecf83f2cacf446b2326012f2b6ee1a0614d8dd29bb1fb3f105c27e2c553
xz: ae300b49e06c13087dd163b97eddd38db895dc8e0c9904284119795d75303fbb
sha512:
gz: 0f891f140ddc6372aa7c4459f8784126e0c341db7b80e72c51e441c5153c43c2d7b965f7807c076862ac84b9b8b0c6a66bbf66fc341746016151397bb21c782a
zip: 794bef847fefbbdbbdced85975a00c9289ef6464810408af3f0f2055052d6b5ef5576dbd41e0d87bb73f1ad276d8e27c36018610f8e2b9936828c0e692f611f0
xz: 46c1134dba5810847f7f6b4298900a91f5225679d7873548b271f4ef2ad1dc168722562a2e468a2ccf136314176ee613d8c7792fd4411a3f7a44c80b93b417ee

# 3.2 series

- version: 3.2.2
Expand Down
169 changes: 169 additions & 0 deletions en/news/_posts/2023-05-12-ruby-3-3-0-preview1-released.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,169 @@
---
layout: news_post
title: "Ruby 3.3.0-preview1 Released"
author: "naruse"
translator:
date: 2023-05-12 00:00:00 +0000
lang: en
---

{% assign release = site.data.releases | where: "version", "3.3.0-preview1" | first %}

We are pleased to announce the release of Ruby {{ release.version }}. Ruby 3.3 adds a new pure-Ruby JIT compiler named RJIT, uses lrama as a parser generator, and many performance improvements especially YJIT.

## RJIT

* Introduced a pure-Ruby JIT compiler RJIT and replaced MJIT.
* RJIT supports only x86\_64 architecture on Unix platforms.
* Unlike MJIT, it doesn't require a C compiler at runtime.
* RJIT exists only for experimental purposes.
* You should keep using YJIT in production.
* If you are interested in developing JIT for Ruby, please check out [k0kubun's presentation on Day 3 of RubyKaigi](https://rubykaigi.org/2023/presentations/k0kubun.html#day3).

## Use Lrama instead of Bison

* Replace Bison with [Lrama LALR parser generator](https://github.com/yui-knk/lrama) [Feature #19637]
* If you have interest, please see [The future vision of Ruby Parser](https://rubykaigi.org/2023/presentations/spikeolaf.html)

## YJIT

* Significant performance improvements over 3.2
* Splat and rest arguments support has been improved.
* Registers are allocated for stack operations of the virtual machine.
* More calls with optional arguments are compiled.
* `Integer#!=`, `String#!=`, `Kernel#block_given?`, `Kernel#is_a?`,
`Kernel#instance_of?`, `Module#===` are specially optimized.
* Instance variables no longer exit to the interpreter
with megamorphic Object Shapes.
* Metadata for compiled code uses a lot less memory.
* Improved code generation on ARM64
* Option to start YJIT in paused mode and then later enable it manually
* `--yjit-pause` and `RubyVM::YJIT.resume`
* This can be used to enable YJIT only once your application is done booting
* Exit tracing option now supports sampling
* `--trace-exits-sample-rate=N`
* Multiple bug fixes



## Other Notable New Features

### Language



## Performance improvements

* `defined?(@ivar)` is optimized with Object Shapes.

## Other notable changes since 3.2



## Compatibility issues

Note: Excluding feature bug fixes.

### Removed constants

The following deprecated constants are removed.



### Removed methods

The following deprecated methods are removed.



## Stdlib compatibility issues

### `ext/readline` is retired

* We have `reline` that is pure Ruby implementation compatible with `ext/readline` API. We rely on `reline` in the future. If you need to use `ext/readline`, you can install `ext/readline` via rubygems.org with `gem install readline-ext`.
* We no longer need to install libraries like `libreadline` or `libedit`.

## C API updates

### Updated C APIs

The following APIs are updated.



### Removed C APIs

The following deprecated APIs are removed.



## Standard library updates



The following default gems are updated.

* RubyGems 3.5.0.dev
* bigdecimal 3.1.4
* bundler 2.5.0.dev
* csv 3.2.7
* fiddle 1.1.2
* fileutils 1.7.1
* irb 1.6.4
* optparse 0.4.0.pre.1
* psych 5.1.0
* reline 0.3.3
* stringio 3.0.7
* strscan 3.0.7
* syntax_suggest 1.0.4
* time 0.2.2
* timeout 0.3.2
* uri 0.12.1

The following bundled gems are updated.

* minitest 5.18.0
* rbs 3.1.0
* typeprof 0.21.7
* debug 1.8.0

See GitHub releases like [Logger](https://github.com/ruby/logger/releases) or
changelog for details of the default gems or bundled gems.

See [NEWS](https://github.com/ruby/ruby/blob/{{ release.tag }}/NEWS.md)
or [commit logs](https://github.com/ruby/ruby/compare/v3_2_0...{{ release.tag }})
for more details.

With those changes, [{{ release.stats.files_changed }} files changed, {{ release.stats.insertions }} insertions(+), {{ release.stats.deletions }} deletions(-)](https://github.com/ruby/ruby/compare/v3_2_0...{{ release.tag }}#file_bucket)
since Ruby 3.2.0!

Merry Christmas, Happy Holidays, and enjoy programming with Ruby 3.3!

## Download

* <{{ release.url.gz }}>

SIZE: {{ release.size.gz }}
SHA1: {{ release.sha1.gz }}
SHA256: {{ release.sha256.gz }}
SHA512: {{ release.sha512.gz }}

* <{{ release.url.xz }}>

SIZE: {{ release.size.xz }}
SHA1: {{ release.sha1.xz }}
SHA256: {{ release.sha256.xz }}
SHA512: {{ release.sha512.xz }}

* <{{ release.url.zip }}>

SIZE: {{ release.size.zip }}
SHA1: {{ release.sha1.zip }}
SHA256: {{ release.sha256.zip }}
SHA512: {{ release.sha512.zip }}

## What is Ruby

Ruby was first developed by Matz (Yukihiro Matsumoto) in 1993,
and is now developed as Open Source. It runs on multiple platforms
and is used all over the world especially for web development.
157 changes: 157 additions & 0 deletions ja/news/_posts/2023-05-12-ruby-3-3-0-preview1-released.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,157 @@
---
layout: news_post
title: "Ruby 3.3.0-preview1 リリース"
author: "naruse"
translator:
date: 2023-05-12 00:00:00 +0000
lang: ja
---

Ruby 3.3.0-preview1 が公開されました。Ruby 3.3ではRJITという新たなJITの仕組みを追加するとともに、YJITの高速化など様々な改善が行われています。

{% assign release = site.data.releases | where: "version", "3.3.0-preview1" | first %}

## RJIT

* Introduced a pure-Ruby JIT compiler RJIT and replaced MJIT.
* RJIT supports only x86\_64 architecture on Unix platforms.
* Unlike MJIT, it doesn't require a C compiler at runtime.
* RJIT exists only for experimental purposes.
* You should keep using YJIT in production.
* If you are interested in developing JIT for Ruby, please check out [k0kubun's presentation on Day 3 of RubyKaigi](https://rubykaigi.org/2023/presentations/k0kubun.html#day3).

## Use Lrama instead of Bison

* Replace Bison with [Lrama LALR parser generator](https://github.com/yui-knk/lrama) [Feature #19637]
* If you have interest, please see [The future vision of Ruby Parser](https://rubykaigi.org/2023/presentations/spikeolaf.html)
* See also: [Ruby Parser開発日誌 (5) - Lrama LALR (1) parser generatorを実装した](https://yui-knk.hatenablog.com/entry/2023/03/13/101951)


## YJIT

* Significant performance improvements over 3.2
* Splat and rest arguments support has been improved.
* Registers are allocated for stack operations of the virtual machine.
* More calls with optional arguments are compiled.
* `Integer#!=`, `String#!=`, `Kernel#block_given?`, `Kernel#is_a?`,
`Kernel#instance_of?`, `Module#===` are specially optimized.
* Instance variables no longer exit to the interpreter
with megamorphic Object Shapes.
* Metadata for compiled code uses a lot less memory.
* Improved code generation on ARM64
* Option to start YJIT in paused mode and then later enable it manually
* `--yjit-pause` and `RubyVM::YJIT.resume`
* This can be used to enable YJIT only once your application is done booting
* Exit tracing option now supports sampling
* `--trace-exits-sample-rate=N`
* Multiple bug fixes

*

## その他の主要な新機能

### 言語機能


## パフォーマンスの改善

## その他の注目すべき 3.2 からの変更点

## 互換性に関する変更

### 定数の削除

以下の非推奨定数は削除されました



### メソッドの削除

以下の非推奨のメソッドは削除されました


## 標準添付ライブラリの互換性に関する変更

### `ext/readline` の削除

* 今後は Ruby で書かれた GNU Readline の互換ライブラリである `reline` をすべての環境で標準で利用し、`ext/readline` は削除されました。以前の `ext/readline` が必要なユーザーは `gem install readline-ext` でインストールすることができます。
* この変更により、Ruby のインストール時に `libreadline` や `libedit` などのライブラリのインストールは不要となります。

## C API の変更

### C API の更新

以下の API が更新されました

### C API の削除

以下の非推奨の API は削除されました


## 標準添付ライブラリのアップデート



* 以下の default gems のバージョンがアップデートされました。

* RubyGems 3.5.0.dev
* bigdecimal 3.1.4
* bundler 2.5.0.dev
* csv 3.2.7
* fiddle 1.1.2
* fileutils 1.7.1
* irb 1.6.4
* optparse 0.4.0.pre.1
* psych 5.1.0
* reline 0.3.3
* stringio 3.0.7
* strscan 3.0.7
* syntax_suggest 1.0.4
* time 0.2.2
* timeout 0.3.2
* uri 0.12.1

* 以下の bundled gems のバージョンがアップデートされました。

* minitest 5.18.0
* rbs 3.1.0
* typeprof 0.21.7
* debug 1.8.0



default gems と bundled gems の詳細については [Logger の GitHub Releases](https://github.com/ruby/logger/releases) のような GitHub releases または changelog ファイルを参照してください。


その他詳細については、[NEWS](https://github.com/ruby/ruby/blob/{{ release.tag }}/NEWS.md) ファイルまたは[コミットログ](https://github.com/ruby/ruby/compare/v3_2_0...{{ release.tag }})を参照してください。

なお、こうした変更により、Ruby 3.2.0 以降では [{{ release.stats.files_changed }} 個のファイルに変更が加えられ、{{ release.stats.insertions }} 行の追加と {{ release.stats.deletions }} 行の削除が行われました](https://github.com/ruby/ruby/compare/v3_2_0...{{ release.tag }}#file_bucket) !

メリークリスマス、Ruby 3.3 とともによいお年をお迎えください!

## ダウンロード

* <{{ release.url.gz }}>

SIZE: {{ release.size.gz }}
SHA1: {{ release.sha1.gz }}
SHA256: {{ release.sha256.gz }}
SHA512: {{ release.sha512.gz }}

* <{{ release.url.xz }}>

SIZE: {{ release.size.xz }}
SHA1: {{ release.sha1.xz }}
SHA256: {{ release.sha256.xz }}
SHA512: {{ release.sha512.xz }}

* <{{ release.url.zip }}>

SIZE: {{ release.size.zip }}
SHA1: {{ release.sha1.zip }}
SHA256: {{ release.sha256.zip }}
SHA512: {{ release.sha512.zip }}

## Ruby とは

Rubyはまつもとゆきひろ (Matz) によって1993年に開発が始められ、今もオープンソースソフトウェアとして開発が続けられています。Rubyは様々なプラットフォームで動き、世界中で、特にWebアプリケーション開発のために使われています。