On Symbols

Hey, all you lurkers:

Have any of the explanations in the thread (What is the difference
between :foo and “foo” ?) helped you understand symbols? A combination
of them? Or a combination of a couple of explanations, and an irb
session? Which ones? Why? If you don’t want to get involved in (what
seems to be turning into) a flamewar, email me personally (hint: don’t
click “Reply” :P), and I’ll compile the results anonymously.

I think we all agree that everybody learns differently, and so I think
we’re in dire need of feedback from somebody other than Chad (no
offense).

Devin

I don’t know, they have always made sense to me, which is why I didn’t
post in that other thread. I think people are just overthinking
things.

Zen and the Art of Ruby P.ming: Symbols just are.

Ryan

On Dec 30, 2005, at 11:25 AM, Ryan L. wrote:

Zen and the Art of Ruby P.ming: Symbols just are.

/agreed

~ ryan ~

Ryan L. [email protected] writes:

Zen and the Art of Ruby P.ming: Symbols just are.

+1

On Friday 30 December 2005 13:39, Devin M. wrote:

Hey, all you lurkers:

Hello.

Have any of the explanations in the thread (What is the difference
between :foo and “foo” ?) helped you understand symbols? A combination
of them? Or a combination of a couple of explanations, and an irb
session? Which ones? Why? If you don’t want to get involved in (what
seems to be turning into) a flamewar, email me personally (hint: don’t
click “Reply” :P), and I’ll compile the results anonymously.

Yes, the thread has definitely helped my understanding (but I wouldn’t
like to
offer up my own explanation of how they work :wink: ). It’s hard to pinpoint
any
one thing that made it click, but I think the host/port example on the
second
half of this page seemed to make the most difference to me:

http://microjet.ath.cx/WebWiki/2005.12.27_UsingSymbolsForTheWrongReason.html

I found the examples of when to use symbols the most useful. In fact,
I’d say
they’re essential, at least for me.

Thanks everyone.

Mark

On Friday 30 December 2005 01:13 pm, Gregory B. wrote:

On 12/30/05, Christian N. [email protected] wrote:

Ryan L. [email protected] writes:

Zen and the Art of Ruby P.ming: Symbols just are.

+1

+1 more. People will understand them if they just use them.

I disagree. I was using them quite often, but didn’t understand them at
all.

Now, thanks to this 99 post thread, I believe I understand them at an
intuitive level, and I understand them enough to correctly code with
them
every time.

As we speak, I’m writing symbol documentation for the Ruby N. who has
no
concept (so far) of Ruby internals or Ruby customs.

And nobody even gave me two cents :slight_smile:

SteveT

Steve L.

[email protected]

On 12/30/05, Christian N. [email protected] wrote:

Ryan L. [email protected] writes:

Zen and the Art of Ruby P.ming: Symbols just are.

+1

+1 more. People will understand them if they just use them.

On 12/30/05, Steve L. [email protected] wrote:

As we speak, I’m writing symbol documentation for the Ruby N. who has no
concept (so far) of Ruby internals or Ruby customs.

And nobody even gave me two cents :slight_smile:

I think you’ll get nickels, dimes, quarters, and other such change if
you can put an end to this seemingly bottomless topic.

Gregory B. [email protected] writes:

On 12/30/05, Steve L. [email protected] wrote:

As we speak, I’m writing symbol documentation for the Ruby N. who has no
concept (so far) of Ruby internals or Ruby customs.

And nobody even gave me two cents :slight_smile:

I think you’ll get nickels, dimes, quarters, and other such change if
you can put an end to this seemingly bottomless topic.

I think this topic will be terminated by the coming year-end holiday
more so than any concensus or documentation.

YS.

What a long, sometimes interesting, sometimes confusing thread that
has been (and apparently continues to be)!

For me, symbols weren’t very mysterious. I’m a Ruby N. but I’ve
been programming in languages that use symbols (e.g., Smalltalk) for
a long time. I thought the most cogent response was the one that said
all the discussion about what symbols really are under the covers
were implementation details. I got it.

On Dec 30, 2005, at 5:39 AM, Devin M. wrote:

I think we all agree that everybody learns differently, and so I
think we’re in dire need of feedback from somebody other than Chad
(no offense).

Devin

-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
Dan S.
Technology Visionary - Technology Assessment - Documentation
“Looking at technology from every angle”

Ryan L. wrote:

I don’t know, they have always made sense to me…

Ruby symbols surprised me a bit because unlike most
Lisps, Ruby’s symbols aren’t garbage collected.

I still don’t understand if that is an implementation
detail or something fundamental about symbols in Ruby
that makes them uncollectable. The answer to that
question would say a lot about where it’s a good
idea to use symbols.

Zen and the Art of Ruby P.ming: Symbols just are.

In all languages with symbols, symbols just are.
But in some languages they are, to varying degrees different.

On 12/30/05, Devin M. [email protected] wrote:

