
Ruby 2.1 Released - teeray
http://ftp.ruby-lang.org/pub/ruby/2.1/
======
daGrevis
Please stop posting links to file locations. Announcements or changelogs would
be more useful! If I would like to download it, I'll just use package manager.
Personally, I just want to read what's new.

~~~
teeray
OP here: The announcement hadn't been written at the time I posted this link.
I figured people would rather install it, and when the announcements became
available, I'd add them as comments. They are both posted here if you scroll
down.

~~~
cmelbye
Do that many people install Ruby through a source code package that they
manually download? Why not just hold off on posting until there's useful
information?

~~~
sbarre
Because karma

------
teeray
Official Announcement: [http://www.ruby-
lang.org/en/news/2013/12/25/ruby-2-1-0-is-re...](http://www.ruby-
lang.org/en/news/2013/12/25/ruby-2-1-0-is-released/)

------
thinkbohemian
Now supported on Heroku! [https://devcenter.heroku.com/changelog-
items/376](https://devcenter.heroku.com/changelog-items/376)

------
killercup
Changelog:
[https://github.com/ruby/ruby/blob/v2_1_0/NEWS](https://github.com/ruby/ruby/blob/v2_1_0/NEWS)

------
trustfundbaby
in unofficial benchmarks with Rails (running different rake tasks and
benchmarking them). 2.1.0 seems to be 20% faster than 2.0.0 and 2.0 was about
60/70% faster than 1.9.3 so that would make 2.1.0 about twice as fast as
1.9.3.

~~~
brianhempel
Rails was only about 5-6% faster in the last few nights of development builds
(based on what is installed with rvm reinstall ruby-head). I would be
surprised if the released 2.1.0 is more than one percentage point different
from that.

Pretty graphs here:
[http://www.isrubyfastyet.com/](http://www.isrubyfastyet.com/) (I run a
nightly benchmark.)

I will add 2.1.0 right now and hopefully we will have confirmed data in the
morning.

EDIT: You mention 20% improvement on Rake tasks. Simple Rake tasks are
dominated by Rails' startup time. My benchmark reads about a 15% improvement
in startup time, which agrees with what you are saying.

However, the 1.9 series was a significant step back from 1.8.7 for out-of-the-
box Rails startup time. Ruby 2.0.0 pretty much matched Ruby 1.8.7. Now with
2.1.0, Ruby is finally categorically faster than 1.8.7 for starting Rails.
(Rails itself has also made improvements; but my benchmark has been locked at
Rails 3.1.3)

~~~
VeejayRampay
I find it strange that JRuby would be the worst of all for all 4 categories
though. Startup time I can understand, but given the right conditions, it's
known to be pretty damn fast.

~~~
lobster_johnson
The JVM most likely hasn't been tuned. If I recall correctly it's also a very
old JVM that is being used.

------
whalesalad
Wow best Christmas present ever. Thank you Ruby team!

~~~
mrinterweb
When I woke up to this news, I rushed past the presents straight to my laptop
to install 2.1. Thank you ruby team for the great Christmas present. PS.
Thanks RVM for getting the stable ruby 2.1 ready so fast.

------
mikkelewis
Other than the new generational GC, I'm most excited about String#scrub and
String#freeze.

String#scrub:
[https://github.com/ruby/ruby/blob/1e8a05c1dfee94db9b6b825097...](https://github.com/ruby/ruby/blob/1e8a05c1dfee94db9b6b825097e1d192ad32930a/string.c#L7772)

String#freeze example:

[https://github.com/rails/rails/pull/12879](https://github.com/rails/rails/pull/12879)

~~~
jrochkind1
I am pleased someone else is excited about String#scrub.

For those who need #scrub behavior in ruby 1.9 or 2.0, I wrote a gem a while
ago to do this -- I wrote it before I was aware of the upcoming String#scrub
api -- I'll maybe change it to provide a String#scrub 'backfill' now, with
monkey patching even?

[https://github.com/jrochkind/ensure_valid_encoding](https://github.com/jrochkind/ensure_valid_encoding)

~~~
ibrahima
Oh wow, I actually ran into this recently, I couldn't figure out what to
search for to fix it though. Nice to see that it's built in now.

(It was for a tiny weekend project where I was reading logs from the ZNC IRC
bouncer to present a nice web UI for them, for some reason sometimes there
were invalid characters and I didn't really understand why - possible that I
was just reading them with the wrong input encoding but I think I tried a few
different ones.)

~~~
MrBra
Same here, had the same issues when working on a simple irc client. Basically
what I did to make it work was: read the string with a given encoding(say
UTF8), them check if the read string was a valid string with said encoding (no
invalid characters). If this was the case, that means it found the correct
encoding otherwise loop again and try with another encoding (I used cp1252 as
a second guess), until the resulting string had no invalid characters. Used to
work pretty good and didn't crash anymore when facing "unexpected"
characters... I am curious on whether String#scrub is implemented in a similar
way?

~~~
jrochkind1
String#scrub does not try to identify a proper encoding from a mystery
encoding.

Rather, Strin#scrub simply removes invalid bytes from the input, by default
replacing them with the unicode replacement char � (or simply "?" if not in a
unicode encoding).

This is, for instance, what many editors and other software I've used will do
too -- if you say to open a file in encoding X, and some bytes in it are
invalid for encoding X, they will be replaced with � or ? in display.

I find it a pretty useful thing in my own software, where input is _supposed_
to be a given known encoding, but upstream providers sometimes provide data
with corrupt bytes, errors, or sub-passages in wrong encoding. It's not really
my software's job to come up with the 'real' encoding -- and there may be no
'correct' encoding, often the error is corrupt bytes or mixed encodings -- but
it is my software's job to show what can be shown without raising.

I think I've seen other gems that try to use heuristics to guess or discover
an appropriate encoding for text with no known encoding. But String#scrub is
not that. Here's some gems that say they'll do that (I have no experience with
any of tem):
[https://github.com/brianmario/charlock_holmes](https://github.com/brianmario/charlock_holmes)
; [https://github.com/jmhodges/rchardet](https://github.com/jmhodges/rchardet)
; [https://github.com/janx/chardet2](https://github.com/janx/chardet2)

~~~
MrBra
Thanks for the clarification on #scrub. With regards to guessing a given
encoding, I remember trying some (or probably all) of those gems or those that
were around at the time I was writing the app, but for a reason or another (I
think some were not recently updated) I couldn't get them working so I came up
with my own little solution. Anyway, thanks for taking the time to list them.

------
hackfanatic
Results of a Seige tests to my production API which does a lot of complex
querying and processing, seems to have improved slightly

Ruby 2.0-p353

Transactions: 934 hits Availability: 100.00 % Elapsed time: 76.66 secs Data
transferred: 0.43 MB Response time: 3.19 secs Transaction rate: 12.18
trans/sec Throughput: 0.01 MB/sec Concurrency: 38.92 Successful transactions:
934 Failed transactions: 0 Longest transaction: 3.93 Shortest transaction:
0.67

Ruby 2.1 Transactions: 1136 hits Availability: 100.00 % Elapsed time: 76.41
secs Data transferred: 0.53 MB Response time: 2.64 secs Transaction rate:
14.87 trans/sec Throughput: 0.01 MB/sec Concurrency: 39.30 Successful
transactions: 1136 Failed transactions: 0 Longest transaction: 3.18 Shortest
transaction: 0.56

------
pselbert
Excellent! I've been looking forward to the improved GC. Nice to see they kept
the Cheistmas tradition alive.

------
ksec
Nice, On a Side note Rubinius 2.2.1 was out and i didn't notice they had a 2.2
release at all. Wasn't even a announcement from Rubinius Twitter or any news
on HN either.

Now i am waiting for someone doing some benchmarks with the two ( & JRuby ).

~~~
steveklabnik
Rubinius is releasing so often these days it really just isn't a big deal.

------
lbarrow
I'm super excited about the new GC and profiling tools. I actually feel like I
can't wait to get back to work and try them out =)

------
jamesbritt
Side question: Does anyone know why the svn repo does not include a minor
version number?

    
    
        http://svn.ruby-lang.org/repos/ruby/branches/ruby_2_1/
    
    

while there are branchs such as ruby_1_9_3 and ruby_2_0_0.

~~~
cremno
See “Branching Schema”: [https://www.ruby-
lang.org/en/news/2013/12/21/semantic-versio...](https://www.ruby-
lang.org/en/news/2013/12/21/semantic-versioning-after-2-1-0/)

------
turingbook
Chinese article on the new features with some links to the materials:
[http://geek.csdn.net/news/detail/4112](http://geek.csdn.net/news/detail/4112)

------
amccloud
Has anyone been able to install it with rbenv/ruby-build?

~~~
tmilewski
brew upgrade ruby-build --HEAD && rbenv install -l | grep 2.1.0

~~~
elsurudo
Strange, I only see 2.1.0-dev and 2.1.0-preview1, even after I do this... Any
tips?

EDIT: rbenv-update'='(cd ~/.rbenv/plugins/ruby-build && git pull) did the
trick.

------
ksec
Ok, what next for Ruby 2.2 :P

Merry Xmas.

------
ballard
Unsigned tarballs: Security fail.

~~~
ddebernardy
See here:

[http://www.ruby-lang.org/en/news/2013/12/25/ruby-2-1-0-is-
re...](http://www.ruby-lang.org/en/news/2013/12/25/ruby-2-1-0-is-released/)

~~~
ballard
That's md5 and sha256 hashes, not a gpg signature.

There's a world of difference when something is unsigned because it's
impossible to prove that it was what the developer(s) signed off to release.

------
UNIXgod
2.1.0p0 :001 > x = def foo() puts "hello"; end

=> :foo

2.1.0p0 :002 > def eval_it_now_bitch! lulz

2.1.0p0 :003?> eval lulz.to_s

2.1.0p0 :004?> end

=> :eval_it_now_bitch!

2.1.0p0 :005 > eval_it_now_bitch! x

hello

=> nil

~~~
UNIXgod
I actually thought that the new feature of _def_ yielding the symbolic name of
the newly defined function was interesting, if for anything to open up new
areas where there was a limit before on building lookup tables for macro and
meta programming techniques with either DSL creation and|or basic ruby hacking
for fun.

