46 lines
2.6 KiB
Markdown
46 lines
2.6 KiB
Markdown
# Introduction
|
|
Below is a list of project ideas for the 2014 GSoC Application for Nimrod. You will need to spend a considerable amount of time experimenting with the Nimrod programming language before you attempt these projects.
|
|
|
|
# Projects
|
|
|
|
## 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
|
|
* 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.
|
|
* Deleting a coroutine needs to unregister the stack to the GC.
|
|
* Builtin 'yld' must save the current stack pointer so that the GC knows which part of the stack is really in use.
|
|
|
|
**Fix bugs with iterators/generics**
|
|
**Fix/Expand Compiler as a Service features**
|
|
|
|
## Standard Library
|
|
**Integrate and expand new async io module**
|
|
|
|
**Enhance the filesystem monitoring module "fsmonitor.nim"**
|
|
* Allow the fsmonitor module to work on Windows by using native api's to gather information about changes in monitored files and directories.
|
|
* Revise the fsmonitor module api to decouple unix/linux file handle paradigms (such as using sockets.poll) from the api, allowing easier implementations of native backends.
|
|
* Integrate the fsmonitor module's polling mechanism into the new asynchronous io modules.
|
|
|
|
**Add a cross-platform stat()-like procedure to the operating system module "os.nim"**
|
|
* Implement a procedure which uses native stat-like calls on Linux, Mac, Windows, and other operating systems to gather detailed information about specific file system objects. Allow the bypassing of symlinks and hardlinks, where possible.
|
|
|
|
**Enhance and expand standard library documentation**
|
|
* Ensure that documentation exists for all public methods and modules
|
|
* Create and design new CSS and HTML layouts for the documentation, to better fit with the main website
|
|
* Add search capabilities to the documentation
|
|
|
|
## Tools & Infrastructure
|
|
**Update and refactor nimrod builder**
|
|
* Reduce the number of assumptions the nimrod builder makes about its host system, in order to reduce configuration restrictions. Assumptions include location and usage of external tools, such as git.
|
|
|
|
**Implement re2nim, a lexer generator for nimrod**
|
|
* Model it after re2c or the Ragel state machine generator
|
|
|
|
**Implement a Nimrod backend for the Ragel state machine generator**
|
|
* http://www.complang.org/ragel/
|
|
|