Name: Jerry Gay Project Title: Synopsis 19 - Command Line Syntax, Design and Implementation Synopsis: Perl 6 won't feel like Perl until it's callable from the command-line with a well-defined, practical syntax. This proposal aims to deliver a design and implementation of the Perl 6 command-line syntax. This project implements a core component of Perl 6--one which will define how users interact with Perl 6 every day. Benefits to Perl 6 Development: The Perl 6 specification requires the development and testing of Synopsis 19 - Command Line Syntax (S19). The release of any Perl 6 implementation, including Rakudo Perl, will require an implementation of this Synopsis. This project will provide the required Synopsis, and an implementation for Rakudo. Deliverables: D1. Documentation of Perl 6 command line syntax working draft in Synopsis form (Synopsis 19). This preliminary document will be reviewed by the design team and by the community via at least one round of feedback. The Synopsis may be revised multiple times before final approval; these revisions are outside the scope of this item. D2. Implementation of a set of tests covering main design points of Synopsis 19. These tests are meant to aid in the development of the design laid out in the Synopsis--specifically to uncover edge cases and ambiguities. The tests are not meant to provide full coverage of the Synopsis. The tests will reside in the Pugs repository, with the official Perl 6 tests in the t/spec/ directory. D3. Implementation of a command line parsing library for Parrot. This library will be based on Synopsis 19, and much as the Parrot Grammar Engine (PGE) is based on Synopsis 5, this library will be factored in such a way as to make it useful for Parrot, Rakudo, and other high-level languages targeting Parrot. To meet this need, the library will become part of the Parrot Compiler Toolkit (PCT). D4. Implementation of a subset of the Perl 6 command line syntax in Rakudo, following the design of Synopsis 19, and based on the Parrot command line parsing library (D3). This library will be customized to support Perl 6 syntax, and I suspect it will be written in Perl 6 or NQP. Implementation of command line options will be limited to those which may be created using features available in Rakudo at the time of implementation. Tests addressing these features (D2) will be added to the suite of regression tests run by Rakudo. D5. Implementation of the Perl 6 MAIN() subroutine semantics, as given in Synopses 6 and 19, and other relevant passages. D6. Timely reports on implementation progress (probably weekly). Project Details: I will pull ideas from various sources during the course of this project, including: * Perl 5 command line syntax and documentation * Perl 5 module Getopt::Long, Getopt::Euclid * Perl 6 Synopsis 6, section entitled "Declaring a MAIN subroutine" * Pugs command line syntax * Glasgow Haskell Compiler command line syntax * Dynamic languages including: Java, Python, Ruby A key focus area is determining a way for command line options to be passed through the Perl 6 compiler to an underlying implementation system, such as Parrot. Project Schedule: The project will start as soon as possible and continue into 2009. Three major milestones, described below, define the remainder of the project. Status reports (D6) will be ongoing. M1. Completion of the working draft of Synopsis 19 (D1), and the set of related tests (D2). Submit interim report. M2. Completion of a Parrot library for parsing command-line syntax (D3). Submit interim report. M3. Perl 6 command-line parsing library for Rakudo (D4), a MAIN() subroutine for Rakudo (D5), and updated tests and docs. Submit final report. Report Schedule: At the completion of each milestone, I will provide a report with a description of accomplishments. Additionally, weekly status reports will be made, consistent with D6. Dissemination Plan: At the completion of this grant, I will propose a presentation on this topic to various conferences in 2009, in order to introduce the command-line syntax to Perl 6 users. To familiarize Parrot high- level language developers with the Parrot command-line syntax library, I will add to the existing PCT documentation. Public Repository and License: Artifacts including source code and documentation will reside in repositories managed by The Perl Foundation or Parrot Foundation. Artifacts including Perl 6 test suite files will reside in the Pugs repository. Copyrights will be held by The Perl Foundation or Parrot Foundation as appropriate. All work will be licensed under the Artistic License 2.0. Bio: I am a core committer and project team member for the Parrot virtual machine and President of Parrot Foundation. I am also a developer for Rakudo Perl (Perl 6 on Parrot) and a participant in the Perl 6 design process. I have a broad and deep understanding of Parrot and Rakudo internals and I've fixed more bugs than I've caused. Amount Requested: USD $12,000. This amount is derived from a nominal and estimated 60% time allocation over 4 months at a rate of USD $5000 per month. Note that actual payments are made based on completion of milestones and deliverables, with no more funding for work and time spent beyond 2.4 real man-months nor less funding for work and time spent under 2.4 real man-months. Country of Origin: United States Okay to publish proposal? : Yes.