<commit_before>[% page.banner = "Summer of Code Ideas" %]
[% page.title = page.banner %]
[% page.sidebar = BLOCK %]
&lArr; <A HREF="index.html">back to Summer of Code</A>
[% END %]

<H3 class="BEGINNER">
<center>
This list is still under development!  Check back soon.
</center>
</H3>

<p>Good projects...</p>
<ul>
  <li>...build on or integrate well with existing code</li>
  <li>...are a development of an existing project, rather than starting from scratch</li>
  <li>...provide more basic infrastructure or libraries that will provide the widest opportunities for others to build on the results of the proposal</li>
</ul>


<p>Some ideas...</p>

<ul>
  <li>Using Parrot and the compiler tools, write a parser for C header files
      that can generate Perl 5 NCI or Parrot NCI code.<br>
      It should let the developer write an SDL binding for either language by
      running the parser against SDL.h and its friends. For output, it would
      generate either or both Perl 5 and Parrot code that:
   <ul><li>opens the appropriate library with NCI or Parrot NCI</li>
       <li>binds to the functions with the appropriate data types</li>
       <li>declares the defined structs appropriately</li></ul>
                                                                              
    Developers should be able to include this generated code in the
    distribution so that <em>end users never have to run this compiler tools
    themselves or even have the headers for the libraries installed</em>.
    Obviously they need the NCI and bound libraries installed, but not the
    headers or even a C compiler.</li>

  <li>Implement a Perl 5 regular expression module for Parrot along the same
      lines as the Perl 6 grammar engine. This will allow the use of current
      Perl 5 regular expression syntax with the new engine.<br>
      There is an initial Perl 5 syntax parser to build from, which already
      passes some 600 tests, although the Perl 5 test suite provides plenty
      more! Of course, the tests that it's not yet passing are the ones that
      are syntactically more complex (<i>i.e.</i>, <code>(?...)</code>
      extensions) or otherwise more involved to implement, so this should
      provide plenty of interest. With the syntax is fully implemented, the
      next stage is to analyze and start to port over the optimizations from 
      the Perl 5 engine. (mentor: <NAME>)</li>

  <li>A Perl 5 to Perl 6 translator.<br>
      As the first stage of of translating Perl 5 to Perl 6, Larry Wall has
      been working on adapting the existing Perl 5 parser to output a complete
      abstract syntax tree, something it had never needed to do before. The
      current implementation can convert about 75% of the core Perl 5
      distribution back into byte-for-byte perfect source code (<i>i.e.</i>
      everything restored, including the exact whitespace and comment text
      normally discarded by a tokenizer). His work has been merged back into
      the core Perl 5 development tree. What is needed is for someone to
      complete this first stage proof-of-concept identity transformation,
      then to work with the Perl 5 and Perl 6 teams on converting the code
      from generating Perl 5 output to Perl 6 output.</li>

  
  <li>Ajax library for Template Toolkit, akin to the Ajax support in Ruby in Rails (likely mentor: the <a href="http://www.perl.com/pub/a/2005/06/02/catalyst.html">Catalyst</a> project).</li>
  
  <li>Build a suite of tools around WxWidgets for cross-platform GUI apps with low overhead (i.e., don't require Tk or GNOME overhead).</li>
  
  <li>A Perl SOAP library including WSDL support.</li>

  <li>Automate smoke testing new Perl releases with CPAN (possible
  mentor: <NAME>).</li>

  <li>Smoke testing architecture for binary compatibility between
  versions of Perl.</li>

  <li>Benchmarks for PGE (Parrot Grammar Engine) (likely mentor:
  <NAME>)</li>

  <li>A good chunk of things from the Perl 5 <a
  href="http://mirrors.develooper.com/perl/APC/perl-current/pod/perltodo.pod"
  >TODO
  list</a>. Good examples:

    <ul>
      <li>"A decent benchmark" + "Profile Perl" -- measure the performance of
      the Perl interpreter using free tools such as cachegrind, gprof, and
      dtrace, and work to reduce the bottlenecks they reveal.</li>
      <li>"The regexp optimiser is not optional" + "Make the peephole
      optimizer optional"</li>
      <li>"iCOW" -- a plan for Copy-On-Write to speed up thread creation.</li>
      <li>"Properly Unicode safe tokeniser and pads" -- The tokeniser isn't
      actually very UTF-8 clean. Under <code>use utf8;</code> variable names
      are stored in stashes as raw bytes, without the utf-8 flag set. The pad
      API is all bytes. The UTF-8-ness of <code>PL_rsfp</code> is ignored.
      All this should be fixed.
      </li>
      <li>"Attach/detach debugger from running program" which will inevitably
      snowball into a lot more debugger related improvements.</li>
      <li>"fix tainting bugs" + "Make tainting consistent"</li>
    </ul>
  </li>

  <li>Polish up and finish off <a
  href="http://use.perl.org/~chromatic/journal/20481">P5NCI</a>
  (likely mentor: chromatic).</li>

  <li> <a href="http://llvm.cs.uiuc.edu/">LLVM</a> <-> Parrot interop
  (likely mentor: Leo T&ouml;tsch)</li>

  <li> Parrot as LLVM backend (LLVM -> PASM)</li>

  <li> PIR -> LLVM (not really, but evaluate optimizations)</li>

  <li> Implement well-known optimizations in PIR compiler (SSA -> register allocation)</li>

  <li> Runtime & offline bytecode optimization</li>

  <li>Parrot JIT: improve & complete JIT for some set of subsystems
  from alpha to Z8000 i.e. several pieces, one per platform</li>

  <li>Parrot threads: STM (software transactional memory as in GHC, et al.) for Parrot</li>


  <li>Improve TGE
    <ul>
      <li> allow complex node selectors in rules</li>
      <li> find and implement a rule syntax other than PIR</li>
      <li> complete and document the default PAST and POST objects</li>
      <li> make the default objects available to all projects</li>
      <li> refactor out a default compiler framework for all projects</li>
      <li>  optimize for memory use</li>
      <li>  allow interpretation as well as compilation</li>
      <li>  create a system that provides scaffolding of a new language 
        implementation</li>
      <li>  create default tree optimizations (SSA would be nice)</li>
      <li>  create default POST -> PIR rules</li>
    </ul>
  </li>
</ul><commit_msg>Move Improve TGE higher as it's a fleshed out idea. s/TGE/Tree Grammar Engine/ as it's unlikely that our target audience will know what the TLA is.<commit_after>[% page.banner = "Summer of Code Ideas" %]
[% page.title = page.banner %]
[% page.sidebar = BLOCK %]
&lArr; <A HREF="index.html">back to Summer of Code</A>
[% END %]

<H3 class="BEGINNER">
<center>
This list is still under development!  Check back soon.
</center>
</H3>

<p>Good projects...</p>
<ul>
  <li>...build on or integrate well with existing code</li>
  <li>...are a development of an existing project, rather than starting from scratch</li>
  <li>...provide more basic infrastructure or libraries that will provide the widest opportunities for others to build on the results of the proposal</li>
</ul>


<p>Some ideas...</p>

<ul>
  <li>Using Parrot and the compiler tools, write a parser for C header files
      that can generate Perl 5 NCI or Parrot NCI code.<br>
      It should let the developer write an SDL binding for either language by
      running the parser against SDL.h and its friends. For output, it would
      generate either or both Perl 5 and Parrot code that:
   <ul><li>opens the appropriate library with NCI or Parrot NCI</li>
       <li>binds to the functions with the appropriate data types</li>
       <li>declares the defined structs appropriately</li></ul>
                                                                              
    Developers should be able to include this generated code in the
    distribution so that <em>end users never have to run this compiler tools
    themselves or even have the headers for the libraries installed</em>.
    Obviously they need the NCI and bound libraries installed, but not the
    headers or even a C compiler.</li>

  <li>Implement a Perl 5 regular expression module for Parrot along the same
      lines as the Perl 6 grammar engine. This will allow the use of current
      Perl 5 regular expression syntax with the new engine.<br>
      There is an initial Perl 5 syntax parser to build from, which already
      passes some 600 tests, although the Perl 5 test suite provides plenty
      more! Of course, the tests that it's not yet passing are the ones that
      are syntactically more complex (<i>i.e.</i>, <code>(?...)</code>
      extensions) or otherwise more involved to implement, so this should
      provide plenty of interest. With the syntax is fully implemented, the
      next stage is to analyze and start to port over the optimizations from 
      the Perl 5 engine. (mentor: <NAME>)</li>

  <li>A Perl 5 to Perl 6 translator.<br>
      As the first stage of of translating Perl 5 to Perl 6, <NAME> has
      been working on adapting the existing Perl 5 parser to output a complete
      abstract syntax tree, something it had never needed to do before. The
      current implementation can convert about 75% of the core Perl 5
      distribution back into byte-for-byte perfect source code (<i>i.e.</i>
      everything restored, including the exact whitespace and comment text
      normally discarded by a tokenizer). His work has been merged back into
      the core Perl 5 development tree. What is needed is for someone to
      complete this first stage proof-of-concept identity transformation,
      then to work with the Perl 5 and Perl 6 teams on converting the code
      from generating Perl 5 output to Perl 6 output.</li>

  <li>Improve Parrot's Tree Grammar Engine:
    <ul>
      <li>allow complex node selectors in rules</li>
      <li>find and implement a rule syntax other than PIR</li>
      <li>complete and document the default PAST and POST objects</li>
      <li>make the default objects available to all projects</li>
      <li>refactor out a default compiler framework for all projects</li>
      <li> optimize for memory use</li>
      <li>allow interpretation as well as compilation</li>
      <li>create a system that provides scaffolding of a new language
        implementation</li>
      <li>create default tree optimizations (SSA would be nice)</li>
      <li>create default POST -> PIR rules</li>
    </ul>
  </li>

  
  <li>Ajax library for Template Toolkit, akin to the Ajax support in Ruby in Rails (likely mentor: the <a href="http://www.perl.com/pub/a/2005/06/02/catalyst.html">Catalyst</a> project).</li>
  
  <li>Build a suite of tools around WxWidgets for cross-platform GUI apps with low overhead (i.e., don't require Tk or GNOME overhead).</li>
  
  <li>A Perl SOAP library including WSDL support.</li>

  <li>Automate smoke testing new Perl releases with CPAN (possible
  mentor: <NAME>).</li>

  <li>Smoke testing architecture for binary compatibility between
  versions of Perl.</li>

  <li>Benchmarks for PGE (Parrot Grammar Engine) (likely mentor:
  <NAME>)</li>

  <li>A good chunk of things from the Perl 5 <a
  href="http://mirrors.develooper.com/perl/APC/perl-current/pod/perltodo.pod"
  >TODO
  list</a>. Good examples:

    <ul>
      <li>"A decent benchmark" + "Profile Perl" -- measure the performance of
      the Perl interpreter using free tools such as cachegrind, gprof, and
      dtrace, and work to reduce the bottlenecks they reveal.</li>
      <li>"The regexp optimiser is not optional" + "Make the peephole
      optimizer optional"</li>
      <li>"iCOW" -- a plan for Copy-On-Write to speed up thread creation.</li>
      <li>"Properly Unicode safe tokeniser and pads" -- The tokeniser isn't
      actually very UTF-8 clean. Under <code>use utf8;</code> variable names
      are stored in stashes as raw bytes, without the utf-8 flag set. The pad
      API is all bytes. The UTF-8-ness of <code>PL_rsfp</code> is ignored.
      All this should be fixed.
      </li>
      <li>"Attach/detach debugger from running program" which will inevitably
      snowball into a lot more debugger related improvements.</li>
      <li>"fix tainting bugs" + "Make tainting consistent"</li>
    </ul>
  </li>

  <li>Polish up and finish off <a
  href="http://use.perl.org/~chromatic/journal/20481">P5NCI</a>
  (likely mentor: chromatic).</li>

  <li> <a href="http://llvm.cs.uiuc.edu/">LLVM</a> <-> Parrot interop
  (likely mentor: <NAME>&ouml;tsch)</li>

  <li> Parrot as LLVM backend (LLVM -> PASM)</li>

  <li> PIR -> LLVM (not really, but evaluate optimizations)</li>

  <li> Implement well-known optimizations in PIR compiler (SSA -> register allocation)</li>

  <li> Runtime & offline bytecode optimization</li>

  <li>Parrot JIT: improve & complete JIT for some set of subsystems
  from alpha to Z8000 i.e. several pieces, one per platform</li>

  <li>Parrot threads: STM (software transactional memory as in GHC, et al.) for Parrot</li>


</ul>
{'fraction_non_alphanumeric': 0.0904549239270305, 'fraction_numerical': 0.007418060706986602, 'mean_word_length': 3.092936802973978, 'pattern_counts': {'":': 0, '<': 263, '<?xml version=': 0, '>': 271, 'https://': 0, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 8, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4879864', 'n_tokens_mistral': 3949, 'n_tokens_neox': 3672, 'n_words': 1722}