Issue #14336 has been updated by dsferreira (Daniel Ferreira).


matz (Yukihiro Matsumoto) wrote:

> Daniel, don't try to read my mind. I tried years ago because I wanted to experiment what others liked (yes, we had similar people like you since the old days).

Thanks for the clarification Matz. I wasn°«t trying to read your mind. It was just a logical deduction. I get it. It made sense for others.

> And so many of our tests, samples, and utilities were failed miserably.

Probably, with like 99,999% certain my endeavour will be much worst and if that is the case it will be work to be forgotten. Like I said: I°«m comfortable with that. I respect very much all of your experience and knowledge. When I say °»your°… I mean not just you as the leader but all of you as a team. I know very little about the language compared to you. The key here for me is that you didn°«t say °»it is not gonna to happen°…. You left a °»but°… behind. An open door that I°«m willing to take.

> During the experiment, I found out the symbol is the fundamental part of the language.

Once again Matz many thanks for the insight. It is an invaluable knowledge that you are passing to me. I will keep that in mind during the exercise.

> If you are going to make your own experiment, it's good. I am curious about your approach and the result. The result may persuade me in the future.

That is all I need to hear. Your curiosity about the work I will do is my biggest motivation right now.

> You might feel I am too conservative.

Not even close. I already said: l totally agree with you that it is a bad thing to break backwards compatibility.
My goal is to come up with a proper transition path like requested by Koichi whilst keeping breakage as minimal as possible. And once again I state that I deeply respect all of you.

Thank you very much Matz for this opportunity!



----------------------------------------
Feature #14336: Create new method String#symbol? and deprecate Symbol class
https://bugs.ruby-lang.org/issues/14336#change-69547

* Author: dsferreira (Daniel Ferreira)
* Status: Rejected
* Priority: Normal
* Assignee: 
* Target version: 
----------------------------------------
From  the discussions on the three previous issues related to the String vs Symbol subject ([5964](https://bugs.ruby-lang.org/issues/5964), [7792](https://bugs.ruby-lang.org/issues/7792), [14277](https://bugs.ruby-lang.org/issues/14277)) there are some conclusions we can assume:
* Current String vs Symbol is not the ideal scenario. See: Matz and Koichi comments.
* Current philosophy is to use Symbols as identifiers and Strings when strings are needed.
* Current situation is that Symbols are being used in many code bases as strings except for strings that really need the String methods.
* Current situation is that we are designing APIs to handle both String and Symbol inputs forcing an overhead of API development.

I propose the deprecation of `Symbol` class and the introduction of `String#symbol?`.

```ruby
foo = :foo
foo.class # => String
foo.symbol? # => true
bar = "bar"
bar.class # => String
bar.symbol? # => false
```

For backwards compatibility transition path I propose:

```ruby
class Symbol
  def self.===(var)
    warn ("Warning message regarding deprecated class")
    if var.class == Symbol
      true
    elsif var.class == String && var.symbol?
      true
    else
      false
    end
  end
end

class String
  def is_a?(klass)
    case klass
    when String
      true
    when Symbol
      self.symbol?
    else
      false
    end
  end
end
```



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

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>