Giter Club home page Giter Club logo

Comments (10)

breckinloggins avatar breckinloggins commented on July 23, 2024 1

The thing I like about symbols (other than the performance advantages) is that they somehow feel less like "magic constants". For example, in C people hate seeing things like:

int rate = 42;

They want to know "what the heck does 42 mean", so we tend to say:

#define STANDARD_FALL_RATE 42

int rate = STANDARD_FALL_RATE

I consider this to be a problem with strings as well. Let's say I have some control variable:

mode = "Normal"

That string bothers me because it implies that I can put anything there and there's some magic list that's going to check what I put in there against the list. You can make it more explicit by saying:

 mode = :Normal

This implies that, although it is a string, it is a string that's SEMANTICALLY RELEVANT to the code-base.

from coffeescript.

jnicklas avatar jnicklas commented on July 23, 2024

hmm, why?

from coffeescript.

 avatar commented on July 23, 2024

Ditto to jnicklas's question. What would this become? Compile symbols into globally-unique integers, or something like that?

from coffeescript.

mattly avatar mattly commented on July 23, 2024

javascript strings do not behave like ruby's strings; javascript has immutable strings where ruby does not. Ruby's symbols are immutable in part to meet the need for immutable string-like identifiers.

seriously though, try this in IRB:

irb(main):001:0> "foo".object_id == "foo".object_id
irb(main):002:0> :foo.object_id == :foo.object_id

Javascript doesn't have the same problems this implies with ruby strings.

from coffeescript.

jashkenas avatar jashkenas commented on July 23, 2024

Strings might be immutable in javascript, but comparing them is still more expensive than comparing integers. Here's a test (in Safari):

Test Results

Still, the speed difference isn't so great that we need to add symbols to CoffeeScript.

from coffeescript.

breckinloggins avatar breckinloggins commented on July 23, 2024

Just wanted to add that I can certainly see not adding this to the language. I'm not sure that symbol support would pass your "unfancy" directive.

from coffeescript.

jashkenas avatar jashkenas commented on July 23, 2024

You make some very good points. Unfortunately, there's a critical wrinkle that pulls the rug out: You wouldn't be able to use symbols as keys in JavaScript objects (hashes). That's one of their primary uses in Ruby, and without it, there's not enough advantage to justify a new language concept. In addition, you wouldn't be able to meaningfully serialize them into JSON.

This is a good discussion to have on the record. Closing the issue...

from coffeescript.

weepy avatar weepy commented on July 23, 2024

Really a symbol is just an immutable string without spaces (in most cases), so you could just represent them as strings, but disallow allow certain operations on them. Whether it's worth it is another question...

from coffeescript.

stiller avatar stiller commented on July 23, 2024

I agree that symbols - if implemented - should simply be strings without certain operations. It's more about syntactic clarity and not as much about performance. In places where you would currently use a string from a preset number of possibilities, such as the eventName in a bind operation, readability would benefit from using a symbol instead of a general purpose string.

from coffeescript.

vadimdemedes avatar vadimdemedes commented on July 23, 2024

Symbols could be compiled to strings. Example:

:comments is 'comments'

:comments becomes 'comments' in compiled JS.

from coffeescript.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.