Project

General

Profile

Actions

Feature #9043

open

Add String#f method as shortcut for #freeze

Added by headius (Charles Nutter) over 10 years ago. Updated about 6 years ago.

Status:
Open
Target version:
-
[ruby-core:57967]

Description

We have String#b to create a binary-encoded String, and we have the "f" suffix (going away, hopefully) and the "literal".freeze optimization (#8992). I think it would be reasonable to add String#f as a shorter method for producing a frozen string.

If String#f is added the "literal".freeze optimization could be dropped in favor of "literal".f. This would provide something very close to the original "literal"f syntax but in a backward-compatibility-friendly way (class String; alias f freeze; end).

Updated by headius (Charles Nutter) over 10 years ago

  • Category set to core
  • Target version set to 2.1.0

Updated by Anonymous over 10 years ago

I feel really negatively about optimizing only String#f and not String#freeze. You could make the argument that it's backwards compatible, but in reality it means every bit of code that wants to use this optimization needs to monkey patch its own String#f.

Otherwise I support adding String#f as an alias for String#freeze and removing f-suffix syntax.

Updated by headius (Charles Nutter) over 10 years ago

  • Assignee set to matz (Yukihiro Matsumoto)

The change to optimize String#freeze has landed for #8992, which compiler-optimizes String#freeze. The only remaining decision is whether to also add #f with the same optimization.

matz likes the idea of String#f. I'm happy either way, since #8992 landed, but a shorter method would be nice. With String#f acting like "str"f, we'd only be one character more verbose than the original syntax.

I believe matz needs to decide this one.

Updated by normalperson (Eric Wong) over 10 years ago

Fwiw, I am against adding aliases to the same method,
especially extremely short names which are hard to search for.

It is confusing and increases overhead for reading/following code.

Easy-to-write code is not necessary easy-to-read.
(speaking as a sometimes Perl hacker)

Updated by matz (Yukihiro Matsumoto) over 10 years ago

Despite the OP's intention, String#f should not be an alias to #freeze, but should work as #dedup described in #9229.
I am quite positive, but it must be too late for 2.1.

Matz.

Updated by headius (Charles Nutter) about 10 years ago

  • Target version changed from 2.1.0 to 2.2.0

I'd like to see this get into 2.2, and it sounds like Matz wants it too.

Updated by normalperson (Eric Wong) about 10 years ago

I'm still against this (and having aliases at all for standard).
It makes code harder to search/read, especially when they have
short names like "f".

Actions #8

Updated by naruse (Yui NARUSE) about 6 years ago

  • Target version deleted (2.2.0)
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0