Skip to content

Commit 4b65379

Browse files
authored
Merge pull request #1926 from nurse/ruby-2-6-0-released
Ruby 2.6.0 Released
2 parents df17fd6 + 0f57434 commit 4b65379

File tree

5 files changed

+297
-3
lines changed

5 files changed

+297
-3
lines changed

_data/branches.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@
99
# eol_date: date of EOL (YYYY-MM-DD)
1010

1111
- name: 2.6
12-
status: preview
13-
date:
12+
status: normal maintenance
13+
status: 2018-12-25
1414
eol_date:
1515

1616
- name: 2.5

_data/downloads.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44
# optional
55
preview:
66

7-
- 2.6.0-rc2
87

98
stable:
109

10+
- 2.6.0
1111
- 2.5.3
1212
- 2.4.5
1313

_data/releases.yml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,20 @@
2121

2222
# 2.6 series
2323

24+
- version: 2.6.0
25+
date: 2018-12-25
26+
post: /en/news/2018/12/25/ruby-2-6-0-released/
27+
url:
28+
gz: https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0.tar.gz
29+
zip: https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0.zip
30+
bz2: https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0.tar.bz2
31+
xz: https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0.tar.xz
32+
sha256:
33+
gz: f3c35b924a11c88ff111f0956ded3cdc12c90c04b72b266ac61076d3697fc072
34+
zip: 8a4fb6ca58202495c9682cb88effd804398bd0ef023e3e36f001ca88d8b5855a
35+
bz2: c89ca663ad9a6238f4b1ec4d04c7dff630560c6e6eca6d30857c4d394f01a599
36+
xz: acb00f04374899ba8ee74bbbcb9b35c5c6b1fd229f1876554ee76f0f1710ff5f
37+
2438
- version: 2.6.0-rc2
2539
date: 2018-12-15
2640
post: /en/news/2018/12/15/ruby-2-6-0-rc2-released/
Lines changed: 143 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
---
2+
layout: news_post
3+
title: "Ruby 2.6.0 Released"
4+
author: "naruse"
5+
translator:
6+
date: 2018-12-25 00:00:00 +0000
7+
lang: en
8+
---
9+
10+
We are pleased to announce the release of Ruby 2.6.0.
11+
12+
It introduces a number of new features and performance improvements, most notably:
13+
14+
* A new JIT compiler.
15+
* The `RubyVM::AbstractSyntaxTree` module.
16+
17+
## JIT [Experimental]
18+
19+
Ruby 2.6 introduces an initial implementation of a JIT (Just-In-Time) compiler.
20+
21+
The JIT compiler aims to improve the performance of Ruby programs. Unlike traditional JIT compilers which operate in-process, Ruby's JIT compiler writes out C code to disk and spawns a common C compiler to generate native code. For more details about it, see the [MJIT organization by Vladimir Makarov](https://bugs.ruby-lang.org/projects/ruby/wiki/MJIT#MJIT-organization).
22+
23+
In order to enable the JIT compiler, specify `--jit` on the command line or in the `$RUBYOPT` environment variable. Specifying `--jit-verbose=1` will cause the JIT compiler to print additional information. Read the output of `ruby --help` or [the documentation](https://bugs.ruby-lang.org/projects/ruby/wiki/MJIT#Basic-usage) for other options.
24+
25+
The JIT compiler is supported when Ruby is built by GCC, Clang, or Microsoft VC++, which needs to be available at runtime.
26+
27+
As of Ruby 2.6.0, we have achieved [1.7x faster performance](https://gist.github.com/k0kubun/d7f54d96f8e501bbbc78b927640f4208) compared to Ruby 2.5 on a CPU-intensive, non-trivial benchmark called [Optcarrot](https://github.com/mame/optcarrot). However, it is still experimental and many other memory-intensive workloads like Rails might not benefit from it at the moment. For more details, see [Ruby 2.6 JIT - Progress and Future](https://medium.com/@k0kubun/ruby-2-6-jit-progress-and-future-84e0a830ecbf).
28+
29+
Stay tuned for the new age of Ruby's performance.
30+
31+
## `RubyVM::AbstractSyntaxTree` [Experimental]
32+
33+
Ruby 2.6 introduces the `RubyVM::AbstractSyntaxTree` module. **Future compatibility of this module is not guaranteed**.
34+
35+
This module has a `parse` method, which parses the given string as Ruby code and returns the AST (Abstract Syntax Tree) nodes of the code. The `parse_file` method opens and parses the given file as Ruby code and returns AST nodes.
36+
37+
The `RubyVM::AbstractSyntaxTree::Node` class is also introduced. You can get source location and children nodes from `Node` objects. This feature is experimental.
38+
39+
## Other Notable New Features
40+
41+
* Add an alias of `Kernel#yield_self` named `#then`. [[Feature #14594]](https://bugs.ruby-lang.org/issues/14594)
42+
43+
* Constant names may start with a non-ASCII capital letter. [[Feature #13770]](https://bugs.ruby-lang.org/issues/13770)
44+
45+
* Introduce endless ranges. [[Feature #12912]](https://bugs.ruby-lang.org/issues/12912)
46+
47+
An endless range, `(1..)`, works as if it has no end. Here are some typical use cases:
48+
49+
ary[1..] # identical to ary[1..-1] without magical -1
50+
(1..).each {|index| ... } # enumerates values starting from index 1
51+
ary.zip(1..) {|elem, index| ... } # ary.each.with_index(1) { ... }
52+
53+
* Add `Enumerable#chain` and `Enumerator#+` [[Feature #15144]](https://bugs.ruby-lang.org/issues/15144)
54+
55+
* Add function composition operators `<<` and `>>` to `Proc` and `Method`. [[Feature #6284]](https://bugs.ruby-lang.org/issues/6284)
56+
57+
f = proc{|x| x + 2}
58+
g = proc{|x| x * 3}
59+
(f << g).call(3) # -> 11; identical to f(g(3))
60+
(f >> g).call(3) # -> 15; identical to g(f(3))
61+
62+
* Add `Binding#source_location`. [[Feature #14230]](https://bugs.ruby-lang.org/issues/14230)
63+
64+
This method returns the source location of the binding, a 2-element array of `__FILE__` and `__LINE__`. Technically speaking, this is identical to `eval("[__FILE__, __LINE__]", binding)`. However, we are planning to change this behavior so that `Kernel#eval` ignores binding's source location [[Bug #4352]](https://bugs.ruby-lang.org/issues/4352). As such, it is recommended to use `Binding#source_location` instead of `Kernel#eval`.
65+
66+
* Add an `exception:` option to `Kernel#system` which causes it to raise an exception on failure instead of returning `false`. [[Feature #14386]](https://bugs.ruby-lang.org/issues/14386)
67+
68+
* Add a oneshot mode to `Coverage` [[Feature#15022]](https://bugs.ruby-lang.org/issues/15022)
69+
70+
* This mode checks "whether each line was executed at least once or not", instead of "how many times each line was executed". A hook for each line is fired only once, and once it is fired the hook flag will be removed, i.e., it runs with zero overhead.
71+
* Add `oneshot_lines:` keyword argument to Coverage.start.
72+
* Add `stop:` and `clear:` keyword arguments to Coverage.result. If `clear` is true, it clears the counters to zero. If `stop` is true, it disables coverage measurement.
73+
* Coverage.line_stub is a simple helper function that creates the "stub" of line coverage from a given source code.
74+
75+
* Add `FileUtils#cp_lr`. It works just like cp_r but links instead of copies. [[Feature #4189]](https://bugs.ruby-lang.org/issues/4189)
76+
77+
## Performance improvements
78+
79+
* Speed up `Proc#call` by removing the temporary allocation for `$SAFE`.
80+
[[Feature #14318]](https://bugs.ruby-lang.org/issues/14318)
81+
82+
We have observed a 1.4x peformance improvement in the `lc_fizzbuzz` benchmark that calls `Proc#call` numerous times. [[Bug #10212]](https://bugs.ruby-lang.org/issues/10212)
83+
84+
* Speed up `block.call` when `block` is passed in as a block parameter. [[Feature #14330]](https://bugs.ruby-lang.org/issues/14330)
85+
86+
Combined with improvements around block handling introduced in Ruby 2.5, block evaluation now performs 2.6x faster in a micro-benchmark in Ruby 2.6. [[Feature #14045]](https://bugs.ruby-lang.org/issues/14045)
87+
88+
* Transient Heap (`theap`) is introduced. [[Bug #14858]](https://bugs.ruby-lang.org/issues/14858) [[Feature #14989]](https://bugs.ruby-lang.org/issues/14989)
89+
90+
`theap` is managed heap for short-living memory objects which are pointed by specific classes (`Array`, `Hash`, `Object`, and `Struct`). Making small and short-living Hash object is 2x faster. With rdoc benchmark, we observed 6-7% performance improvement.
91+
92+
* Native implementations (`arm32`, `arm64`, `ppc64le`, `win32`, `win64`, `x86`, `amd64`) of coroutines to improve context switching performance of Fiber significantly. [[Feature #14739]](https://bugs.ruby-lang.org/issues/14739)
93+
94+
`Fiber.yield` and `Fiber#resume` is about 5x faster on 64-bit Linux. Fiber intensive programs can expect up to 5% improvement overall.
95+
96+
## Other notable changes since 2.5
97+
98+
* `$SAFE` is now a process global state and it can be set back to `0`. [[Feature #14250]](https://bugs.ruby-lang.org/issues/14250)
99+
100+
* Passing `safe_level` to `ERB.new` is deprecated. `trim_mode` and `eoutvar` arguments have been changed to keyword arguments. [[Feature #14256]](https://bugs.ruby-lang.org/issues/14256)
101+
102+
* Unicode support is updated to version 11. We have plans to add support Unicode version 12 and 12.1 in a future TEENY release of Ruby 2.6. This will include support for the [new Japenese era](http://blog.unicode.org/2018/09/new-japanese-era.html).
103+
104+
* Merge RubyGems 3.0.1. The `--ri` and `--rdoc` options have been removed. Please use `--document` and `--no-document` options instead.
105+
106+
* [Bundler](https://github.com/bundler/bundler) is now installed as a default gem.
107+
108+
* In exception handling blocks, `else` without `rescue` now causes a syntax error. [EXPERIMENTAL][[Feature #14606]](https://bugs.ruby-lang.org/issues/14606)
109+
110+
See [NEWS](https://github.com/ruby/ruby/blob/v2_6_0/NEWS) or [commit logs](https://github.com/ruby/ruby/compare/v2_5_0...v2_6_0) for more details.
111+
112+
With those changes, [6437 files changed, 231471 insertions(+), 98498 deletions(-)](https://github.com/ruby/ruby/compare/v2_5_0...v2_6_0) since Ruby 2.5.0!
113+
114+
Merry Christmas, Happy Holidays, and enjoy programming with Ruby 2.6!
115+
116+
## Download
117+
118+
* <https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0.tar.gz>
119+
120+
SIZE: 16687800 bytes
121+
SHA1: c95f4e86e21390270dad3ebb94491fd42ee2ce69
122+
SHA256: f3c35b924a11c88ff111f0956ded3cdc12c90c04b72b266ac61076d3697fc072
123+
SHA512: 01f886b0c0782a06315c4a46414e9f2b66ee634ba4349c8e0697f511793ae3c56d2ad3cad6563f2b0fdced
124+
f0ff3eba51b9afab907e7e1ac243475772f8688382
125+
* <https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0.zip>
126+
127+
SIZE: 20582054 bytes
128+
SHA1: a804e63d18da12107e1d101918a3d8f4c5462a27
129+
SHA256: 8a4fb6ca58202495c9682cb88effd804398bd0ef023e3e36f001ca88d8b5855a
130+
SHA512: 16d66ec4a2c6a2e928d5b50e094a5efa481ac6e4d5ed77459d351ef19fe692aa59b68307e3e25229eec5f3
131+
0ae2f9adae2663bafe9c9d44bfb45d3833d77839d4
132+
* <https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0.tar.bz2>
133+
134+
SIZE: 14585856 bytes
135+
SHA1: b8638eb806efbf7b6af87b24ccc6ad915f262318
136+
SHA256: c89ca663ad9a6238f4b1ec4d04c7dff630560c6e6eca6d30857c4d394f01a599
137+
SHA512: ca3daf9acf11d3db2900af21b66231bd1f025427a9d2212b35f6137ca03f77f57171ddfdb99022c8c8bcd730ff92a7a4af54e8a2a770a67d8e16c5807aa391f1
138+
* <https://cache.ruby-lang.org/pub/ruby/2.6/ruby-2.6.0.tar.xz>
139+
140+
SIZE: 11918536 bytes
141+
SHA1: 9ddaeba3505d2855460c8c653159fc0ac8928c0f
142+
SHA256: acb00f04374899ba8ee74bbbcb9b35c5c6b1fd229f1876554ee76f0f1710ff5f
143+
SHA512: c56eaf85ef7b79deb34ee4590b143c07f4fc83eb79775290761aee5a7c63374659613538a41f25706ed6e19e49d5c67a1014c24d17f29948294c7abd0b0fcea8

0 commit comments

Comments
 (0)