In order to help finish Parrot's HLL namespace support, I've compiled
a list of features and information that I believe is necessary to
support the target languages. I've done so after doing a survey of
these languages. I may have missed something or misunderstood
something: please check that this information matches what you know
about these languages.

It is my intent that this be merely a factual document. I want to
begin on the implementation details only after we have a clear
specification.

Naming Strategies and Storage

  Different languages store their variables and subroutines/methods in different
  ways and places. Parrot must support all of these and, if possible, allow
  interoperability.

  Types

    1. Python: Variable and subroutine/method names overlap; you cannot have two
       items that share the same name.
    2. Ruby, Tcl: Variable and subroutine/method names do *not* overlap.
    3. Perl 5: Globs prevent overlap.
    4. Perl 6: Sigils prevent name collisions.

Default Namespaces

  Python:   __main__
  Ruby:     main
  Tcl:      ::
  Perl5:    main
  Perl6:    ::*Main

Namespace Capabilities

  - Importing
      Items must be imported from one namespace to another. Tcl requires that
      this be a snapshot - meaning that changes in the original namespace do
      not affect the imported items - while other languages use aliases.

      Items can be specified by tags (:all, :default), by patterns (c*), or by
      names.

  - Exporting
      Not all items can be exported; a list must be kept of which items can be. 
      These items can also be specified by tags, patterns, and names. Patterns
      are not expanded until the time of the import (which may occur more than 
      once).

  - Un-importing
      Tcl also allows you to un-import items using patterns. These can be
      specified using the namespace the command originally came from.

  - Querying Information
      It must be possible to get a list of both variables and subroutines,
      sometimes together and sometimes seperate.

      Tcl also allows you to get information about a namespace, such
as its name,
      its parent namespace, and its child namespaces.

  - Deleting
      It must be possible to delete:
        * Variables
        * Subroutines
        * Namespaces

Necessary Information

  - Child namespaces
  - Parent namespace
  - Current namespace
  - Subroutines (and their original namespaces)
  - Variables
  - Imported items
  - Exportable items
      * tags
      * names
      * patterns

Thanks for reading,

-- 
matt diephouse
http://matt.diephouse.com

Reply via email to