[#51792] [ruby-trunk - Bug #7768][Open] Inherited Array class missing — "england (Roman Ivanilov)" <englandpost@...>

14 messages 2013/02/01

[#51834] [ruby-trunk - Bug #7780][Open] Marshal & YAML should deserialize only basic types by default. — "marcandre (Marc-Andre Lafortune)" <ruby-core@...>

19 messages 2013/02/04

[#51897] [ruby-trunk - Feature #7791][Open] Let symbols be garbage collected — "rosenfeld (Rodrigo Rosenfeld Rosas)" <rr.rosas@...>

64 messages 2013/02/06
[#51899] [ruby-trunk - Feature #7791][Feedback] Let symbols be garbage collected — "shyouhei (Shyouhei Urabe)" <shyouhei@...> 2013/02/06

[#51909] Re: [ruby-trunk - Feature #7791][Feedback] Let symbols be garbage collected — SASADA Koichi <ko1@...> 2013/02/06

(2013/02/06 22:50), shyouhei (Shyouhei Urabe) wrote:

[#51898] [ruby-trunk - Feature #7792][Open] Make symbols and strings the same thing — "rosenfeld (Rodrigo Rosenfeld Rosas)" <rr.rosas@...>

86 messages 2013/02/06
[#51914] [ruby-trunk - Feature #7792] Make symbols and strings the same thing — "rosenfeld (Rodrigo Rosenfeld Rosas)" <rr.rosas@...> 2013/02/06

[#51916] Re: [ruby-trunk - Feature #7792] Make symbols and strings the same thing — Yorick Peterse <yorickpeterse@...> 2013/02/06

You don't need to hijack any code for it, you'd just use it as

[#51933] [ruby-trunk - Feature #7793][Open] New methods on Hash — "dsisnero (Dominic Sisneros)" <dsisnero@...>

20 messages 2013/02/06

[#51965] [ruby-trunk - Feature #7795][Open] Symbol.defined? and/or to_existing_symbol — "Student (Nathan Zook)" <blogger@...>

13 messages 2013/02/07

[#51977] [ruby-trunk - Feature #7797][Open] Hash should be renamed to StrictHash and a new Hash should be created to behave like AS HashWithIndifferentAccess — "rosenfeld (Rodrigo Rosenfeld Rosas)" <rr.rosas@...>

22 messages 2013/02/07

[#52042] [ruby-trunk - Bug #7805][Open] ruby 2.0rc2 core on solaris — "groenveld@... (John Groenveld)" <groenveld@...>

23 messages 2013/02/08

[#52049] [ruby-trunk - Bug #7807][Open] [PATCH] Remove duplicated load paths when empty version string is configured — "vo.x (Vit Ondruch)" <v.ondruch@...>

9 messages 2013/02/08

[#52075] [ruby-trunk - Feature #7816][Open] Don't invalidate method caches when defining a new method on a class without subclasses — "charliesome (Charlie Somerville)" <charlie@...>

17 messages 2013/02/09

[#52077] [ruby-trunk - Bug #7817][Open] (Unable to compile Ruby 2.0.0-rc2 on OSX (clang version 2.1) — "injekt (Lee Jarvis)" <ljjarvis@...>

10 messages 2013/02/09

[#52087] [ruby-trunk - Bug #7820][Assigned] Let's decide Ruby 2.0 supported platform list — "mame (Yusuke Endoh)" <mame@...>

15 messages 2013/02/10

[#52130] [ruby-trunk - Bug #7829][Open] Rounding error in Ruby Time — "loirotte (Philippe Dosch)" <loirotte@...>

25 messages 2013/02/11
[#52579] [ruby-trunk - Bug #7829] Rounding error in Ruby Time — "loirotte (Philippe Dosch)" <loirotte@...> 2013/02/20

[#52586] Re: [ruby-trunk - Bug #7829] Rounding error in Ruby Time — David MacMahon <davidm@...> 2013/02/20

[#52131] [ruby-trunk - Bug #7830][Open] Ruby packages should not build with -Werror when distributed — "kremenek (Ted Kremenek)" <kremenek@...>

21 messages 2013/02/11

[#52134] [ruby-trunk - Bug #7831][Open] Net::HTTP does not allow users to handle Content-Encoding in responses like 1.x — "drbrain (Eric Hodel)" <drbrain@...7.net>

10 messages 2013/02/11

[#52160] [ruby-trunk - Feature #7836][Open] Need a way to get Method and UnboundMethod objects to methods overridden by prepended modules — "banister (john mair)" <jrmair@...>

12 messages 2013/02/12

[#52165] [ruby-trunk - Feature #7839][Open] Symbol.freeze_symbols — "tenderlovemaking (Aaron Patterson)" <aaron@...>

23 messages 2013/02/12

[#52206] [ruby-trunk - Bug #7842][Assigned] An alias of a "prepend"ed method skips the original method when calling super — "mame (Yusuke Endoh)" <mame@...>

15 messages 2013/02/13

[#52215] [ruby-trunk - Bug #7845][Open] Strip doesn't handle unicode space characters in ruby 1.9.2 & 1.9.3 (does in 1.9.1) — "timothyg56 (Timothy Garnett)" <timothyg@...>

18 messages 2013/02/13

[#52267] [ruby-trunk - Feature #7854][Open] New method Symbol[string] — "Student (Nathan Zook)" <blogger@...>

22 messages 2013/02/14

[#52296] [ruby-trunk - Bug #7860][Open] Passing --libdir to ./configure causes Gem.ruby to point to an incorrect ruby interpreter path — "cwgem (Chris White)" <cwprogram@...>

11 messages 2013/02/15

[#52395] [ruby-trunk - Bug #7874][Open] multiarch support enhancements — "terceiro (Antonio Terceiro)" <terceiro@...>

16 messages 2013/02/17

[#52513] [ruby-trunk - Feature #7882][Open] Allow rescue/else/ensure in do..end — "charliesome (Charlie Somerville)" <charlie@...>

11 messages 2013/02/19

[#52514] [ruby-trunk - Feature #7883][Open] Add Regex#to_proc — "rklemme (Robert Klemme)" <shortcutter@...>

15 messages 2013/02/19

[#52537] [ruby-trunk - Bug #7886][Open] Not recognizing unix group permissions for Mac OS X (Mountain Lion) Active Directory (AD) mobile accounts — "afazio (Alfred Fazio)" <alfred.fazio@...>

12 messages 2013/02/19

[#52596] [CommonRuby - Feature #7895][Open] Exception#backtrace_locations to go with Thread#backtrace_locations and Kernel#caller_locations — "headius (Charles Nutter)" <headius@...>

18 messages 2013/02/20

[#52614] [ruby-trunk - Bug #7897][Open] rubygems 2.0 has an incompatibility about installation of extension libraries if gem package does not contain lib directory — "mrkn (Kenta Murata)" <muraken@...>

8 messages 2013/02/21

[#52727] [ruby-trunk - Feature #7918][Open] Create Signal.in_trap?() — "kosaki (Motohiro KOSAKI)" <kosaki.motohiro@...>

10 messages 2013/02/23

[#52742] [ruby-trunk - Bug #7921][Assigned] Cross-compiling ruby_2_0_0 to Windows is failing (rb_w32_pow) — "luislavena (Luis Lavena)" <luislavena@...>

19 messages 2013/02/23

[#52875] [ruby-trunk - Bug #7956][Open] Install fail with RVM — Sega100500 (Сергей Е) <Sergey.V.Ezhov@...>

14 messages 2013/02/25

[#52877] Any documentation about debugging in Ruby 2.0.0 — Rodrigo Rosenfeld Rosas <rr.rosas@...>

Hi, I couldn't find how to debug Ruby 2.0.0 programs, but only a few

14 messages 2013/02/25
[#52880] Re: Any documentation about debugging in Ruby 2.0.0 — Jeremy Kemper <jeremy@...> 2013/02/25

On Monday, February 25, 2013, Rodrigo Rosenfeld Rosas wrote:

[#52883] Re: Any documentation about debugging in Ruby 2.0.0 — Rodrigo Rosenfeld Rosas <rr.rosas@...> 2013/02/25

Em 25-02-2013 10:47, Jeremy Kemper escreveu:

[#52886] Re: Any documentation about debugging in Ruby 2.0.0 — SASADA Koichi <ko1@...> 2013/02/25

(2013/02/26 0:22), Rodrigo Rosenfeld Rosas wrote:

[#52890] [ruby-trunk - Bug #7958][Open] include FileUtils::Verbose gives NoMethodError when installing files with a different mode — "drbrain (Eric Hodel)" <drbrain@...7.net>

12 messages 2013/02/25

[#52893] [ruby-trunk - Bug #7959][Open] configure contains non-portable shell code — "jeremyevans0 (Jeremy Evans)" <merch-redmine@...>

12 messages 2013/02/25

[#52936] [ruby-trunk - Bug #7968][Open] Poor UDPSocket#send performance in ruby 2.0.0 on windows — "cs96and (Alan Davies)" <alan.n.davies@...>

10 messages 2013/02/26

[#52997] [ruby-trunk - Feature #7978][Open] boolean to_i — "alexeymuranov (Alexey Muranov)" <redmine@...>

14 messages 2013/02/27

[#53017] [ruby-trunk - Bug #7982][Open] rb_raise segfaults on %lli format with (0xffffffff + 1) — "erik.s.chang (Erik Chang)" <erik.s.chang@...>

10 messages 2013/02/28

[#53025] [Backport 200 - Backport #7984][Open] Severe speed issues in 2.0.0 compiled with Clang — "jcole1989 (James Coleman)" <jtc331@...>

13 messages 2013/02/28

[ruby-core:51981] Re: [ruby-trunk - Feature #7792] Make symbols and strings the same thing

From: Rodrigo Rosenfeld Rosas <rr.rosas@...>
Date: 2013-02-07 13:09:45 UTC
List: ruby-core #51981
Em 07-02-2013 10:04, Matthew Kerwin escreveu:
> On 7 February 2013 20:46, rosenfeld (Rodrigo Rosenfeld Rosas) wrote:
> > I agree that a string is what I want in all cases. That is exactly why I
> > don't feel the need for symbols. If symbols are just really required as
> > a fundamental implementation detail of the MRI implementation, then I
> > don't think it is a good reason to justify keeping them in the language
> > level. Just find other ways to optimize methods/etc lookup in the
> > internal MRI code. This should be a separate discussion from the 
> language
> > design itself.
> >
> > I'd really prefer you to think if symbols are really a good thing to
> > have in the design of the Ruby language if you forget about all
> > performance impacts it might have on the MRI implementation details.
>
> Ok, methods.  They have a bucket of queriable information (a Method 
> instance), and they have a symbolic representation (a Symbol).  I 
> don't want to have to instantiate an entire Method object (or a whole 
> bunch of them) every time I want to talk to an object abouts its 
> methods; I just want a single, simple, universal token that represents 
> that (or those) method(s).

Like a string?

> Sorry, that's a performance optimisation detail.

Before I continue with my arguments and could focus solely on the 
performance issue I'd like to confirm that there is no other reason why 
symbols do exist. If performance is the sole reason and if I can make 
the point that symbols actually degrades most Ruby programs rather than 
improve the overall performance then I can still maintain my hopes for 
this ticket.

> ...
> And for the record: "I don't ever want to use ClassX so let's remove 
> it" is, frankly, silly.

This is clearly not the reason here. That's why I'm asking: what Symbols 
are useful for? Is it performance the only reason why symbols exist?

Symbols cause lots of confusion as I showed in previous examples. That's 
why I want to remove it, but I didn't ask to remove it in this ticket 
anyway. Just to make it behave exactly like strings.

> ...Ok, completely philosphically, without any reference to performance 
> or implementation details, why is a Java enum not equivalent to (or 
> auto-cast to and from) a Java string?

Java, C and C++ have different goals then Ruby. They aim at the best 
possible performance given their constraints. They are also statically 
typed. Enums have two goals in such languages. Improving performance and 
reducing memory footprint is one of them. The other one is to help the 
compiler to find errors at compile time by restricting the input type in 
some functions/methods and variables. I don't really understand how this 
is relevant to this discussion.

> I, too, have been using Ruby for several years now; and I, too, have 
> seen a lot of people wanting Symbol and String to behave the same.  
> Hells, at times even I have wanted that.  But the simple fact is:  
> those people (myself included) are wrong.  If they want a String, use 
> a String.  If they want to force a Symbol-shaped peg into a 
> String-shaped hole, then they'll have to do whatever hoop-jumping is 
> required; exactly as if you want a Java enum to support implicit 
> coercion to and from a string.

I don't want that for Java enums and I don't really understand how Java 
enums relate to the string vs symbols debate in Ruby.

> > People just don't know when to use symbols and strings.
>
> Bingo.  Your solution is: hide Symbols from those people.

Yes!

>  My solution is: don't change anything; maybe eventually enough people 
> will learn that the two classes are, in fact, different.

They won't.

> > Take the Sequel library for instance.
>
> No thanks, apparently the authors don't know the difference between 
> Symbols and Strings.

But I really love the library. Should I really stop using it just 
because it returns an array of hashes indexed by symbols? And Sequel is 
not the only library doing so. Should I stop using all gems out there 
because the authors don't understand they should be always using strings 
instead of symbols in such cases?

You should ask yourself: why are authors so confusing about whether to 
use strings or symbols? Are they all just stupid? Isn't it clear in all 
Ruby books? No, it isn't! It is just really confusing. I'm yet to read 
some book that does a strong argument whether you should be using 
symbols or strings. They just say that symbols perform better than 
strings so authors think: "hey, then I'll just use symbols everywhere 
and my gems will perform the best possible way!". But this thinking is 
plain wrong because you'll need extra steps for conversions among those 
types very often. The fact is that most authors don't really care about 
symbols or strings at all. They don't spend their time thinking about 
whether they should be using symbols or strings. They don't WANT to 
worry about it! And they're not wrong! Since they don't want someone 
looking at their code and telling them that their gem could perform 
better if they used symbols instead of strings they will just use 
symbols everywhere! This reality won't change. That is why I think 
programmers shouldn't have to worry about any performance difference 
that might exist between using symbols or strings in their code.

If there is a real boost using symbols internally in MRI then this 
should be an implementation detail only, not exposed to Ruby programs. 
That is why I suggested the optimizations to care if the string is 
frozen or not (like other compilers will optimize constants) instead of 
creating a new concept (symbols) just for that. They could keep the 
:symbol syntax as an alias to 'symbol'.freeze.

> ...
> > I'd prefer that you focus on explaining why you think keeping symbols a
> > separate beast is of any usefulness
>
> I'll choose to interpret that as "... why I think keeping symbols at 
> all ...".  Simply: because they're already here.

This is not a good argument in my opinion. If you want to keep the 
syntax :name as an alias to 'name'.freeze I believe most current Ruby 
programs wouldn't be affected by such change.

> ...  Personally I've never used HashWithIndifferentAccess, or needed to.

Me neither. But for different reasons. I need the behavior but I don't 
think it worths the extra dependencies in my code (ActiveSupport) nor 
the cumbersome of writing such a big class name everytime I want my hash 
to behave like HWIA. I prefer to take some time to investigate if all my 
hash keys are really strings than to just instantiate HWIA all over the 
places.

> Incidentally those people don't want a Hash at all.  They want an 
> associative array, one that uses something like <=> or === to compare 
> keys (instead of #hash and #eql?).

:a === 'a' is not true so I don't understand how such suggested 
associative array would help here.

> ...
> This is true of _any_ issue in a library.  If you think the library's 
> benefits outweigh its costs, then you use the library.  If the fact 
> that the authors erroneously conflate Symbols and Strings is 
> outweighed by the fact that it's otherwise extremely useful, it's up 
> to you to work around the shortcomings.  Just like if some otherwise 
> brilliant library uses 0 instead of nil, or something.

Again, please don't pretend that the confusion between strings and 
symbols are similar to confusions between 0 and nil.

> The general syntax served us well enough through 1.8 and 1.9.

Actually I never liked writing hashes as {key => value} in all years 
I've been working with Ruby. But I won't stop using Ruby just because I 
don't like its hash declaration syntax just the way I won't replace 
Sequel just because they return hashes indexed by symbols instead of 
strings.

> ...
> > The difference is that in the other languages a string is used since 
> they don't have the symbols concept.
>
> That's a good point.  I'd love to be able to change the new syntax so 
> {a:1} meant {'a'=>1}, but that's not going to happen.

I agree it is unlike to happen. What about another syntax: {{a: 1}} => 
{'a' => 1}? Maybe it would worth trying to ask for some syntax change 
like this one. We could even add interpolation to it: {{"value 
#{computed}": 1}}.


In This Thread