Tasks for coursework
It would be much better if the student understood that he was doing the right thing, for which many people would be grateful to him. One way to achieve this is by participating in popular open source projects related to his specialty. Good candidates are projects to create compilers / interpreters of programming languages, as these are high-tech projects (type inference algorithms, PEG, monads, type theory ...) and objectively useful projects (if the language is quite popular).
As you might have guessed, I suggest participating in the development of the Nemerle language. This is a rather unique project, since it is on a par with a language like scala, it is supported by people from Russia, and it is not yet so popular that it would be possible to avoid breaking changes with all its might.
Below I have listed some tasks that have not yet been implemented, but which are in terms of development
- Coroutine support through source code transformation, as done in scala since version 2.8. This task can be implemented entirely through macros without changing the compiler itself ( details )
- Add a parser of C # files so that you can use Nemerle on existing C # projects and use existing designers and auto-generators
I am not a Nemerle developer, but I use it in my thesis and am interested in its development. For all the details, you can contact the Nemerle forum on rsdn. The Nemerle repository is open for reading, so you can study it now. The language itself is simple, and a person who knows C # can quickly (a few days) understand its basics.