[% setvar title Symbols, symbols everywhere %]

This file is part of the Perl 6 Archive

Note: these documents may be out of date. Do not use as reference!

To see what is currently happening visit http://www.perl6.org/


Symbols, symbols everywhere


  Maintainer: Paolo Molaro <lupus@debian.org>
  Date: 26 Sep 2000
  Mailing List: perl6-internals@perl.org
  Number: 326
  Version: 1
  Status: Developing


Perl should adopt scheme-like symbols, both at the language level and at the internals level.


Symbols can be useful in a variety of ways both at the language level and as an implementation detail for efficiency reasons.

Symbols at the language level

A possible operator to create a symbol could be qs// for quote symbol. A one character operator could be useful as well, but since ^ is likely to be taken by curried expressions, an alternative could be :.

	$symbol = qs(methodname); # or ^methodname or :methodname

They can be also useful in XS modules to map constants more efficiently than today's constant() function.

Characters following the one-char operator are limited to the usual identifier characters. Probably, the same character used as operator should be used in subroutines prototypes to allow for compile time optimizations.

Only equal/non equal comparison operations should be allowed on symbols.

Symbols in the inplementation

Symbols are "interned" during compilation. From then on symbols are actually treated like numbers, so comparisons are faster. They should be used to hold package names, method names and so on. This way symbol tables can be implemented as optimized integer hash tables instead of string hash tables (for packages with few methods a binary search could be also a win). A symbol should be used anywhere a package name or method name is used now at the API level (this applies to variable names, too).


Should be trivial. A symbol scalar could be a read-only scalar with both the string and integer properties set. Note that additional memory should not be allocated for each copy of a symbol: once "interned" they are never free'd: the vtable stuff can make this very simple.


Your preferred scheme book.

GLib's GQuarks and Xlib's Atoms for implementations.