Google Summer of Code 2005

The Summer of Code is Google's program designed to introduce students to the world of open source software development.

This summer, don't let your programming skills lie fallow. Use them for the greater good of open source software and computer science. Google will provide a $4500 award to each student who successfully completes a project by the end of the summer.

By pairing applicants up with the proven wisdom and experience of established prominent open source organizations, we hope to make great software happen.

Refactor Pirate to be independent of the Python parse tree (AST)

I will refactor the intermediate code emitter in Pirate so that it is independent of the python parser. The idea is to create canned routines such as "WhileLoop.start()" and "WhileLoop.end()" that could call the specific routines for any language. A language's parser would create an abstract syntax tree that would then be used by the generic IMC emitter in Pirate to generate Parrot byte code. Also, there is still work to be done in implementing slices, floor divisions, power operators, and to-string operators in Pirate. I will implement as many of these as possible with the remaining time I have.

Open Sourcing Perl/Java Integration

Perl and Java are two very mature environments, each with their own strengths. It is common to find both of these technologies in a typical enterprise environment and therefore just as common to find a need for integration between them. Often the use of Java and Perl technologies in the same program can cause certain memory and/or performance hits. This is especially true in short run CLI driven programs. In addition, integration of Java and Perl often involves the use of proprietary components out of the control of the development teams causing various licensing or configuration issues. It seems appropriate with recent innovations in the Java space made possible by open source Java projects (such as GCJ and the GNU Classpath project) that Perl should be able to take advantage of these innovations and create a truly open source point of integration. The goal of this project is to integrate Open Source Java tools into Perl thus alleviating the need to use proprietary closed source solutions. A new integration point between Perl and Java will be created, centered upon the GCJ Java compiler. With the help of GCJ a Perl program author will be able to 'import' and use a Java Class in much the same way they would "import" Java code. In addition, GCJ, along with SWIG, can enable a programmer to write and "XS wrap" Java classes for use in Perl programs in much the same way they would for a C++ class.

Compiler/Optimizer Improvements to Parrot

Parrot is a new virtual machine in development that will be the target VM for Perl 6. This project aims to make improvements to the Parrot optimizer. Specific areas planned for improvement are: implementing SSA form, various self-contained optimizations, register allocation, and documentation. The ultimate goals of this project are to improve the Parrot optimizer infrastructure and make Parrot code run more efficiently.

Extended Type Inference System for Perl 5

I will be enhancing an existing compile-time type inference system for Perl 5 to support aggregate data types, objects, and type qualifiers. The initial thrust of the work is to assign types to arrays and hashes, the aggregate data types of Perl. To this end, I will disambiguate the use of arrays as tuples (such as the arguments of a function) or as a list (the conventional use of an array). Analogously, I will disambiguate hash use between records (as typically used when representing objects) or as associative arrays. Following this work, I will implement a subtyping relationship that follows the inheritance of classes used in the program. If time allows, I will also implement a type qualifier system for evaluating relationships among data (like Taint mode in Perl, but evaluated at compile time).

A Generational Thread Aware GC for Parrot

Parrot, the VM for Perl6 (and other languages), currently uses a plain Mark-and-Sweep Garbage Collector. As it will be used on a wide range of systems, from clusters to embedded, this scheme isn't really optimal. It also does not consider multi-threading, which should be included later in Parrot. The project is to implement a new GC that fixes all (or most of) these issues, by using a generational, compacting scheme that protects shared objects.

Perl MegaDistro

The creation of a "megadistro," of perl, which will be packaged for each and every distro. This package will contain the various modules that are most used by experienced perl users and developers. The intent is to benefit the user -- the acquisition of the various perl modules can be difficult, tricky, and most of all inconveniencing -- in that, they will be able to obtain and install one package, which contains all the essential and useful modules, that one may wish utilize. This will be especially useful for an inexperienced user; even for an experienced user, a megadistro of perl will still prove to be a major convenience. Ergo, such an install of perl will provide both efficiency and convenience to the general public, particularly since it will packaged for every major distro. The project will encompass, the compilation of packaging lists (the decision of which modules to package for the megadistro), compatibility and testing, for each distro, and the verification that the code will successfully pass a `make test`, on each, respectively. After completion of this project, the perl "megadistro" should be ready for mass-distribution.

WWW::Kontent - A Perl6 CMS

Perl 6, a redesign and rewrite of Perl, has been in the design phase for over five years; only in the last few months have a prodigious group of programmers produced Pugs, a prototype interpreter for it. WWW::Kontent is an implementation of a highly dynamic web content management system in Perl 6, designed to support nearly any kind of website, from an active wiki or message board to a personal home page or corporate presence. It is intended to test the new language in a non-trivial, real-world situation and provide a useful application written in the language right from its release.

BitTorrent Peer Library For Perl

BitTorrent is a popular peer-to-peer protocol. The reference implementation for this protocol is written in Python and ports do exist for some languages; however, there is no open BitTorrent library available to the Perl community. There are modules that exist to work with BitTorrent trackers and for reading the bencoded torrent files, but no set of modules exist that speak between the torrent peers. Having this type of package available would allow for easy incorporation of BitTorrent downloads into Perl programs. This project aims to do just that.


Perl Onion