ruby-core@ruby-lang.org archive (unofficial mirror)
 help / color / mirror / Atom feed
From: colin@invoca.com
To: ruby-core@ruby-lang.org
Subject: [ruby-core:71812] [Ruby trunk - Bug #11759] URI breaks with frozen strings
Date: Thu, 03 Dec 2015 05:20:10 +0000	[thread overview]
Message-ID: <redmine.journal-55216.20151203052009.a5e0fe7c1b5704b6@ruby-lang.org> (raw)
In-Reply-To: redmine.issue-11759.20151202000114@ruby-lang.org

Issue #11759 has been updated by Colin Kelley.


> Yes, but I prefer to avoid String.new because the constant lookup
> requires an inline cache lookup + storage entry in the iseq.

Compared to the surrounding code in the full method, would the extra constant lookup make a measurable difference in code size?

> But maybe String.new is slightly faster; but I normally
> prefer smaller code unless something is called in a tight loop.

If it's the same speed or faster, I would vote for `String.new` because to me it makes the intention the most clear. This seems ugly:

~~~
''.freeze.dup
~~~

because the `.freeze` is temporary for Ruby 2.1 and 2.2, right?  When would this copy of generic.rb ever be run with Ruby versions earlier than 2.3?  Assuming it will just be used for Ruby 2.3 and later, the magic comment included in the patch will implicitly freeze the string literal.  Hence this would also be sufficient (and in my opinion, nearly as clear in intention as `String.new`):

~~~
''.dup
~~~

----------------------------------------
Bug #11759: URI breaks with frozen strings
https://bugs.ruby-lang.org/issues/11759#change-55216

* Author: Mike Perham
* Status: Open
* Priority: Normal
* Assignee: 
* ruby -v: 2.3.0-preview1
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN
----------------------------------------
It appears URI uses String mutation and breaks frozen string mode.

~~~
$ RUBYOPT="--enable-frozen-string-literal" bundle exec rake
/Users/mike/.rubies/ruby-2.3.0-preview1/lib/ruby/2.3.0/uri/generic.rb:1344:in `to_s': can't modify frozen String (RuntimeError)
/Users/mike/.gem/ruby/2.3.0/gems/bundler-1.10.6/lib/bundler/source/rubygems.rb:257:in `normalize_uri'
/Users/mike/.gem/ruby/2.3.0/gems/bundler-1.10.6/lib/bundler/source/rubygems.rb:198:in `add_remote'
/Users/mike/.gem/ruby/2.3.0/gems/bundler-1.10.6/lib/bundler/source/rubygems.rb:25:in `block in initialize'
/Users/mike/.gem/ruby/2.3.0/gems/bundler-1.10.6/lib/bundler/source/rubygems.rb:25:in `reverse_each'
/Users/mike/.gem/ruby/2.3.0/gems/bundler-1.10.6/lib/bundler/source/rubygems.rb:25:in `initialize'
~~~

---Files--------------------------------
0001-Do-not-mutate-strings-in-URI-to_s.patch (1.76 KB)
11759.patch (610 Bytes)


-- 
https://bugs.ruby-lang.org/

  parent reply	other threads:[~2015-12-03  4:48 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <redmine.issue-11759.20151202000114@ruby-lang.org>
2015-12-02  0:01 ` [ruby-core:71785] [Ruby trunk - Bug #11759] [Open] URI breaks with frozen strings mperham
2015-12-02  1:18 ` [ruby-core:71786] [Ruby trunk - Bug #11759] " me
2015-12-02  1:30 ` [ruby-core:71787] " me
2015-12-02  1:47   ` [ruby-core:71788] " Eric Wong
2015-12-02  3:56 ` [ruby-core:71790] " me
2015-12-02  4:10 ` [ruby-core:71791] " akr
2015-12-02  7:11 ` [ruby-core:71797] " colin
2015-12-02 21:36   ` [ruby-core:71804] " Eric Wong
2015-12-03  5:20 ` colin [this message]
2015-12-03 23:41   ` [ruby-core:71820] " Eric Wong
2015-12-05 16:20 ` [ruby-core:71846] " colin
2015-12-07  7:19 ` [ruby-core:71879] " matz
2015-12-07 15:59 ` [ruby-core:71910] " colin
2015-12-08 21:35   ` [ruby-core:71957] " Eric Wong

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.ruby-lang.org/en/community/mailing-lists/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=redmine.journal-55216.20151203052009.a5e0fe7c1b5704b6@ruby-lang.org \
    --to=ruby-core@ruby-lang.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).