Google Summer of Code Ideas
Committers: Please add your project ideas here!
Topic: Test Suite
Improving the Perl 6 compatbility test kit.
Testing multiple language implementations
Reorganize t/ so that it is suited for reuse with multiple Perl 6 implementations. The generic Perl 6 tests, suitable to all Perl 6 implementations, go in t/, and if any tests seem to be implementation specific, then perhaps this indicates the standard needs updating.
Also migrate existing :todo annotations into :depends annotations that groups missing features by tags.
Topic: Language features
Anything that makes more tests pass. :-)
Bootstrapping Perl 6 Grammar
We currently have a canonical Perl 6 grammar defined in Perl 6 (source:src/perl6/Perl-6.0.0-STD.pm). However, although several existing grammar engines come close to parsing it, it was not tested against real Perl 6 modules, for example source:ext/Test/lib/Test.pm.
This task will involve filling in stub production rules (the ones marked with '{*}') to generate meaningful ASTs, as well as checking the grammar against the existing Pugs.Parser module for ommissions.
Topic: Interoperability
Working with other languages and runtimes.
Embedding Interface
Perl 6 can be used as a dynamic scripting language for Haskell- and C-based applications, for example Yi or hIDE.
Currently, Pugs has support for extensible objects, using existential types that allows the embedder to define coercion functions to convert from/to Perl 6 values. We also have a C-based embedding API that provides "eval" and "apply" of Perl 6 code.
However, the embedding API for running and introspecting the interpreter is currently ill-defined; coming up with a sane API for them will allow Perl 6 be easily embedded as a Haskell-native scripting language, as well as reusable for C-based applications such as Emacs or Vim.
Foreign Functions Interface
Currently Pugs has support for using Perl 5 and Haskell libraries, but not for other foreign languages like C.
Implementing the ability to use C libraries with Pugs would open up new possibilities in Perl 6 programming.
Topic: Tools
Features supporting developing Perl 6 programs.
Debugger and Profiler
Pugs internals support pluggable evaluators, however, only two exists to date: one performs straightforward tree-reduction rules on the Perl 6 AST, and one ('pugs -d') prints tracing information.
Implementing an alternate evaluator with a minimal small-step debugger can simplify Perl 6 programming a lot; the same infrastructure can be used to write a simple line- or function-based profiler as well.
