nim-wiki/GSoC-2014-Ideas.md

146 lines
7.2 KiB
Markdown
Raw Normal View History

2014-02-10 20:48:10 +00:00
# Introduction
2014-02-11 21:02:54 +00:00
Below is a list of project ideas for [GSoC](https://www.google-melange.com/gsoc/homepage/google/gsoc2014) 2014. All these projects require familiarity with the Nimrod programming, or at minimum, experience with similar programming languages such as C, C#, Java, Python, etc.
2014-02-10 20:48:10 +00:00
2014-02-11 19:57:35 +00:00
**Note** - Any ideas to be added to this page must be placed in a relevant category, have a title, a line stating needed/preferred skills for the idea, and a summary of what the idea is.
2014-02-10 20:48:10 +00:00
# Projects
## Nimrod Compiler
#### Add support for full coroutines
2014-02-10 23:00:20 +00:00
* 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.
2014-02-11 21:42:57 +00:00
**Mentor:** Araq ([@Araq](http://github.com/Araq))
#### Add a code generator for OpenCL
2014-02-10 23:09:38 +00:00
#### Fix bugs with iterators/generics
2014-02-10 23:03:46 +00:00
...
#### Fix/Expand Nimrod's "Compiler as a Service" features
2014-02-11 21:10:07 +00:00
**Skill Requirements:** Command line argument parsing, minimal knowledge of compiler internals and theory.
2014-02-11 21:13:34 +00:00
2014-02-11 21:12:54 +00:00
**Description:**
2014-02-11 02:15:15 +00:00
* Fix https://github.com/Araq/Nimrod/issues/804, which makes `idetools` unusable.
2014-02-11 21:09:18 +00:00
* Provide commands to execute macros. Allow IDEs to quickly get the code macros generate with different inputs.
* Allow the compiler to either track more than one project at a time, or not track any project at all.
2014-02-10 23:03:46 +00:00
2014-02-11 21:10:07 +00:00
**Bonus points:** Implement "Compiler as a Service" support to major IDEs/text editors such as Light Table, Sublime Text, or Visual Studio.
2014-02-11 21:09:18 +00:00
2014-02-11 21:42:57 +00:00
**Mentor:** zahary ([@zah](http://github.com/zah))
#### Allow bootstrap-time integration of the Nimrod executable with the standard library
2014-02-11 21:12:54 +00:00
**Skill Requirements:** Knowledge of file system api's, knowledge of compiler internals and theory.
2014-02-11 21:13:34 +00:00
2014-02-11 21:12:54 +00:00
**Description**:
2014-02-11 21:14:43 +00:00
* Allow the nimrod bootstrap process to integrate the nimrod standard library source code and other associated resources into the nimrod binary, to be used by the nimrod binary when compiling source code. The included library modules should be overridable, either by a switch passed to the nimrod executable, or by placing an actual library file in a pre-determined path.
2014-02-10 23:03:46 +00:00
2014-02-11 21:48:55 +00:00
**Mentor:** zahary ([@zah](http://github.com/zah))
2014-02-10 20:48:10 +00:00
## Standard Library
2014-02-11 21:20:03 +00:00
#### Implement a YAML parser library
**Skill Requirements:** Ability to write efficient parsers.
**Description**:
The Nimrod standard library currently lacks a YAML parsing module. This task requires you to read the YAML specification and to create a module which will be able to parse YAML data into an AST. Subsequently the parser can be used to create a high-level API to access the data.
2014-02-11 21:48:55 +00:00
**Mentor:** Araq ([@Araq](http://github.com/Araq))
2014-02-11 18:50:07 +00:00
#### Enhance the filesystem monitoring module "fsmonitor.nim"
2014-02-11 21:12:54 +00:00
**Skill Requirements:** Knowledge of the Microsoft Windows api.
2014-02-11 21:13:34 +00:00
2014-02-11 21:12:54 +00:00
**Description**:
2014-02-11 18:50:07 +00:00
* Allow the fsmonitor module to work on Microsoft 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 the poll method in in the sockets module) from the api, allowing easier implementations of multiple native backends.
2014-02-10 22:35:56 +00:00
* Integrate the fsmonitor module's polling mechanism into the new asynchronous io modules.
2014-02-10 22:25:41 +00:00
2014-02-11 21:48:55 +00:00
**Mentor:** dom96 ([@dom96](http://github.com/dom96))
#### Add a cross-platform stat()-like procedure to the operating system module "os.nim"
2014-02-11 21:12:54 +00:00
**Skill Requirements:** Knowledge of file system api's for Linux, MacOSX, or Microsoft Windows.
2014-02-11 21:13:34 +00:00
2014-02-11 21:12:54 +00:00
**Description:**
2014-02-10 22:35:56 +00:00
* 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.
2014-02-11 21:49:58 +00:00
**Mentor:** dom96 ([@dom96](http://github.com/dom96))
#### Enhance and expand standard library documentation
2014-02-11 21:12:54 +00:00
**Skill Requirements:** Basic writing and documentation skills, web design and infrastructure setup.
2014-02-11 21:13:34 +00:00
2014-02-11 21:12:54 +00:00
**Description**:
* 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 online documentation.
2014-02-11 18:50:07 +00:00
2014-02-11 21:48:55 +00:00
**Mentor:** zahary ([@zah](http://github.com/zah))
#### Add documentation to the nimrod compiler internals
2014-02-11 21:12:54 +00:00
**Skill Requirements:** Basic writing and documentation skills.
2014-02-11 21:13:34 +00:00
2014-02-11 21:12:54 +00:00
**Description:**
2014-02-10 23:04:29 +00:00
* Add comments to the compiler internals, documenting the various mechansisms and mechanics the compiler uses to analyze and transform nimrod code to the code of the specified backend.
2014-02-11 21:42:57 +00:00
**Mentor:** Araq ([@Araq](http://github.com/Araq))
#### Improve times module
2014-02-11 21:12:54 +00:00
**Skill Requirements** Knowledge of date time representations, native time api's.
2014-02-11 21:13:34 +00:00
2014-02-11 21:12:54 +00:00
**Description**:
2014-02-11 00:18:18 +00:00
* Fix limitations to do with time intervals, specifically subtracting a TTimeInterval from a TTimeInfo.
* Provide a ``$`` for TTimeInterval. Goal is to be able to get timing info like "5 minutes ago".
2014-02-11 21:48:55 +00:00
**Mentor:** dom96 ([@dom96](http://github.com/dom96))
#### Add an implementation of the ISAAC psuedorandom number generator
2014-02-11 21:29:02 +00:00
**Skill Requirements:** Pseudo-Random number generation theory, C programming.
2014-02-11 21:13:34 +00:00
2014-02-11 21:12:54 +00:00
**Description:**
* Create a pure-nimrod implementation of the [[ISAAC Random Number Generator|http://burtleburtle.net/bob/rand/isaacafa.html]] .
2014-02-11 21:48:55 +00:00
**Mentor:** Araq ([@Araq](http://github.com/Araq)), dom96 ([@dom96](http://github.com/dom96))
#### Wrap and test the Qt framework
2014-02-11 21:29:02 +00:00
**Skill Requirements:** Knowledge of C++. Experience with the Qt framework is desirable.
2014-02-11 18:16:09 +00:00
2014-02-11 21:29:02 +00:00
**Description**:
* Wrap the [Qt framework](http://qt-project.org/) with the help of the c2nim tool, or otherwise.
* Write tests which use the wrapper.
**Bonus points:** Write high-level bindings which provide an idiomatic Nimrod API on top of the wrapper.
2014-02-11 21:42:57 +00:00
**Mentor:** Araq ([@Araq](http://github.com/Araq))
2014-02-11 21:29:02 +00:00
#### Wrap and test GTK3
**Skill Requirements:** Knowledge of C. Experience with the GTK+ is desirable.
**Description**:
* Wrap GTK3 with the help of the c2nim tool, or otherwise.
* Write tests which use the wrapper.
**Bonus Points:** Write high-level bindings which provide an idiomatic Nimrod API on top of the wrapper.
2014-02-11 00:19:05 +00:00
2014-02-11 21:48:55 +00:00
**Mentor:** dom96 ([@dom96](http://github.com/dom96))
2014-02-10 22:10:31 +00:00
## Tools & Infrastructure
#### Update and refactor nimrod builder
2014-02-11 21:12:54 +00:00
**Skill Requirements**: JSON parsing, modular program construction, inter-process communication.
2014-02-11 21:13:34 +00:00
2014-02-11 21:12:54 +00:00
**Description**:
2014-02-10 22:49:58 +00:00
* 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.
2014-02-11 21:48:55 +00:00
**Mentor:** dom96 ([@dom96](http://github.com/dom96))
#### Implement re2nim, a lexer generator for nimrod
2014-02-10 22:49:58 +00:00
* Model it after re2c or the Ragel state machine generator
#### Implement a Nimrod backend for the Ragel state machine generator
2014-02-10 22:49:58 +00:00
* http://www.complang.org/ragel/