Hacker News new | ask | show | jobs
by mjn 4148 days ago
I believe they're similar to uninterned symbols in Lisp, i.e. what you get in Common Lisp from make-symbol (or gensym). The main intended use-case seems to be to get "private" property names, by conjuring up a fresh name-like thing is not equal to any other name-like thing, and not findable/enumerable in the usual way either. You can then monkey-patch that into a class or do whatever other nefarious thing you were planning.

I agree it's a somewhat confusing name, since interned symbols are the more familiar kind of symbol in other languages, especially in the modern era (older Lisps made more extensive use of uninterned symbols).

1 comments

So, that sort of makes sense if you were to use them as keys in the new Map and Set objects...but I again, I can't help but notice that I haven't felt their absence yet.

Thanks for the reference about CL make-symbol. Is there a practical use for this we actually would spot in the wild, or do I need to go up on the mountain with a copy of The Art of the Metaobject Protocol?

The standard Lisp use for generated symbols is to provide a way to reliably avoid name clashes during macro expansion.

I'm not sure if that qualifies as a practical use in the out in the wild or just a practical way to fix pain (e.g. CPP nonsense) that you can see out in the wild.

I had no idea what a Symbol even was until I stumbled upon alt - https://github.com/goatslacker/alt

It's a small and simple code base, and much easier way to grok the concept than reading a book.

Good link. You can see the usage in the first few lines here:

https://github.com/goatslacker/alt/blob/master/src/alt.js

They seem to be being used mostly as immutable constants for readability--which kind of fits with normal use, right? I'm just trying to see if there's anything else here I'm missing.