spell check
This commit is contained in:
parent
2ecf56423d
commit
a569f6b042
|
@ -3,7 +3,7 @@ Below is a list of project ideas for [GSoC 2015](https://www.google-melange.com/
|
||||||
|
|
||||||
[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.
|
||||||
|
|
||||||
Areas of the project you may wish to work on include the [Nim compiler](#wiki-nim-compiler) which is itself written in Nim, Nim's [standard library](#wiki-standard-library) and/or the [tools and infrastructure](#wiki-tools--infrastructure) of Nim which includes the Nim build farm (Nimbuild) and the Nim package manager (nimble).
|
Areas of the project you may wish to work on include the [Nim compiler](#wiki-nim-compiler) which is itself written in Nim, Nim's [standard library](#wiki-standard-library) and/or the [tools and infrastructure](#wiki-tools--infrastructure) of Nim which includes the Nim package manager (nimble).
|
||||||
|
|
||||||
To get started you will need to clone the Nim repository and then subsequently bootstrap the compiler, instructions for doing this are located [here](https://github.com/Araq/Nim#compiling). You can then move onto the [tutorial](http://nim-lang.org/tut1.html) and read through the [other documentation](http://nim-lang.org/documentation.html) as well.
|
To get started you will need to clone the Nim repository and then subsequently bootstrap the compiler, instructions for doing this are located [here](https://github.com/Araq/Nim#compiling). You can then move onto the [tutorial](http://nim-lang.org/tut1.html) and read through the [other documentation](http://nim-lang.org/documentation.html) as well.
|
||||||
|
|
||||||
|
@ -135,7 +135,7 @@ examples](https://github.com/def-/nim-unsorted) with the JS backend.
|
||||||
* 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 targeting `asm.js`.
|
||||||
* Write a library for communication between client-side Nim (compiled to JavaScript) and server-side Nim (compiled to C).
|
* Write a library for communication between client-side Nim (compiled to JavaScript) and server-side Nim (compiled to C).
|
||||||
|
|
||||||
**Expected Result:** Nim becomes more usable for client-side website development.
|
**Expected Result:** Nim becomes more usable for client-side website development.
|
||||||
|
@ -154,12 +154,12 @@ ___
|
||||||
Nim uses a fresh idea to model fork&join parallelism via its ``parallel``
|
Nim uses a fresh idea to model fork&join parallelism via its ``parallel``
|
||||||
builtin that performs a range of additional checks at compile-time
|
builtin that performs a range of additional checks at compile-time
|
||||||
like array bounds checking or the so called "disjoint check". The disjoint
|
like array bounds checking or the so called "disjoint check". The disjoint
|
||||||
check ensures the datasets are disjoint; that means every processed element is
|
check ensures the data sets are disjoint; that means every processed element is
|
||||||
only accessed by one worker. This way no locking is required and yet (memory)
|
only accessed by one worker. This way no locking is required and yet (memory)
|
||||||
safety is guaranteed.
|
safety is guaranteed.
|
||||||
|
|
||||||
Unfortunately, how exactly this checking is performed is not
|
Unfortunately, how exactly this checking is performed is not
|
||||||
yet documented: It's done in a pretty adhoc fashion that mostly uses
|
yet documented: It's done in a pretty ad hoc fashion that mostly uses
|
||||||
the transitivity of inequality relations and some simple control flow analysis.
|
the transitivity of inequality relations and some simple control flow analysis.
|
||||||
|
|
||||||
However, in the context of *optimization* and code generation there has been
|
However, in the context of *optimization* and code generation there has been
|
||||||
|
@ -184,7 +184,7 @@ Here is a sketch of a possible implementation:
|
||||||
|
|
||||||
* Implement an AST to polyhedral model transformation.
|
* Implement an AST to polyhedral model transformation.
|
||||||
* Implement a semantic checking pass that works on the polyhedral model and
|
* Implement a semantic checking pass that works on the polyhedral model and
|
||||||
proves array bounds correct as well as that the datasets are disjoint.
|
proves array bounds correct as well as that the data sets are disjoint.
|
||||||
* In addition to that it needs to be proven that the code is free
|
* In addition to that it needs to be proven that the code is free
|
||||||
of "write after write" or "write after read" etc. conflicts.
|
of "write after write" or "write after read" etc. conflicts.
|
||||||
|
|
||||||
|
@ -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, web design 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
|
||||||
|
@ -319,7 +319,7 @@ libraries like OpenMPI or MPICH. Afterwards it will be interesting how to deal
|
||||||
with the C preprocessor macros specifying the differences between MPI
|
with the C preprocessor macros specifying the differences between MPI
|
||||||
implementations. You will need to investigate whether a solution such as [in
|
implementations. You will need to investigate whether a solution such as [in
|
||||||
Julia](https://github.com/lcw/MPI.jl/blob/master/deps/make_f_const.f) will be
|
Julia](https://github.com/lcw/MPI.jl/blob/master/deps/make_f_const.f) will be
|
||||||
necessary to create a custom wrapper for each MPI implementation. Preferrably
|
necessary to create a custom wrapper for each MPI implementation. Preferably
|
||||||
this would be solved directly with Nim's capabilities, and the close relation
|
this would be solved directly with Nim's capabilities, and the close relation
|
||||||
to C could come in handy here.
|
to C could come in handy here.
|
||||||
|
|
||||||
|
@ -402,7 +402,7 @@ ___
|
||||||
|
|
||||||
**Description:**
|
**Description:**
|
||||||
|
|
||||||
Lexer generators are useful tools for writing all sorts of parsers. Currently Nim lacks 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 native lexer generators. This project involves the implementation of a lexer generator. It should be modeled 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:
|
||||||
|
|
||||||
|
@ -424,7 +424,7 @@ ___
|
||||||
|
|
||||||
**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 preexisting 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.
|
||||||
|
|
Loading…
Reference in New Issue