diff --git a/GSoC-2014-Ideas.md b/GSoC-2014-Ideas.md index 5f19911..f741c46 100644 --- a/GSoC-2014-Ideas.md +++ b/GSoC-2014-Ideas.md @@ -7,9 +7,16 @@ Below is a list of project ideas for [GSoC](https://www.google-melange.com/gsoc/ ## Nimrod Compiler #### Add support for full coroutines - * Full coroutines in contrast to Nimrod's closure iterators can capture the full call stack. - * Needs inline assembler to implement the stack switching. - * The GC needs to support conservative marking of multiple stacks + +**Description:** + * Many programming languages, in particular Lua, offer coroutines as way to provide light-weight collaborative tasking. Nimrod supports "closure iterators" which are comparable to Python's generators to accomplish the same. + * However closure iterators are much more limited as they cannot capture the call stack completely. + * The best example to see the limitations of Nimrod's current way is that iterators cannot be recursive. + +Here is a sketch of a possible implementation, but there are lots of other possibilities to implement full coroutines for Nimrod: + + * Implement the necessary stack switching via inline assembler. + * The GC needs to support conservative marking of multiple stacks. * In particular the write barrier in the GC which does the 'isOnStack' check needs to be changed. * Using a bloom filter for quick testing whether an address belongs to some stack is likely to pay off. * Creating a coroutine needs to register a new stack to the GC. @@ -50,9 +57,6 @@ provides configuration for the code generator and implements the logic of the ga **Mentor:** zahary ([@zah](http://github.com/zah)) -___ -#### Fix bugs with iterators/generics -... ___ #### Fix/Expand Nimrod's "Compiler as a Service" features @@ -228,6 +232,8 @@ Babel is the Nimrod package manager. It is currently very basic and some importa **Mentor:** dom96 ([@dom96](http://github.com/dom96)) ___ #### Implement re2nim, a lexer generator for nimrod + +**Description:** * Model it after re2c or the Ragel state machine generator * Alternatively model it after Flex. @@ -240,6 +246,9 @@ ___ **Mentor:** zahary ([@zah](http://github.com/zah)) ___ #### Implement a Nimrod backend for the Ragel state machine generator + +**Description:** + * Ragel is a widely used state machine generator which supports C, C++ etc. But not Nimrod. So let's change that. * http://www.complang.org/ragel/ **Skill Requirements**: Knowledge of Ragel's internals.