Have any of the explanations in the thread (What is the difference
between :foo and “foo” ?) helped you understand symbols?

The explanations that contrasted Ruby symbols with symbols
in other languages helped me.

Symbols mostly similar but a little different to Ruby’s
are present in many languages (Lisp, Dylan).

Other languages have similar concepts with a different
name (Interned strings in Java).

Other languages use the same term to describe something
quite different (Lex/Yacc, APL’s symbols, a linker’s
symbol table in C) - but that’s mostly a different
concept since the running program itself will rarely
care about the symbols.

On Sat, Dec 31, 2005 at 01:25:29AM +0900, Ryan L. wrote:

I don’t know, they have always made sense to me, which is why I didn’t
post in that other thread. I think people are just overthinking
things.

Zen and the Art of Ruby P.ming: Symbols just are.

+= 1


Chad P. [ CCD CopyWrite | http://ccd.apotheon.org ]

This sig for rent: a Signify v1.14 production from

On 30/12/05, Ron M [email protected] wrote:

Ruby symbols surprised me a bit because unlike most
Lisps, Ruby’s symbols aren’t garbage collected.

I still don’t understand if that is an implementation
detail or something fundamental about symbols in Ruby
that makes them uncollectable. The answer to that
question would say a lot about where it’s a good
idea to use symbols.

Probably an implementation detail. That doesn’t mean you can’t ignore
it, but it means that it’s generally a good idea to use Symbols in a
lot of places. Just don’t pretend that they’re immutable Strings.
They’re not. If you want that, freeze the String.

-austin

On Fri, Dec 30, 2005 at 10:39:34PM +0900, Devin M. wrote:

I think we all agree that everybody learns differently, and so I think
we’re in dire need of feedback from somebody other than Chad (no offense).

None taken.


Chad P. [ CCD CopyWrite | http://ccd.apotheon.org ]

“Real ugliness is not harsh-looking syntax, but having to
build programs out of the wrong concepts.” - Paul Graham

On 12/30/05, Ron M [email protected] wrote:

I think the big difference is if you want to use symbols
for values that come from external sources for long-running
processes like servers.

If not, the answer is no, then you probably only want to
use symbols on values that the author of the program is
totally in control of; or in short lived processes.

Hmm, sounds like that could be used as an exploit to kill a rails
server.
Don’t they use a lot of symbol <=> string conversion for their SQL
queries
or URL accesses?

Austin Z. wrote:

Probably an implementation detail. That doesn’t mean you can’t ignore
it, but it means that it’s generally a good idea to use Symbols in a
lot of places. Just don’t pretend that they’re immutable Strings.
They’re not. If you want that, freeze the String.

I think the big difference is if you want to use symbols
for values that come from external sources for long-running
processes like servers.

If symbols are garbage collected in Ruby 2, the answer is
yes, you could use them in all the places that you’d
use interned strings in Java or symbols in lisp.

If not, the answer is no, then you probably only want to
use symbols on values that the author of the program is
totally in control of; or in short lived processes.

Steve L. wrote:

And nobody even gave me two cents :slight_smile:

Ask for more, try three.

Funny new year !

On Dec 30, 2005, at 5:39, Devin M. wrote:

Hey, all you lurkers:

Have any of the explanations in the thread (What is the difference
between :foo and “foo” ?) helped you understand symbols?

I’ve just started trying to find these discussions and read them
because I haven’t been at all clear on the difference, so I’ll get back
to you on what does work.

However, although I don’t meant to pick on szpak specifically, he did
provide a sterling example of what doesn’t work, at least for me, and I
have worked professionally as a writer of documentation…

"A symbol in Ruby is similar to a symbol in Lisp

I don’t know Lisp. Or Java. Unless you know that your reader is already
familiar with your reference, it’s not helpful to use it.

in that the symbol is a name, or more precisely a named atom

“Atom” is undefined here. I know what an atom is. My desk is made of
them. This is apparently some other kind of atom…

which can also respond to a request to expose itself as a number

(to_i) or a string (to_s).

Neither names nor atoms respond to requests in my world. The use of
“expose” is even more confusing.

In this case a Ruby symbol is similar to a Lisp keyword symbol

Is a Lisp keyword symbol different than a Lisp symbol?

(which is also prefixed by a colon (:), at least in some versions of

Lisp).

Sometimes?

However, in Lisp a symbol has much greater functionality.
For example, a Lisp symbol can also be bound to a value, a property

list, or a function.

I definitely don’t need to know what else a Lisp symbol can do. I
would like to know what Ruby symbols are bound to, if not values,
property lists, or functions. (I’m going to guess “string.”)

In briefest, my understanding of symbol in Ruby is that it is an

interned string used as a name
(“interned” meaning that it is entered into memory as a single, atomic
entity, a monad -
there is just one of it, with a single pointer to it).

Aha. I do know what a string is, and the definition of “interned” is
supplied. However, the definition
isn’t very helpful. We’re back to “atomic,” with the implication that
“normal” strings aren’t atomic.
Then there’s “monad,” but that’s also undefined.

Again, this isn’t intended to be a criticism of szpak specifically. He
just provided a nice short example of what I see over and over again on
this list. I don’t know Lisp. I don’t know Java. I don’t know
Smalltalk. I don’t know PHP, or Python, or Perl, or C (plain, plussed,
objective, or sharp). It’s nice that there are lots of people on the
list who do, and if you’re trying to explain some part of Ruby to them,
by all means, use common references. But don’t assume we newbies know
this stuff until we tell you.

Me, I know SQL, and AppleTalk, and REXX, and Modula-2, and Pascal, and
real (not Real) BASIC, with line numbers. I decided I needed to learn a
new language, something I could script and web and just generally do
whatever I needed to do in. I picked Ruby.

Do I expect the myriad references to Python and Java to suddenly vanish
from the list? Of course not. I’m just saying, if there’s some big
discussion about threading that uses Java as the counterexample, don’t
be surprised if I ask that same question a week later.

On Dec 30, 2005, at 8:52, Mark S. wrote:

I think the host/port example on the second
half of this page seemed to make the most difference to me:

http://microjet.ath.cx/WebWiki/
2005.12.27_UsingSymbolsForTheWrongReason.html

Ack. I’m glad that helped somebody, but it was meaningless for me. It
still had nothing about what a symbol is. Until I find out what they
actually are, I can use them only by parrotting. “When I type
attr_reader, I have to do that colon-name thing, which then turns into
an @name thing later for no visibly logical reason. But that’s what you
do, so I do it. La la la.”

However, the link on that page seems to be much more useful to me.

http://onestepback.org/index.cgi/Tech/Ruby/
SymbolsAreNotImmutableStrings.red

[thinking]

Nope, still don’t know what they are.

For pity’s sake, though, do NOT respond to my message by trying to
explain them. I haven’t finished reading all the messages yet, but
apparently there are a couple million, so no point in adding new ones
just yet!

On Jan 4, 2006, at 14:06, Dave H. wrote:

On Dec 30, 2005, at 5:39, Devin M. wrote:

Hey, all you lurkers:

Have any of the explanations in the thread (What is the difference
between :foo and “foo” ?) helped you understand symbols?

Gregory B.'s examples showing object IDs have provided some hints,
although I now feel an awful lot like Alice:

'You are sad,' the Knight said in an anxious tone: 'let me sing you a

song to comfort you.’
‘Is it very long?’ Alice asked, for she had heard a good deal of
poetry that day.
‘It’s long,’ said the Knight, ‘but very, VERY beautiful. Everybody
that hears me sing it–either it brings the TEARS into their eyes, or
else–’
‘Or else what?’ said Alice, for the Knight had made a sudden pause.
‘Or else it doesn’t, you know. The name of the song is called
"HADDOCKS’ EYES."’
‘Oh, that’s the name of the song, is it?’ Alice said, trying to feel
interested.
‘No, you don’t understand,’ the Knight said, looking a little vexed.
‘That’s what the name is CALLED. The name really IS “THE AGED AGED
MAN.”’
‘Then I ought to have said “That’s what the SONG is called”?’ Alice
corrected herself.
‘No, you oughtn’t: that’s quite another thing! The SONG is called
“WAYS AND MEANS”: but that’s only what it’s CALLED, you know!’
‘Well, what IS the song, then?’ said Alice, who was by this time
completely bewildered.
‘I was coming to that,’ the Knight said. So saying, he stopped his
horse and let the reins fall on its neck: then, slowly beating time
with one hand, and with a faint smile lighting up his gentle foolish
face, as if he enjoyed the music of his song, he began.

I’m developing the very strong suspicion that no explanation of symbols
will get far unless it’s part of a broader context that includes
variables and references.

dblack said:

a = “string” # a contains a reference to that string
and Gregory provided examples that indicate something more complicated:
the a' above contains a reference to an object, created especially for that variable, that contains six characters. Doing it again with variableb’ gives you an identical twin.

a = 1 # a contains the actual (immediate) value 1

Except the example would seem to contradict this statement. a'b’ and
`c’ do not contain actual anythings. They contain references to the
same object, that object which is the value “1”.

Maybe. I guess it depends on what, exactly, the .object_id method
returns, or on what “actual” or “immediate” means. It would appear it
means something much less immediate than I’d expect.

“Named number” is beginning to make sense, to the degree that it’s now
clear there’s some kind of serious difference between strings and (some
kinds of?) numbers in Ruby.

On the other hand, there’s still some serious ambiguity, because
Gregory’s numbers and strings were put into variables, but the symbols
weren’t stored in variables. What I need to figure out is how does a
symbol differ from a string literal, numeric literal, or variable, not
how it differs from a string or number IN a variable.

Onward…

Once again, a gentle reminder: please feel free to comment on the
learning process I’m documenting if you like, but do NOT respond if
you’re going to try to explain more about symbols and whatnot. Thanks!