Updated GSoC 2015 Ideas (markdown)

This commit is contained in:
Dennis Felsing 2015-02-20 06:38:24 +01:00
parent f9bb1c0d7e
commit ab019e9ec1
1 changed files with 39 additions and 31 deletions

View File

@ -36,7 +36,7 @@ The following list of projects are just some ideas that the community and the de
#### Create a new REPL for Nim using TinyCC #### Create a new REPL for Nim using TinyCC
**Desirable skills:** Experience with C and with REPLs in other languages (Python, GHCi, ...) **Desirable Skills:** Experience with C and with REPLs in other languages (Python, GHCi, ...)
**Description:** **Description:**
@ -66,7 +66,7 @@ library.
___ ___
#### Make Nim a viable research platform for Garbage Collection algorithms #### Make Nim a viable research platform for Garbage Collection algorithms
**Desirable skills:** Familiarity with the various GC approaches and algorithms, knowledge of the compiler codegen modules. **Desirable Skills:** Familiarity with the various GC approaches and algorithms, knowledge of the compiler codegen modules.
**Description:** **Description:**
@ -93,7 +93,7 @@ provides configuration for the code generator and implements the logic of the ga
___ ___
#### Add a code generator for OpenCL #### Add a code generator for OpenCL
**Desirable skills:** Good OpenCL knowledge, knowledge of the compiler internals, basics of type theory. **Desirable Skills:** Good OpenCL knowledge, knowledge of the compiler internals, basics of type theory.
**Description:** **Description:**
@ -117,7 +117,7 @@ The vision is a ``gpu`` pragma that means a proc and all of its dependencies are
___ ___
#### Improve the JavaScript Backend #### Improve the JavaScript Backend
**Desirable skills:** Familiarity with JavaScript. **Desirable Skills:** Familiarity with JavaScript.
**Description:** **Description:**
@ -147,7 +147,7 @@ examples](https://github.com/def-/nim-unsorted) with the JS backend.
___ ___
#### A strong theoretical foundation for Nim's parallel statement #### A strong theoretical foundation for Nim's parallel statement
**Desirable skills**: Knowledge of optimizers. **Desirable Skills**: Knowledge of optimizers.
**Description:** **Description:**
@ -198,7 +198,7 @@ Here is a sketch of a possible implementation:
#### Enhance and expand the standard library documentation #### Enhance and expand the standard library documentation
**Desirable skills:** Basic writing and documentation skills, webdesign and infrastructure setup. **Desirable Skills:** Basic writing and documentation skills, webdesign and infrastructure setup.
**Description**: **Description**:
The [Nim documentation](http://nim-lang.org/lib.html) is generally good but it The [Nim documentation](http://nim-lang.org/lib.html) is generally good but it
@ -215,19 +215,19 @@ as well.
**Tasks:** **Tasks:**
* Ensure that documentation exists for all public methods and modules * Ensure that documentation exists for all public methods and modules.
* Add code examples to all modules and to all procedures (where appropriate) * Add code examples to all modules and to all procedures (where appropriate).
* Add search capabilities to the online documentation * Add search capabilities to the online documentation.
* Improve the website design and usability * Improve the website design and usability.
* Add cross-linking capabilities in nim doc * Add cross-linking capabilities in nim doc.
* Make nimble build and install the documentation locally so you have * Make nimble build and install the documentation locally so you have.
docs of all your installed libraries docs of all your installed libraries.
* Automatically create online documentation of each nimble package * Automatically create online documentation of each nimble package.
**Bonus Points:** **Bonus Points:**
* Implement testing of the examples in the documentation into the ``testament`` test suite. * Implement testing of the examples in the documentation into the ``testament`` test suite.
**Expected Result:** Documentation of Nim is improved, can be used more easily **Expected Result:** Documentation of Nim is improved, can be used more easily.
**Difficulty:** Easy to Medium (depending on the scope) **Difficulty:** Easy to Medium (depending on the scope)
@ -236,6 +236,8 @@ as well.
___ ___
#### Benchmarking library #### Benchmarking library
**Desirable Skills:** Experience with benchmarking, ability to create modern websites.
A high quality benchmarking library is a must for a high performance language. A high quality benchmarking library is a must for a high performance language.
Time, memory usage, and utilization of each CPU core can be interesting metrics Time, memory usage, and utilization of each CPU core can be interesting metrics
to measure. It should be possible to compare different implementations with a to measure. It should be possible to compare different implementations with a
@ -264,6 +266,8 @@ combinations of these.
___ ___
#### High level game library #### High level game library
**Desirable Skills:** Experience with writing games and using other game libraries.
The Nim language is a good fit for writing games because of its high The Nim language is a good fit for writing games because of its high
performance, script-like programming style and [controllable garbage performance, script-like programming style and [controllable garbage
collector](http://nim-lang.org/gc.html). There are many wrappers for existing collector](http://nim-lang.org/gc.html). There are many wrappers for existing
@ -292,6 +296,8 @@ like [Piston](https://github.com/PistonDevelopers/piston).
___ ___
#### MPI support #### MPI support
**Desirable Skills:** Knowledge of MPI.
Message Passing Interface (MPI) is a portable system for writing highly Message Passing Interface (MPI) is a portable system for writing highly
parallel programs. These programs can run on a single computer as well as on a parallel programs. These programs can run on a single computer as well as on a
whole cluster, where messages are sent over the network. Nim, with its whole cluster, where messages are sent over the network. Nim, with its
@ -303,12 +309,12 @@ verbose, and to make its use feel more Nim-like, a high level library should
then be written. then be written.
**Tasks**: **Tasks**:
* Create a low level wrapper of a C library for the MPI standard using `c2nim` * Create a low level wrapper of a C library for the MPI standard using `c2nim`.
* Write a high level abstraction library for comfortable MPI in Nim * Write a high level abstraction library for comfortable MPI in Nim.
* Implement simple programs/benchmarks using this MPI library, demonstrating its usability and performance * Implement simple programs/benchmarks using this MPI library, demonstrating its usability and performance.
* Test the created libraries and publish them * Test the created libraries and publish them.
**Expected Result:** Nim programs can be make use of MPI parallelization **Expected Result:** Nim programs can be make use of MPI parallelization.
**Difficulty:** Easy **Difficulty:** Easy
@ -318,6 +324,8 @@ then be written.
#### nimfmt: Automatically format Nim code #### nimfmt: Automatically format Nim code
**Desirable Skills:** Some compiler internals knowledge.
Gofmt is often cited as one of the major points for the Go programming Gofmt is often cited as one of the major points for the Go programming
language. It completely eliminates the need to manually adhere to style language. It completely eliminates the need to manually adhere to style
formatting, by automatically converting Go code into a consistent style. formatting, by automatically converting Go code into a consistent style.
@ -341,7 +349,7 @@ extend this or at least use it as inspiration.
___ ___
#### c2nim: Improve the automation of low-level C bindings #### c2nim: Improve the automation of low-level C bindings
**Desirable skills:** Knowledge of C **Desirable Skills:** Knowledge of C.
**Description**: **Description**:
Nim's [c2nim tool](https://github.com/nim-lang/c2nim/) helps create Nim bindings for C libraries. However, c2nim does not parse the whole C language, and is not currently supposed to import whole APIs into Nim mechanically, but rather to serve as a starting point for manual definition of interfaces to C libraries. c2nim is particularly effective in dealing with C's preprocessor macros, but is Nim's [c2nim tool](https://github.com/nim-lang/c2nim/) helps create Nim bindings for C libraries. However, c2nim does not parse the whole C language, and is not currently supposed to import whole APIs into Nim mechanically, but rather to serve as a starting point for manual definition of interfaces to C libraries. c2nim is particularly effective in dealing with C's preprocessor macros, but is
@ -371,20 +379,20 @@ or:
___ ___
#### Implement re2nim, a lexer generator for Nim #### Implement re2nim, a lexer generator for Nim
**Desirable skills**: Knowledge of lexer generators. How to translate regexes into DFAs and how to optimize the resulting automatons. **Desirable Skills**: Knowledge of lexer generators. How to translate regexes into DFAs and how to optimize the resulting automatons.
**Description:** **Description:**
Lexer generators are useful tools for writing all sorts of parsers. Currently Nim lacks a native Lexer generators. This project involves the implementation of a lexer generator. It should be modelled after [re2c](http://re2c.org/) or alternatively it can be based on the wide number of existing lexer generators such as Flex. Lexer generators are useful tools for writing all sorts of parsers. Currently Nim lacks a native Lexer generators. This project involves the implementation of a lexer generator. It should be modelled after [re2c](http://re2c.org/) or alternatively it can be based on the wide number of existing lexer generators such as Flex.
Here is a sketch of a possible implementation: Here is a sketch of a possible implementation:
* Parse regular expressions into an NFA and ensure the attached Nim actions are kept around through the next different passes. * Parse regular expressions into an NFA and ensure the attached Nim actions are kept around through the next different passes.
* Translate the NFA to an DFA: http://web.cecs.pdx.edu/~harry/compilers/slides/LexicalPart3.pdf * Translate the NFA to an DFA: http://web.cecs.pdx.edu/~harry/compilers/slides/LexicalPart3.pdf .
* Minimize the DFA with Hopcroft's algorithm: http://en.wikipedia.org/wiki/DFA_minimization * Minimize the DFA with Hopcroft's algorithm: http://en.wikipedia.org/wiki/DFA_minimization .
* Translate the DFA into Nim code and attach the actions. * Translate the DFA into Nim code and attach the actions.
**Expected Result:** A library that can be used to easily create a lexer **Expected Result:** A library that can be used to easily create a lexer.
**Difficulty:** Medium to Hard **Difficulty:** Medium to Hard
@ -393,18 +401,18 @@ Here is a sketch of a possible implementation:
___ ___
#### Implement a Nim backend for the Ragel state machine compiler #### Implement a Nim backend for the Ragel state machine compiler
**Desirable skills**: Knowledge of Ragel's internals, C programming. **Desirable Skills**: Knowledge of Ragel's internals, C programming.
**Description:** **Description:**
[Ragel](http://www.complang.org/ragel/) is a "finite-state machine compiler with output support for C, C++, C#, Objective-C, D, Java, OCaml, Go, and Ruby source code." This project involves the implementation of a Nim backend for Ragel. This can be based on the large number of pre-existing backends listed previously. Ragel itself is written in C, so C programming should be familiar to you. Ragel embeds code in the backend language directly and then generates a regular source code file from this. Ideally the new Nim backend would end upstream in Ragel, but alternatively we can maintain it ourselves. [Ragel](http://www.complang.org/ragel/) is a "finite-state machine compiler with output support for C, C++, C#, Objective-C, D, Java, OCaml, Go, and Ruby source code." This project involves the implementation of a Nim backend for Ragel. This can be based on the large number of pre-existing backends listed previously. Ragel itself is written in C, so C programming should be familiar to you. Ragel embeds code in the backend language directly and then generates a regular source code file from this. Ideally the new Nim backend would end upstream in Ragel, but alternatively we can maintain it ourselves.
**Tasks:** **Tasks:**
* Become familiar with the template format used by Ragel and Ragel internals by studying how it works with other language backends * Become familiar with the template format used by Ragel and Ragel internals by studying how it works with other language backends.
* Implement a Nim backend for Ragel * Implement a Nim backend for Ragel.
* Create interesting test cases to show how to use Ragel for protocol implementations, data format parsing, lexical analysis, ... * Create interesting test cases to show how to use Ragel for protocol implementations, data format parsing, lexical analysis, ...
**Expected Result:** Easy to use finite state machines in Nim **Expected Result:** Easy to use finite state machines in Nim.
**Difficulty:** Easy **Difficulty:** Easy
@ -419,7 +427,7 @@ Please add your project ideas in the following format.
#### Title #### Title
**Desirable skills:** **Desirable Skills:**
**Description:** **Description:**