Difference between revisions of "GSOC 2017 Ideas"

From D Wiki
Jump to: navigation, search
(Sample GSoC Idea)
(Ideas)
Line 33: Line 33:
 
----
 
----
  
==== Project Desription:  ====  
+
==== Project Description:  ====  
 
The SDC project (https://github.com/deadalnix/SDC) is an effort to provide a D compiler as a library.
 
The SDC project (https://github.com/deadalnix/SDC) is an effort to provide a D compiler as a library.
 
Any ideas to further the development of this project are welcome, but for a student who would like a specific project we  
 
Any ideas to further the development of this project are welcome, but for a student who would like a specific project we  
Line 53: Line 53:
 
* You should familiarize yourself with classicial data structures for arrays and have knowledge of various schemes for table implementations, (it is worthwhile to read up on hopscotch and robin hood hashing).
 
* You should familiarize yourself with classicial data structures for arrays and have knowledge of various schemes for table implementations, (it is worthwhile to read up on hopscotch and robin hood hashing).
 
* SDC uses LLVM for code generation, so some familiarity with LLVM will be required (see http://llvm.org/docs/tutorial/index.html).
 
* SDC uses LLVM for code generation, so some familiarity with LLVM will be required (see http://llvm.org/docs/tutorial/index.html).
 +
  
 
==== Proposed Project Mentor: [http://wiki.dlang.org/GSOC_mentors#Amaury_Sechet Amaury Sechet] ====
 
==== Proposed Project Mentor: [http://wiki.dlang.org/GSOC_mentors#Amaury_Sechet Amaury Sechet] ====
 +
 +
=== Lowerer ===
 +
 +
==== Project Description:  ====
 +
This tool would "translate" compilable D code to compilable D code. See initial idea discussed in [https://issues.dlang.org/show_bug.cgi?id=5051 Issue 5051]. It would offer a variety of lowering services for purposes of tooling, debugging, and project management:
 +
 +
* do not output function bodies, <tt>.di</tt> style
 +
 +
* write deduced attributes for functions (useful when function bodies are not written)
 +
 +
* expand all possible mixins in the code
 +
 +
* execute lookup on all symbols and write the full symbol, e.g. <tt>writeln</tt> becomes <tt>.std.stdio.writeln</tt>
 +
 +
* explicitate all user-defined operators, e.g. <tt>a + b</tt> becomes <tt>a.opBinary!"+"(b)</tt>
 +
 +
* replace all wholesale <tt>import</tt>s with detailed <tt>import</tt>s that specify the symbols needed
 +
 +
* write specialized versions for all templates used within the module (this is likely to be tricky)
 +
 +
* lower all <tt>scope</tt> statements into <tt>try</tt> statements
 +
 +
* lower all <tt>foreach</tt> statements into <tt>for</tt> statements
 +
 +
* specify the exact symbols needed for each import statement (which means: if no symbols, the import is redundant - easy to mark as a warning by a subsequent tool)
 +
 +
* evaluate all <tt>static if</tt>s possible
 +
 +
* lower code using <tt>version()</tt>, i.e. make the unused branch disappear
 +
 +
* make all comments disappear
 +
 +
* make only non-documentation comments disappear
 +
 +
* evaluate all possible CTFEs (tricky)
 +
 +
* introduce named values instead of temporaries wherever order of evaluations is defined.
 +
 +
==== Level of Difficulty ====
 +
TODO
 +
 +
==== Its Good To Know ====
 +
* TODO
 +
 +
==== Proposed Project Mentors: [http://wiki.dlang.org/GSOC_mentors#  TBD] ====
 +
 +
 +
=== <tt>fork()</tt>-based Garbage Collector ===
 +
 +
==== Project Description:  ====
 +
Gustavo Rodriguez-Rivera and Vincent Russo authored a [https://www.cs.purdue.edu/homes/grr/snapshot-gc.pdf paper] on an interesting take on a garbage collector: leverage efficient <tt>fork()</tt> implementations, which in many Unix systems take advantage of hardware-provided copy-on-write semantics for duplicated memory pages across processes.
 +
 +
This idea is already leveraged in the high-performance garbage collector for D implemented and used by Sociomantic. (A lingering issue is <tt>fork()</tt> and <tt>malloc()</tt> share a lock, which is [http://www.dsource.org/projects/tango/ticket/2087 problematic].) Leandro Lucarella, the engineer who wrote the implementation, has open sourced it [https://git.llucax.com.ar/w/software/dgc/cdgc.git here], but that is a bitrotten version that has fallen on the wayside.
 +
 +
Leandro would be glad to assist with questions by a motivated implementer. Gustavo has quite a few ideas for improvements, including a possible Windows implementation, and may be able to even coauthor a paper.
 +
 +
==== Level of Difficulty ====
 +
TODO
 +
 +
==== Its Good To Know ====
 +
* TODO
 +
 +
==== Proposed Project Mentors: [http://wiki.dlang.org/GSOC_mentors#  TBD] ====
 +
 +
=== Interfacing with C++ ===
 +
 +
==== Project Description:  ====
 +
Walter Bright has gotten the compiler to the point where it is possible to write declarations for C++ types and functions (including certain templates) and even throw an exception from C++ and catch it in D.
 +
 +
The next step is to define D interfaces for the data structures and functions in the C++ standard library, which would go e.g. in <tt>core.stdcpp</tt> in druntime (modeled after <tt>core.stdc</tt>). This is a high-impact project because it would allow D code to interface easily with legacy C++ code using standard library artifacts such as <tt>std::string</tt> and <tt>std::vector</tt>.
 +
 +
==== Level of Difficulty ====
 +
TODO
 +
 +
==== Its Good To Know ====
 +
* TODO
 +
 +
==== Proposed Project Mentors: [http://wiki.dlang.org/GSOC_mentors#  TBD] ====
 +
 +
=== Linux debugger ===
 +
==== Project Description:  ====
 +
[https://zerobugs.codeplex.com/ ZeroBUGS] is a high-quality, source-level debugger for Linux implemented from first principles in C++ by Cristian Vlasceanu. The author got busy with work and the project has since bitrotten, as did a [https://github.com/syntheticpp/zerobugs fork] of it by a different engineer.
 +
 +
ZeroBUGS presents amazing opportunities for D/Linux debugging, and Cristian is willing to guide a motivated implementer.
 +
 +
== Who's (Using) Who? ==
 +
 +
It happens often that executables include code that seems unused (e.g. a typical "hello world" links in functions that are not easily explained). A tool that shows dependency chains would be a great helper in understanding what dependencies are at work, and would give insight into how to reduce them.
 +
 +
The tool would output for each function all symbols it uses. The tool's output would be in one (or more) popular format of stock tools for graph drawing, such as [https://en.wikipedia.org/wiki/DOT_(graph_description_language) DOT], [http://www.graphviz.org Graphviz], [http://www.sagemath.org Sage], [https://www.ctan.org/pkg/pgf?lang=en PGF/TikZ], [http://www.mi.sanu.ac.rs/newgraph/ newGRAPH], etc.
 +
 +
This can be done using Valgrind's plugin, Callgrind, as explained [[Other_Dev_Tools#Valgrind helper | here]].
 +
 +
==== Level of Difficulty ====
 +
TODO
 +
 +
==== Its Good To Know ====
 +
* TODO
 +
 +
==== Proposed Project Mentors: [http://wiki.dlang.org/GSOC_mentors#  TBD] ====
 +
  
 
=== Additional Project Ideas ===
 
=== Additional Project Ideas ===

Revision as of 02:44, 27 January 2017

This is the D Google Summer of Code page for 2017 - it is currently under construction. If you are interested in participating in the 2017 GSOC as either a student or mentor, and want to do something related to D, please feel free to contact our GSOC administrator Craig Dillabaugh (firstname dot lastname at gmail dot com).


Timeline

The timeline for GSoC for 2016 can be found here, the 2017 timeline has not yet been posted.

Ideas

Plenty of challenging and important projects exist in the D world. They range from writing new or improving existing modules of D's standard library (Phobos), working on its compilers (Compilers), shaping GUI libraries for D, integrating D with other languages and more.

Sample GSoC Idea


Give a brief description of your project idea.

  • Detailed ideas are best.
  • If possible give an example of exactly what tasks would be involved.
  • Nevertheless, students may decide to come up with their own ideas.

Level of Difficulty

TODO

Its Good To Know

In this section please point prospective students to any resources that could help them get up to speed on the project topic. These might include:

  • related project GitHub pages.
  • DConf talks or other videos relevant to the project.
  • Suggested reading material, such as books, blogs, etc.

Proposed Project Mentors: Your Name Here!

SDC Project - D Compiler as a Library


Project Description:

The SDC project (https://github.com/deadalnix/SDC) is an effort to provide a D compiler as a library. Any ideas to further the development of this project are welcome, but for a student who would like a specific project we propose the following

  • Start by implementing with @property feature of D. This feature will allow a D programmer to create functions that are called using the same syntax as variable access.
  • Using the @property feature the student will be able to implement the runtime support for slices and associative arrays. The operations to implement are as follows:
    • Implement arrray operations like concatenation and appending, and implement a sound memory management strategy for the underlying data.
    • Implement a generic and efficient hash table. The data structure and algorithms used must be flexibile enough to be adapted to any type of data that might be stored in the table. A concurrent version of the table is need for shared data.
  • Finally, the student will implement masquerading of D syntax into calls for the runtime.
  • Integrate LLVM's new JIT infrastructure in SDC, the On-Request Compilation JIT (ORCJit) API. This would simplify the implementation of certain D features such as Compile Time Function Evaluation (CTFE) for SDC.

Level of Difficulty

TODO

Its Good To Know

  • Please watch Amaury's DConf talk on SDC.
  • SDC is developed in D (of course) so you will need to be proficient in D by the time you start coding.
  • You should have taken at least one course on compilers, or at the least be willing to educate yourself in this regard. There is a decent course availabe through Coursera https://www.coursera.org/course/compilers
  • You should familiarize yourself with classicial data structures for arrays and have knowledge of various schemes for table implementations, (it is worthwhile to read up on hopscotch and robin hood hashing).
  • SDC uses LLVM for code generation, so some familiarity with LLVM will be required (see http://llvm.org/docs/tutorial/index.html).


Proposed Project Mentor: Amaury Sechet

Lowerer

Project Description:

This tool would "translate" compilable D code to compilable D code. See initial idea discussed in Issue 5051. It would offer a variety of lowering services for purposes of tooling, debugging, and project management:

  • do not output function bodies, .di style
  • write deduced attributes for functions (useful when function bodies are not written)
  • expand all possible mixins in the code
  • execute lookup on all symbols and write the full symbol, e.g. writeln becomes .std.stdio.writeln
  • explicitate all user-defined operators, e.g. a + b becomes a.opBinary!"+"(b)
  • replace all wholesale imports with detailed imports that specify the symbols needed
  • write specialized versions for all templates used within the module (this is likely to be tricky)
  • lower all scope statements into try statements
  • lower all foreach statements into for statements
  • specify the exact symbols needed for each import statement (which means: if no symbols, the import is redundant - easy to mark as a warning by a subsequent tool)
  • evaluate all static ifs possible
  • lower code using version(), i.e. make the unused branch disappear
  • make all comments disappear
  • make only non-documentation comments disappear
  • evaluate all possible CTFEs (tricky)
  • introduce named values instead of temporaries wherever order of evaluations is defined.

Level of Difficulty

TODO

Its Good To Know

  • TODO

Proposed Project Mentors: TBD

fork()-based Garbage Collector

Project Description:

Gustavo Rodriguez-Rivera and Vincent Russo authored a paper on an interesting take on a garbage collector: leverage efficient fork() implementations, which in many Unix systems take advantage of hardware-provided copy-on-write semantics for duplicated memory pages across processes.

This idea is already leveraged in the high-performance garbage collector for D implemented and used by Sociomantic. (A lingering issue is fork() and malloc() share a lock, which is problematic.) Leandro Lucarella, the engineer who wrote the implementation, has open sourced it here, but that is a bitrotten version that has fallen on the wayside.

Leandro would be glad to assist with questions by a motivated implementer. Gustavo has quite a few ideas for improvements, including a possible Windows implementation, and may be able to even coauthor a paper.

Level of Difficulty

TODO

Its Good To Know

  • TODO

Proposed Project Mentors: TBD

Interfacing with C++

Project Description:

Walter Bright has gotten the compiler to the point where it is possible to write declarations for C++ types and functions (including certain templates) and even throw an exception from C++ and catch it in D.

The next step is to define D interfaces for the data structures and functions in the C++ standard library, which would go e.g. in core.stdcpp in druntime (modeled after core.stdc). This is a high-impact project because it would allow D code to interface easily with legacy C++ code using standard library artifacts such as std::string and std::vector.

Level of Difficulty

TODO

Its Good To Know

  • TODO

Proposed Project Mentors: TBD

Linux debugger

Project Description:

ZeroBUGS is a high-quality, source-level debugger for Linux implemented from first principles in C++ by Cristian Vlasceanu. The author got busy with work and the project has since bitrotten, as did a fork of it by a different engineer.

ZeroBUGS presents amazing opportunities for D/Linux debugging, and Cristian is willing to guide a motivated implementer.

Who's (Using) Who?

It happens often that executables include code that seems unused (e.g. a typical "hello world" links in functions that are not easily explained). A tool that shows dependency chains would be a great helper in understanding what dependencies are at work, and would give insight into how to reduce them.

The tool would output for each function all symbols it uses. The tool's output would be in one (or more) popular format of stock tools for graph drawing, such as DOT, Graphviz, Sage, PGF/TikZ, newGRAPH, etc.

This can be done using Valgrind's plugin, Callgrind, as explained here.

Level of Difficulty

TODO

Its Good To Know

  • TODO

Proposed Project Mentors: TBD

Additional Project Ideas


We will include a section for more poorly defined projects that some adventurous student might be interested in.

Ideas From Previous Years

GSoC idea pages from past years:

Tips for students

Daniel Pocock has written a detailed blog about initiatives students can take if they want to have a serious chance of being selected in GSoC without a focus on one specific organization.

To learn more about potential mentors check our mentor page here.

Tips for Mentors

If you are interested in mentoring, please check out the organization administrator and mentor manual for more information.