coke edited this page Sep 13, 2010 · 15 revisions
Clone this wiki locally

See also: the Issue List

Pm Wants

  • @*ARGS

Coke Wants

  • Ability to override vtables from NQP.

Plumage Wants

Bold Highlights indicate top priority features (usually blocking Plumage’s progress in some area).

  • Q:PIR and pir::
    • Support inout params of PIR opcodes in the pir::op__params() syntax (I think NQP already supports this — give an example of the specific opcode in mind. —Pm)
  • Signatures and calling
    • Named argument flattening (now added by sorear++ —Pm)
  • Containers
    • Full hash constructor syntax
  • Signatures and Calling
    • Calling computed sub/method name
      • self/$obj.$method()
      • Foo::Bar::($sub_name)()
      • Something equivalent to the second item, but in the current package. "$sub_name"() and ($sub_name)() are likely invalid.
  • Grammars/Rules/Regexen
    • Get next match on same string
  • Callables
    • Cloned closures (now added —Pm)
  • Classes
    • CREATE (or other simplification of overridden new() methods)
  • General syntax
    • Statement modifier style for
  • PIR output
    • Use fetch and vivify opcodes

Kurahaupo suggests

  • that “get next match” should perhaps be done by creating an iterator on a lazy /g match.

sorear’s wishlist

  • Quasiquotey syntax for abstract syntax trees (PAST only is an acceptable approximation)
  • Mixins (they’re like roles, but with no fancy logic; basically just a class inside a sub)
  • Native types (will make writing optimizers easier… bacek wants these for lorito’s ops-nqp)
  • Loop control (done)
  • Flatten arrays (done)
  • Signature unpacking of multiple return values
  • Returning multiple values
  • Tailcalls
  • Subroutine traits (just pirflags, really)
  • @*ARGS
  • General anonymous hash constructors
  • An optimizer :)
  • Better error messages. “Unable to parse blockoid” fifteen lines away… I want to do better.

Completed Features

  • Signatures and calling
    • Optional, named, named optional params (already done —Pm)
    • Param defaults (already done —Pm)
    • Slurpy params (already done —Pm)
    • Positional argument flattening (Added in 8c211fe)
    • Fat arrow (=>) named argument syntax (added in 7c9ba0a)
    • Calling computed sub/method name
      • self/$obj."$method_name"() (added in r42789)
  • Callables
    • Pointy blocks (added in 992b220 —Pm)
  • Containers
    • Iterate over hash kv pairs (requires either real pairs or pointy blocks with params) (pointy blocks with signatures done, see above)
    • Empty array and empty hash constructors (now done in 2471f02)
    • Full array constructor syntax ([] array constructor available in 2471f02)
  • Strings
    • Closure interpolation (added in 5559916 —Pm)
  • Floats
    • Support for them (added in 19c949e)
  • Classes
    • Attribute declaration (already done —Pm)
  • General syntax
    • Statement modifier style if/unless (added in b7ce35e)
    • Statement modifier style while/until (added in 8d6dfe2)
    • try and/or CATCH (added in ef7eef0)
  • Variables
    • “Globals” declared and initialized by a module without aid of mainline; could be any of:
      • GLOBAL pseudo-namespace + cross-namespace variable references (@GLOBAL::ARGS) (added in r42541)
      • Contextuals (@*ARGS) look in PIR’s ‘namespace []’ as fallback (added in r42541)
      • Compile-time lexical export (declined)
  • split(/regex/) in nqp-setting