Updated GSoC 2015 Ideas (markdown)
This commit is contained in:
parent
f9bb1c0d7e
commit
ab019e9ec1
|
@ -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:**
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue