Some more ideas

This commit is contained in:
Dennis Felsing 2015-02-11 13:46:28 +01:00
parent b03393e30c
commit 634a7cc96f
1 changed files with 98 additions and 20 deletions

View File

@ -15,6 +15,59 @@ The following list of projects are just some ideas that the community and the de
## Nim Compiler
#### Create a new REPL for Nim using TinyCC
**Desirable skills:** Experience with C and with REPLs in other languages (Python, GHCi, ...)
**Description:**
A REPL (read-eval-print loop) can be an valuable tool while exploring a
language, new libraries and during regular development, as it allows faster
feedback than creating source code files, saving them after each change, and
reexecuting.
Nim provides a simple REPL based on its compile-time Virtual Machine, but it is
not adequate. For example importing C based code does not work.
An alternative approach is the development of a new REPL that actually compiles
the entered code to C and then used TinyCC to immediately execute this code.
TinyCC is well suited for this as it can execute C code very quickly.
**Tasks:**
* Add a simple TinyCC based REPL for Nim.
* Make sure common Nim code works as well as importing C based libraries
* Improve its performance
**Difficulty:** Medium to Hard
**Mentor:** def- ([@def-](http://github.com/def-)), Araq ([@Araq](https://github.com/Araq))
#### Create an online compiler for Nim
**Desirable skills:**
**Description:**
Often people want to play around with a language without actually installing
it. This idea aims to help these people by providing an online compiler for
Nim, that can be used on any website.
Create a web application that can be used for compiling and running Nim code.
The code should be compiled and ran on a server. Users should be able to enter
any Nim code they want and use common libraries.
(TODO: Link to similar stuff, like Rust)
**Tasks:**
* Implement an online compiler
* Make sure it is secure
**Difficulty:** Easy to Medium
**Mentor:** def- ([@def-](http://github.com/def-))
___
___
#### 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.
@ -93,7 +146,15 @@ with learning about Nim compiler internals.
**Description**:
The [Nim documentation](http://nim-lang.org/lib.html) is generally good but it
lacks helpful code examples. Writing documentation is also a great way to get a better understanding for Nim. [Read the docs](https://readthedocs.org/) is a good example of attractive as well as readable documentation, it is something we would be after in this project.
needs to be made more accessible and lacks helpful code examples. Writing
documentation is also a great way to get a better understanding of Nim. [Read
the docs](https://readthedocs.org/) is a good example of attractive as well as
readable documentation, it is something we would be after in this project.
Additionally the documentation should be generated more automatically. The
documentation of each nimble package should automatically be available online,
similar to Hackage. Upon installation of a library with nimble, its
documentation should be installed on the system as well.
**Tasks:**
@ -104,33 +165,18 @@ lacks helpful code examples. Writing documentation is also a great way to get a
* 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 an online documentation of each nimble package
**Difficulty:** Medium
**Mentor:** def- ([@def-](http://github.com/def-))
___
#### Improve times module
**Desirable skills:** Knowledge of date time representations, native time APIs.
#### Xpath like support for macros
**Description**:
TODO: Fill out
The current times module lacks some useful features. The ability to tell how long ago a certain time occurred is for example missing. This should be implemented using the existing ``TimeInterval`` type which provides a ``-`` operator for subtracting two ``TimeInfo`` values. A bug exists in this implementation however which prevents this operation from working in the Julian calendar, this should be
fixed.
Some research is also required in this task. Other languages should be looked at to see what their standard library provides in terms of time handling. Features from those languages should be ideally ported over to Nim.
**Tasks**:
* Fix limitations to do with time intervals, specifically subtracting a ``TimeInterval`` from a ``TimeInfo``.
* Provide a ``$`` for ``TimeInterval``. Goal is to be able to get timing info like "5 minutes ago".
* Look at time handling in other languages and implement missing features.
**Bonus Points**: Ensure that the times module works with the JavaScript backend.
**Difficulty:** Medium
**Mentor:** def- ([@def-](http://github.com/def-))
**Mentor:** Araq ([@Araq](http://github.com/Araq))
___
#### MPI support
@ -195,6 +241,38 @@ or:
**Mentor:** Araq ([@Araq](https://github.com/Araq)), def- ([@def-](http://github.com/def-))
___
#### Implement re2nim, a lexer generator for nimrod
**Description:**
Lexer generators are useful tools for writing all sorts of parsers. Currently Nimrod 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 Nimrod 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 DFA into Nimrod code and attach the actions.
**Desirable skills**: Knowledge of lexer generators. How to translate regexes into DFAs and how to optimize the resulting automatons.
**Difficulty:** Medium to Hard
**Mentor:** zahary ([@zah](http://github.com/zah))
___
#### Implement a Nimrod backend for the Ragel state machine generator
**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 Nimrod backend for Ragel. This can be based on the large number of pre-existing backends listed previously.
**Desirable skills**: Knowledge of Ragel's internals.
**Difficulty:** Medium
**Mentor:** zahary ([@zah](http://github.com/zah))
# Project spec