ruby-core@ruby-lang.org archive (unofficial mirror)
 help / color / mirror / Atom feed
From: hcatlin@gmail.com
To: ruby-core@ruby-lang.org
Subject: [ruby-core:102122] [Ruby master Feature#17472] HashWithIndifferentAccess like Hash extension
Date: Sun, 17 Jan 2021 12:57:51 +0000 (UTC)	[thread overview]
Message-ID: <redmine.journal-89978.20210117125751.5@ruby-lang.org> (raw)
In-Reply-To: redmine.issue-17472.20201226110418.5@ruby-lang.org

Issue #17472 has been updated by hcatlin (Hampton Catlin).




During my 15 years of Ruby programming, I can't remember a single time that the difference between string-and-symbol with regards to Hashes was used on purpose. Instead, it's the source of countless bugs, extra typechecking code, and difficulty when you install a new library– ("hmmm, is this options hash going to be stringed or symboled?")

The argument that SINCE it trips up beginners, that's a good thing, as they get to learn an important lesson about... design flaws in Ruby? That's such an odd argument to me!

In almost every use of Hash in my career, the keys have being either symbols or strings, and I can't think of production code that even uses the fact that you can use an object as a key as a feature. I think I've attempted it myself a couple times, but usually refactored the code after, berating myself for trying to be a little too clever.

Which brings me to #11882 !

I opened this proposal 5 years ago that would basically mean that Rails wouldn't *need* HashWithIndifferentAccess, as Ruby would have it's own stringed, symbol-or-string agnostic Map implementation.

In the last year I've come back to full time Ruby programming, and this remains one of my biggest frustrations with the language. Hash was cute when I first learned the language and it was an early differentiator, but other languages have improved this paradigm and I think we should too!

----------------------------------------
Feature #17472: HashWithIndifferentAccess like Hash extension
https://bugs.ruby-lang.org/issues/17472#change-89978

* Author: naruse (Yui NARUSE)
* Status: Open
* Priority: Normal
* Target version: 3.1
----------------------------------------
Rails has [ActiveSupport::HashWithIndifferentAccess](https://api.rubyonrails.org/classes/ActiveSupport/HashWithIndifferentAccess.html), which is widely used in Rails to handle Request, Session, ActionView's form construction, ActiveRecord's DB communication, and so on. It receives String or Symbol and normalize them to fetch the value. But it is implemented with Ruby. If we provide C implementation of that, Rails will gain the performance improvement.

summary of previous discussion: https://github.com/rails/rails/pull/40182#issuecomment-687607812



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

  parent reply	other threads:[~2021-01-17 12:57 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-12-26 11:04 [ruby-core:101707] [Ruby master Feature#17472] HashWithIndifferentAccess like Hash extension naruse
2020-12-26 11:06 ` [ruby-core:101708] " ronnie
2020-12-26 12:53 ` [ruby-core:101713] " eregontp
2020-12-27 10:44 ` [ruby-core:101737] " mame
2020-12-27 16:14 ` [ruby-core:101747] " eregontp
2020-12-27 17:13 ` [ruby-core:101751] " merch-redmine
2020-12-27 19:09 ` [ruby-core:101755] " daniel
2020-12-27 20:08 ` [ruby-core:101758] " marcandre-ruby-core
2020-12-28  3:41 ` [ruby-core:101767] " naruse
2020-12-28 11:22 ` [ruby-core:101772] " jean.boussier
2020-12-28 11:24 ` [ruby-core:101773] " naruse
2020-12-28 11:53 ` [ruby-core:101774] " eregontp
2020-12-29 20:34 ` [ruby-core:101807] " zverok.offline
2021-01-02 10:53 ` [ruby-core:101877] " nobu
2021-01-17 12:57 ` hcatlin [this message]
2021-01-23 11:54 ` [ruby-core:102217] " mail
2021-03-27  0:31 ` [ruby-core:103046] " yoelblumenator
2021-03-27  1:03 ` [ruby-core:103048] " marcandre-ruby-core
2021-03-27  6:49 ` [ruby-core:103051] " yoelblumenator
2021-03-28  1:56 ` [ruby-core:103066] " duerst
2021-03-28  3:17 ` [ruby-core:103067] " marcandre-ruby-core
2021-03-28 17:29 ` [ruby-core:103075] " yoelblumenator
2021-03-31  0:19 ` [ruby-core:103119] " duerst
2021-04-01 21:49 ` [ruby-core:103161] " lamont
2021-04-02  4:11 ` [ruby-core:103163] " sawadatsuyoshi
2021-04-02 13:36 ` [ruby-core:103182] " yoelblumenator
2021-04-02 13:45 ` [ruby-core:103183] " yoelblumenator
2021-04-02 14:13 ` [ruby-core:103184] " daniel
2021-04-02 19:34 ` [ruby-core:103189] " lamont
2021-04-02 19:42 ` [ruby-core:103190] " lamont
2022-11-20  8:18 ` [ruby-core:110824] " naruse (Yui NARUSE)

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-89978.20210117125751.5@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).