Updated GSoC 2015 Ideas (markdown)
This commit is contained in:
parent
4d6df43c29
commit
ec278b500e
|
@ -1,5 +1,5 @@
|
|||
# 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.
|
||||
|
||||
|
@ -21,13 +21,11 @@ The following list of projects are just some ideas that the community and the de
|
|||
|
||||
**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
|
||||
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.
|
||||
feedback. Nim provides a simple REPL (nim i) 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 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:**
|
||||
* 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.
|
||||
* Improve its performance.
|
||||
* Make sure common Nim code works as well as importing C based libraries
|
||||
* Investigate how to reduce the overhead to improve performance
|
||||
|
||||
**Difficulty:** Medium to Hard
|
||||
|
||||
|
@ -61,7 +58,7 @@ any Nim code they want and use common libraries.
|
|||
|
||||
**Tasks:**
|
||||
* Implement an online compiler
|
||||
* Make sure it is secure
|
||||
* Make sure it is secure (jail, specify maximum of resources, ...)
|
||||
|
||||
**Difficulty:** Easy to Medium
|
||||
|
||||
|
@ -98,7 +95,7 @@ ___
|
|||
|
||||
**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.
|
||||
|
||||
|
@ -134,7 +131,7 @@ with learning about Nim compiler internals.
|
|||
* Make JS test cases.
|
||||
|
||||
**Bonus points:**
|
||||
* Speed up the JavaScript backend by targetting `asm.js`.
|
||||
* Speed up the JavaScript backend by targetting `asm.js`
|
||||
|
||||
**Difficulty:** Medium
|
||||
|
||||
|
@ -168,15 +165,22 @@ documentation should be installed on the system as well.
|
|||
docs of all your installed libraries
|
||||
* Automatically create an online documentation of each nimble package
|
||||
|
||||
**Difficulty:** Medium
|
||||
**Difficulty:** Easy to Medium
|
||||
|
||||
**Mentor:** def- ([@def-](http://github.com/def-))
|
||||
|
||||
___
|
||||
#### Xpath like support for macros
|
||||
|
||||
**Desirable skills:**
|
||||
|
||||
**Description:**
|
||||
TODO: Fill out
|
||||
|
||||
**Expected Result:**
|
||||
|
||||
**Difficulty:** ...
|
||||
|
||||
**Mentor:** Araq ([@Araq](http://github.com/Araq))
|
||||
|
||||
___
|
||||
|
@ -188,7 +192,7 @@ make a great language for this use.
|
|||
|
||||
**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
|
||||
|
||||
**Difficulty:** Medium
|
||||
|
@ -270,9 +274,9 @@ ___
|
|||
|
||||
**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
|
||||
|
@ -291,4 +295,4 @@ Please add your project ideas in the following format.
|
|||
|
||||
**Difficulty:** ...
|
||||
|
||||
**Mentor:** Mentor name ([@MentorName](http://github.com/MentorName))
|
||||
**Mentor:** Mentor name ([@MentorName](http://github.com/MentorName))
|
Loading…
Reference in New Issue