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
**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:**
@ -66,7 +66,7 @@ library.
___
#### 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:**
@ -93,7 +93,7 @@ provides configuration for the code generator and implements the logic of the ga
___
#### 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:**
@ -117,7 +117,7 @@ The vision is a ``gpu`` pragma that means a proc and all of its dependencies are
___
#### Improve the JavaScript Backend
**Desirable skills:** Familiarity with JavaScript.
**Desirable Skills:** Familiarity with JavaScript.
**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
**Desirable skills**: Knowledge of optimizers.
**Desirable Skills**: Knowledge of optimizers.
**Description:**
@ -198,7 +198,7 @@ Here is a sketch of a possible implementation:
#### 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**:
The [Nim documentation](http://nim-lang.org/lib.html) is generally good but it
@ -215,19 +215,19 @@ as well.
**Tasks:**
* Ensure that documentation exists for all public methods and modules
* Add code examples to all modules and to all procedures (where appropriate)
* Add search capabilities to the online documentation
* Improve the website design and usability
* Add cross-linking capabilities in nim doc
* Make nimble build and install the documentation locally so you have
docs of all your installed libraries
* Automatically create online documentation of each nimble package
* Ensure that documentation exists for all public methods and modules.
* Add code examples to all modules and to all procedures (where appropriate).
* Add search capabilities to the online documentation.
* Improve the website design and usability.
* Add cross-linking capabilities in nim doc.
* Make nimble build and install the documentation locally so you have.
docs of all your installed libraries.
* Automatically create online documentation of each nimble package.
**Bonus Points:**
* 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)
@ -236,6 +236,8 @@ as well.
___
#### 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.
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
@ -264,6 +266,8 @@ combinations of these.
___
#### 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
performance, script-like programming style and [controllable garbage
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
**Desirable Skills:** Knowledge of MPI.
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
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.
**Tasks**:
* 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
* Implement simple programs/benchmarks using this MPI library, demonstrating its usability and performance
* Test the created libraries and publish them
* 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.
* Implement simple programs/benchmarks using this MPI library, demonstrating its usability and performance.
* 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
@ -318,6 +324,8 @@ then be written.
#### 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
language. It completely eliminates the need to manually adhere to 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
**Desirable skills:** Knowledge of C
**Desirable Skills:** Knowledge of C.
**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
@ -371,20 +379,20 @@ or:
___
#### 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:**
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:
* 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
* Minimize the DFA with Hopcroft's algorithm: http://en.wikipedia.org/wiki/DFA_minimization
* 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 .
* 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
@ -393,18 +401,18 @@ Here is a sketch of a possible implementation:
___
#### 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:**
[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:**
* 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
* 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.
* 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
@ -419,7 +427,7 @@ Please add your project ideas in the following format.
#### Title
**Desirable skills:**
**Desirable Skills:**
**Description:**