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.