Updated GSoC 2015 Ideas (markdown)

This commit is contained in:
Dennis Felsing 2015-02-11 18:45:25 +01:00
parent 4d6df43c29
commit ec278b500e
1 changed files with 22 additions and 18 deletions

View File

@ -1,5 +1,5 @@
# Introduction # Introduction
Below is a list of project ideas for [GSoC](https://www.google-melange.com/gsoc/homepage/google/gsoc2015) 2015. These projects require familiarity with the Nim programming language so it is absolutely essential that you become familiar with Nim ahead of time. Below is a list of project ideas for [GSoC 2015](https://www.google-melange.com/gsoc/homepage/google/gsoc2015). These projects require familiarity with the Nim programming language so it is absolutely essential that you become familiar with Nim ahead of time.
[Nim](http://nim-lang.org) is a statically typed programming language which compiles primarily to C and has an excellent performance/productivity ratio. Nim's design focuses on efficiency, expressiveness, elegance. [Nim](http://nim-lang.org) is a statically typed programming language which compiles primarily to C and has an excellent performance/productivity ratio. Nim's design focuses on efficiency, expressiveness, elegance.
@ -21,13 +21,11 @@ The following list of projects are just some ideas that the community and the de
**Description:** **Description:**
A REPL (read-eval-print loop) can be an valuable tool while exploring a A REPL (read-eval-print loop) can be a valuable tool while exploring a
language, new libraries and during regular development, as it allows faster language, new libraries and during regular development, as it allows faster
feedback than creating source code files, saving them after each change, and feedback. Nim provides a simple REPL (nim i) based on its compile-time virtual
reexecuting. machine, but it is not adequate. For example importing C based code does not
work.
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 An alternative approach is the development of a new REPL that actually compiles
the entered code to C and then uses TinyCC to immediately execute this code. the entered code to C and then uses TinyCC to immediately execute this code.
@ -35,9 +33,8 @@ TinyCC is well suited for this as it can execute C code very quickly.
**Tasks:** **Tasks:**
* Add a simple TinyCC based REPL for Nim. * Add a simple TinyCC based REPL for Nim.
* Ensure that global state (that is: state stored in global variables) is kept during recompilations of the generated C code. This means the C codegen needs to emit some kind of getters and setters for global variable access. * Make sure common Nim code works as well as importing C based libraries
* Make sure common Nim code works as well as importing C based libraries. * Investigate how to reduce the overhead to improve performance
* Improve its performance.
**Difficulty:** Medium to Hard **Difficulty:** Medium to Hard
@ -61,7 +58,7 @@ any Nim code they want and use common libraries.
**Tasks:** **Tasks:**
* Implement an online compiler * Implement an online compiler
* Make sure it is secure * Make sure it is secure (jail, specify maximum of resources, ...)
**Difficulty:** Easy to Medium **Difficulty:** Easy to Medium
@ -98,7 +95,7 @@ ___
**Description:** **Description:**
Nim currently supports C, C++, Objective C and JavaScript code generation. However to run efficiently on GPUs an OpenCL backend is required. The easy way to do this is to copy OpenCL's low level mode of operation with its different ``private``, ``local``, ``global`` storage and simply provide a idiomatic syntax for OpenCL. So apart from syntactic sugar users get all of Nim's meta programming advantages plus good integration into Nim's infrastructure. Nim currently supports C, C++, Objective C and JavaScript code generation. However to run efficiently on GPUs an OpenCL backend is required. The easy way to do this is to copy OpenCL's low level mode of operation with its different ``private``, ``local``, ``global`` storage and simply provide a idiomatic syntax for OpenCL. So apart from syntactic sugar users get all of Nim's meta programming advantages plus good integration into Nim's infrastructure.
The vision is a ``gpu`` pragma that means a proc and all of its dependencies are translated into OpenCL instead of C but can be invoked from ordinary Nim code that is translated to C. The ``gpu`` code generator is allowed to only translate a subset of Nim, in particular things like function pointers that are not supported by OpenCL do not have to be supported. The compiler should produce a clean error message for unsupported features. The vision is a ``gpu`` pragma that means a proc and all of its dependencies are translated into OpenCL instead of C but can be invoked from ordinary Nim code that is translated to C. The ``gpu`` code generator is allowed to only translate a subset of Nim, in particular things like function pointers that are not supported by OpenCL do not have to be supported. The compiler should produce a clean error message for unsupported features.
@ -134,7 +131,7 @@ with learning about Nim compiler internals.
* Make JS test cases. * Make JS test cases.
**Bonus points:** **Bonus points:**
* Speed up the JavaScript backend by targetting `asm.js`. * Speed up the JavaScript backend by targetting `asm.js`
**Difficulty:** Medium **Difficulty:** Medium
@ -168,15 +165,22 @@ documentation should be installed on the system as well.
docs of all your installed libraries docs of all your installed libraries
* Automatically create an online documentation of each nimble package * Automatically create an online documentation of each nimble package
**Difficulty:** Medium **Difficulty:** Easy to Medium
**Mentor:** def- ([@def-](http://github.com/def-)) **Mentor:** def- ([@def-](http://github.com/def-))
___ ___
#### Xpath like support for macros #### Xpath like support for macros
**Desirable skills:**
**Description:**
TODO: Fill out TODO: Fill out
**Expected Result:**
**Difficulty:** ...
**Mentor:** Araq ([@Araq](http://github.com/Araq)) **Mentor:** Araq ([@Araq](http://github.com/Araq))
___ ___
@ -188,7 +192,7 @@ make a great language for this use.
**Tasks**: **Tasks**:
* Create a low level wrapper 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
**Difficulty:** Medium **Difficulty:** Medium
@ -270,9 +274,9 @@ ___
**Desirable skills**: Knowledge of Ragel's internals. **Desirable skills**: Knowledge of Ragel's internals.
**Difficulty:** Medium **Difficulty:** Easy
**Mentor:** zahary ([@zah](http://github.com/zah)) **Mentor:** def- ([@def-](http://github.com/def-))
# Project spec # Project spec
@ -291,4 +295,4 @@ Please add your project ideas in the following format.
**Difficulty:** ... **Difficulty:** ...
**Mentor:** Mentor name ([@MentorName](http://github.com/MentorName)) **Mentor:** Mentor name ([@MentorName](http://github.com/MentorName))