https://wiki.dlang.org/api.php?action=feedcontributions&user=Greenify&feedformat=atomD Wiki - User contributions [en]2024-03-29T09:25:46ZUser contributionsMediaWiki 1.31.2https://wiki.dlang.org/?title=Building_under_Posix&diff=9701Building under Posix2019-10-15T10:01:51Z<p>Greenify: create h2 sections for build config + windows build</p>
<hr />
<div>== Prerequisites ==<br />
<br />
To build [[DMD]] on POSIX, you will need to have <tt>make</tt>, <tt>g++</tt>, <tt>libcurl4-openssl-dev</tt>, and <tt>git</tt> installed on your system, as well as a working GitHub account. To install the appropriate dependencies on e.g. Ubuntu:<br />
<br />
sudo apt-get install curl git make g++ libcurl4-openssl-dev<br />
<br />
On OS X with Homebrew:<br />
<br />
$ xcode-select --install<br />
$ brew install git openssl<br />
<br />
To build the 32-bit Phobos on a 64-bit machine, some 32-bit packages are also needed:<br />
<br />
sudo apt-get install gcc-multilib g++-multilib libc6-dev-i386 linux-libc-dev:i386 libcurl4-gnutls-dev:i386<br />
<br />
Other versions and variations of <tt>libcurl</tt> may work as well.<br />
<br />
== Building DMD ==<br />
<br />
=== Fetch repositories from GitHub ===<br />
<br />
Let's start by getting the current development (master) branch of the D repositories from GitHub. Assume the root directory for everything D-related is <tt>~/dlang</tt> (replace appropriately). This is easily done by running at a command prompt:<br />
<br />
<syntaxhighlight lang=bash><br />
cd ~/dlang<br />
git clone https://github.com/dlang/dmd<br />
git clone https://github.com/dlang/druntime<br />
git clone https://github.com/dlang/phobos<br />
git clone https://github.com/dlang/tools<br />
</syntaxhighlight><br />
<br />
After this step completes successfully, the <tt>~/dlang</tt> should be up and filled with good stuff.<br />
<br />
=== Bootstrap <tt>dmd</tt> ===<br />
<br />
This step is interesting because in order to build <tt>dmd</tt>, <tt>dmd</tt> is necessary. Fortunately, the steps of downloading and using a preexisting <tt>dmd</tt> compiler are automated (only for platforms for which [https://dlang.org/download there are official builds: Windows, macOS, linux, and FreeBSD]). All you need to do is run this command:<br />
<br />
<syntaxhighlight lang=bash><br />
cd ~/dlang/dmd<br />
make -f posix.mak -j8 AUTO_BOOTSTRAP=1<br />
</syntaxhighlight><br />
<br />
That's going to take a while. The build produces the compiler binary situated in an OS-dependent directory such as <tt>~/dlang/dmd/generated/linux/release/64/dmd</tt>.<br />
<br />
To make <tt>dmd</tt> builds faster in the future, you need to obviate the need for bootstrapping. Install <tt>dmd</tt> from the [http://dlang.org/download.html download page] or simply put the freshly built <tt>dmd</tt> binary in a place accessible through <tt>$PATH</tt> (a popular choice is <tt>~/bin</tt>).<br />
<br />
=== Build <tt>Phobos</tt> ===<br />
<br />
Most D programs use D's standard library <tt>Phobos</tt>. To build it, run:<br />
<br />
<syntaxhighlight lang=bash><br />
cd ~/dlang/phobos<br />
make -f posix.mak -j8<br />
</syntaxhighlight><br />
<br />
The build produces (with similar anticlimacticity) static and shared libraries such as <tt>~/dlang/phobos/generated/linux/release/64/libphobos2.a</tt> and <tt>~/code/phobos/generated/linux/release/64/libphobos2.so</tt>.<br />
<br />
As part of the build <tt>druntime</tt> will be built automatically, e.g. the generated <tt>druntime</tt> interfaces can be found at <tt>~/dlang/druntime/import</tt>.<br />
The generated <tt>druntime</tt> libraries like <tt>~/dlang/druntime/generated/linux/release/64/libdruntime.a</tt> get bundled with built <tt>phobos</tt> libraries.<br />
<br />
== Optional build configurations ==<br />
<br />
The following options are ''optional'' build configuration. You will very likely not need them and can skip to your [https://wiki.dlang.org/Starting_as_a_Contributor#Development development flow].<br />
<br />
=== TZDatabaseDir ===<br />
<br />
Phobos needs to find the tzdata dir on Posix systems. Normally it is located on standard paths and Phobos uses those. But on some systems such as NixOS for example, there is no such standard path and to build Phobos properly, it's needed to specify the absolute path to the directory.<br />
This is possible by writing the path to a file named <tt>TZDatabaseDirFile</tt> and telling the compiler to use this file as an import for the path via the <tt>DFLAGS</tt> argument listed below. The <tt>-J</tt> argument defines the path where the compiler should look for the <tt>TZDatabaseDirFile</tt>.<br />
<syntaxhighlight lang=bash><br />
cd ~/dlang/phobos<br />
make -f posix.mak -j8 DFLAGS="-version=TZDatabaseDir -J/tmp/"<br />
</syntaxhighlight><br />
<br />
=== LibcurlPath ===<br />
<br />
For the same reason as for the tzdata dir, it's possible to specify the absolute path to the libcurl library.<br />
This is possible by writing the path to a file named <tt>LibcurlPathFile</tt> and using the <tt>DFLAGS</tt> argument as in the <tt>TZDatabaseDir</tt> case.<br />
<syntaxhighlight lang=bash><br />
cd ~/dlang/phobos<br />
make -f posix.mak -j8 DFLAGS="-version=LibcurlPath -J/tmp/"<br />
</syntaxhighlight><br />
<br />
== Building <tt>dmd</tt> for Windows on Linux ==<br />
<br />
Most Linux developers do not have a Windows machine to test their changes on both platforms, fortunately there is a tool called Wine (Windows Emulator) which enables running Windows specific binaries on Linux. In order to be able to build and run the Windows dmd version on Linux, you must go through the following steps: (it is assumed that all the above steps have been completed)<br />
<br />
1. Install Wine following the instructions found [https://wiki.winehq.org/Ubuntu here].<br />
<br />
2. Download [http://dlang.org/download.html the Windows dmd installer]<br />
<br />
3. Install dmd for Windows using Wine<br />
<br />
wine /path/to/dmd/installer.exe<br />
<br />
This command will start the dmd Windows installation as if you were on Windows. Wine creates a typical Windows directory structure located in ~/.wine/drive_c where drive_c is the directory which corresponds to C:\ on Windows. The default installation directory is C:\D, the rest of this document assumes that. Add the optional "DMC" package during the installation.<br />
<br />
4. Now that the Windows compiler is installed, all we need to do is to properly set the environment variables needed by win32.mak. Wine forwards all the existing environment variables, except a few special ones : <b>PATH</b>, <b>TEMP</b>, <b>SYSTEM</b>. However, <b>WINEPATH</b> can be used instead of <b>PATH</b>. Assuming that D is installed in C:\, you need to set the following environment variables:<br />
<br />
<syntaxhighlight lang=bash><br />
export DM_HOME=C:/D<br />
export HOST_DC=dmd<br />
export WINEPATH="C:\DMC\dm\bin\;C:\D\dmd2\windows\bin"<br />
</syntaxhighlight><br />
<br />
5. At this point we should be good to go: <br />
<br />
<syntaxhighlight lang=bash><br />
cd /path/to/dmd<br />
wine make -fwin32.mak<br />
</syntaxhighlight><br />
<br />
The command above builds the executable <tt>/path/to/dmd/generated/windows/release/32/dmd.exe</tt>. <br />
<br />
6. To build druntime with the newly generated compiler, run:<br />
<br />
<syntaxhighlight lang=bash><br />
cd /path/to/druntime<br />
wine make -fwin32.mak<br />
</syntaxhighlight><br />
<br />
7. Finally, to build Phobos again using the newly generated compiler, run:<br />
<br />
<syntaxhighlight lang=bash><br />
cd /path/to/phobos<br />
wine make -fwin32.mak<br />
</syntaxhighlight><br />
<br />
'''NOTE''' : building the latest development version of the compiler in linux, under wine, requires that the latest windows release version of the compiler is installed via wine.<br />
<br />
== Where to go from here ==<br />
<br />
If you want to contribute to a D project, please continue with the [[Starting_as_a_Contributor| starting as a contributor]] guide.<br />
If you want to contribute to Phobos, you may also read the [[Contributing to Phobos|contributing to Phobos guide]].<br />
<br />
[[Category:DMD Compiler]]</div>Greenifyhttps://wiki.dlang.org/?title=Building_under_Windows&diff=9629Building under Windows2019-05-10T15:27:07Z<p>Greenify: /* Building with Visual Studio */ rework the guide</p>
<hr />
<div>== Automation ==<br />
<br />
[https://github.com/CyberShadow/Digger Digger] can checkout and build any D version automatically for you. Only a D compiler is required. Digger will download all required dependencies by itself.<br />
<br />
<syntaxhighlight lang=bash><br />
dub fetch digger<br />
dub run digger<br />
</syntaxhighlight><br />
<br />
Among many other features, Digger can build older compiler versions or versions with a specific pull request added:<br />
<br />
<syntaxhighlight lang=bash><br />
# build a specific D version<br />
$ dub run digger -- build v2.064.2<br />
<br />
# build for x86-64<br />
$ dub run digger -- build --model=64 v2.064.2<br />
<br />
# build commit from a point in time<br />
$ dub run digger -- build "@ 3 weeks ago"<br />
<br />
# build specified branch from a point in time<br />
$ dub run digger -- build "2.065 @ 3 weeks ago"<br />
<br />
# build with an added pull request<br />
$ dub run digger -- build "master + dmd#123"<br />
</syntaxhighlight><br />
<br />
== Building with Visual Studio ==<br />
<br />
=== Prerequisites ===<br />
<br />
* [https://visualstudio.microsoft.com/ Visual Studio]<br />
* [https://developer.microsoft.com/en-us/windows/downloads/windows-10-sdk Window SDK]<br />
* [https://dlang.org/download.html DMD Windows Installer]<br />
* [https://rainers.github.io/visuald/visuald/StartPage.html VisualD]<br />
<br />
=== Instructions ===<br />
<br />
* Run the DMD Windows Installer and make sure that the binaries get added to the PATH (check "Add to Path")<br />
* Install VisualD (can be done via the DMD installer with the "Download VisualD" checkbox)<br />
* Make sure that dmd gets installed to {{code|C:\D\dmd2}} (the default)<br />
<br />
=== Clone repositories ===<br />
<br />
Next step is to clone the 4 necessary source repos, dmd, druntime, phobos, and tools.<br />
<br />
<syntaxhighlight lang=bash><br />
mkdir C:\Source\D<br />
cd C:\Source\D<br />
git clone https://github.com/dlang/dmd<br />
git clone https://github.com/dlang/druntime<br />
git clone https://github.com/dlang/phobos<br />
git clone https://github.com/dlang/tools<br />
</syntaxhighlight><br />
<br />
Make sure to pick a folder without white spaces or special characters to avoid any potential problems.<br />
<br />
=== Building DMD ===<br />
<br />
You should be able to build DMD using the visual studio solution found in: {{code|dmd\src\vcbuild}}<br />
A typical choice is to build the 64-bit debug version (the VisualD options are named 'Release' and 'x64').<br />
<br />
A 'dmd.exe' should have been built and placed in {{code|C:\Source\D\dmd\generated\Windows\Debug\x64}}.<br />
<br />
If you want the 32-bit counterparts, you will have to adjust accordingly.<br />
Most notably, using win32.mak Makefiles instead of the win64.mak files.<br />
<br />
=== Building DRuntime ===<br />
<br />
Make sure that Visual Studio tools are part of your PATH. One common way is to run 'vcvarsall.bat'.<br />
With Visual Studio 2017 this call is:<br />
<br />
<syntaxhighlight lang=dos><br />
call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" x64<br />
</syntaxhighlight ><br />
<br />
Now, go into druntime:<br />
<br />
<syntaxhighlight lang=dos><br />
cd C:\source\D\druntime<br />
</syntaxhighlight><br />
<br />
Then compile with DigitalMars make (not to confuse with GNUMake). DigitalMars is part of the DMD Windows distribution and should be part of your {{code|PATH}}:<br />
<br />
<syntaxhighlight lang=dos><br />
set VCDIR=""C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC"<br />
make -f win64.mak -j4 "VCDIR=%VCDIR%" target<br />
</syntaxhighlight><br />
<br />
For building on 32-bit with the Visual Studio Runtime, use {{code|MODEL=32mscoff}}.<br />
If you have GNUMake installed on your system too, use the full path to DigitalMars make {{code|C:\D\dmd2\windows\bin\make}}.<br />
<br />
=== Building Phobos ===<br />
<br />
<syntaxhighlight lang=dos><br />
cd C:\source\D\phobos<br />
make -f win64.mak -j4 target<br />
</syntaxhighlight><br />
<br />
== Prerequisites ==<br />
<br />
On Windows, you will need [https://git-scm.com/ Git for Windows], [http://dlang.org/download.html#dmd D compiler], [http://ftp.digitalmars.com/dmc.zip the DigitalMars C++ compiler], and, for 64-bit or 32-bit COFF builds, the [https://www.microsoft.com/en-us/download/details.aspx?id=8279 Microsoft Windows SDK].<br />
<br />
Assuming that {{code|make}}, {{code|dmc}} and {{code|dmd}} from digital mars are in your path and your sources are checked out into {{code|C:\D\dmd2\src}} which has the following structure:<br />
<syntaxhighlight lang=dos><br />
C:\D\dmd2\src\dmd<br />
C:\D\dmd2\src\druntime<br />
C:\D\dmd2\src\phobos<br />
C:\D\dmd2\src\tools<br />
</syntaxhighlight><br />
<br />
=== git Configuration ===<br />
<br />
When cloning from the GitHub repositories you may encounter problems if your git configuration on Windows replaces line endings with the Windows variant (i.e. {{code|\r\n}}) instead of leaving it as {{code|\n}}, which is what D repositories require.<br />
<br />
To check your settings, run {{code|git config core.autocrlf}}. If it prints {{code|true}}, set it to {{code|false}} with {{code|git config --global core.autocrlf false}}.<br />
<br />
== Building D ==<br />
<br />
The following instructions work for win32. May or may not work with win64. This scheme is a suggestion. These instructions should work when building from a clean repository, however, this repository contains autogenerated code that may be left behind after switching branches so running a git clean after switching branches is a good idea:<br />
<br />
<syntaxhighlight lang=dos><br />
git clean -xfd<br />
</syntaxhighlight><br />
<br />
=== Building DMD ===<br />
<br />
To build DMD compiler you should run the following commands ({{code|win32.mak}} file expects that {{code|HOST_DC}} variable is set to {{code|dmd}}):<br />
<syntaxhighlight lang=dos><br />
set DM_HOME=C:\D<br />
cd %DM_HOME%\dmd2\src\dmd\src<br />
set HOST_DC=dmd<br />
make -fwin32.mak release<br />
</syntaxhighlight><br />
<br />
From there, it is suggested to move the built binaries into your {{code|%DM_HOME%\windows\bin}} directory, and add that to your path:<br />
<syntaxhighlight lang=dos><br />
mkdir %DM_HOME%\dmd2\windows\bin<br />
copy *.exe %DM_HOME%\dmd2\windows\bin<br />
set path=%DM_HOME%\dmd2\windows\bin;%path%<br />
</syntaxhighlight><br />
<br />
From there, you have to create a {{code|sc.ini}} in your {{code|%DM_HOME%\dmd2\windows\bin}} directory (where {{code|dmd.exe}} is). It is suggested to just copy paste the one provided in the packaged {{Latest DMD Version Raw}}, instead of writing your own, like:<br />
<syntaxhighlight lang=dos><br />
copy "C:\Program Files\D\dmd2\windows\bin\sc.ini" %DM_HOME%\dmd2\windows\bin<br />
</syntaxhighlight><br />
<br />
=== Building D runtime ===<br />
<br />
Make sure that you are using {{code|dmd}} compiled in previous step because older compiler might not compile the latest druntime code.<br />
<br />
To build D runtime you should run the following commands:<br />
<syntaxhighlight lang=dos><br />
cd %DM_HOME%\dmd2\src\druntime<br />
make -fwin32.mak<br />
</syntaxhighlight><br />
<br />
=== Building Phobos ===<br />
<br />
Make sure that you are using {{code|dmd}} compiled in previous step because older compiler might not compile the latest phobos code.<br />
<br />
To build Phobos you should run the following commands:<br />
<syntaxhighlight lang=dos><br />
cd %DM_HOME%\dmd2\src\phobos<br />
make -fwin32.mak<br />
</syntaxhighlight><br />
<br />
You should copy phobos lib into your {{code|%DM_HOME%\windows\lib}} folder:<br />
<syntaxhighlight lang=dos><br />
mkdir %DM_HOME%\dmd2\windows\lib<br />
copy phobos.lib %DM_HOME%\dmd2\windows\lib<br />
</syntaxhighlight><br />
<br />
=== Building rdmd ===<br />
<br />
Optionally, you can build rdmd from source if you have checked out {{code|tools}} in your sources. Some additional libs might be required for build and can simply be copy pasted from the {{Latest DMD Version Raw}} package without overwriting your {{code|phobos.lib}}.<br />
<br />
To build rdmd you should run the following commands:<br />
<syntaxhighlight lang=dos><br />
cd %DM_HOME%\dmd2\src\tools<br />
make -fwin32.mak rdmd<br />
</syntaxhighlight><br />
<br />
You should copy rdmd into your {{code|%DM_HOME%\windows\bin}} folder:<br />
<syntaxhighlight lang=dos><br />
mkdir %DM_HOME%\dmd2\windows\lib<br />
copy generated\windows\32\*.exe %DM_HOME%\dmd2\windows\bin<br />
</syntaxhighlight><br />
<br />
=== Thirdparty libraries ===<br />
<br />
The last step is getting the additional libs. curl for D2 can be found at the bottom of the download section of dlang.org: [[http://dlang.org/download.html download]].<br />
<br />
Additional libs that are necessary can simply be copy pasted from the {{Latest DMD Version Raw}} package (without overwriting your {{code|phobos.lib}}).<br />
<br />
=== Verifying ===<br />
<br />
The very last step is to verify that everything works by unittesting phobos:<br />
<syntaxhighlight lang=dos><br />
cd %DM_HOME%\dmd2\src\phobos<br />
make -fwin32.mak unittest<br />
</syntaxhighlight><br />
<br />
== Common Windows issues ==<br />
<br />
=== Missing MASM386===<br />
<br />
If when building druntime you get errors about missing MASM386, it's due to a required assembling of a file called '''minit.asm'''. However the druntime repository includes a prebuilt minit.obj file so you shouldn't need to assemble it again. As a workaround for the make error create an empty '''masm386.bat''' file and put it in a directory that's in your '''PATH'''.<br />
<br />
It's also recommended that you use the cmd.exe terminal. Others, like PowerShell, are known to experience issues with legacy tools.<br />
<br />
=== Intermediate files lead to several errors ===<br />
<br />
The three main components (dmd, druntime, phobos) should always be built together with matching versions. The intermediate files generated by a previous build can lead to a failure so it's advisable to run<br />
<br />
<syntaxhighlight lang=dos><br />
make -fwin32.mak clean<br />
</syntaxhighlight><br />
<br />
on each component before starting the process.<br />
<br />
=== Using DigitalMars <code>make</code> for running the test suite ===<br />
<br />
DMD's testsuite can't be run with DigitalMars <code>make</code> - use GNUMake.<br />
Refer to the instructions in [[DMD_development#Running_the_testsuite_on_Windows | Running the test suite on Windows]].<br />
<br />
== Where to go from here ==<br />
<br />
If you want to contribute to a D project, please continue with the [[Starting_as_a_Contributor| starting as a contributor]] guide.<br />
If you want to contribute to Phobos, you may also read the [[Contributing to Phobos|contributing to Phobos guide]].<br />
<br />
[[Category:Windows]]</div>Greenifyhttps://wiki.dlang.org/?title=GSOC_2019_Ideas&diff=9596GSOC 2019 Ideas2019-03-13T11:08:54Z<p>Greenify: /* Language Server Protocol for D */</p>
<hr />
<div>This is the D Language Foundation's Google Summer of Code 2019 page.<br />
<br />
If you are interested in working on a D project as part of GSoC 2019, please feel free to ask questions on the [https://forum.dlang.org/newpost/general?subject=%5Bgsoc%5D D Newsgroup].<br />
For more specific questions, please contact the GSoC admins at [mailto:gsoc@dlang.rocks?subject=%5BGSoC%202019%5D gsoc@dlang.rocks].<br />
<br />
<br />
== Timeline ==<br />
The timeline for GSoC 2019 [https://developers.google.com/open-source/gsoc/timeline can be found here].<br />
<br />
== Ideas ==<br />
<br />
The D ecosystem is always in need of improvement through the revision of existing projects and the creation of new ones. The core projects like the([http://dlang.org/phobos/index.html standard library]) and the compilers ([[Compilers]]) are always in need of attention. Other important areas include GUI support, integration with other languages, improving and enhancing the tooling, IDE and editor support, and more.<br />
<br />
Please add your project ideas to the list below, being as descriptive as you can in the summaries. Students interested in participating can use the ideas listed here as jumping off points, so the more information you provide, the easier it will be for them to get started. If your idea is particularly complex or nuanced, consider leaving contact information so that interested parties may follow up.<br />
<br />
=== DUB: D's package manager ===<br />
----<br />
<br />
[https://github.com/dlang/dub DUB] - D's package manager - is one of the central infrastructure tools in the D world as a convenient build and package management tool for the D community.<br />
With D gaining more and more popularity, it's also a key tool to guarantee D's further adoption.<br />
Thus there are many great ideas to improve DUB:<br />
<br />
* [https://github.com/dlang/dub/wiki/DEP6 git support]<br />
* [https://github.com/dlang/dub/wiki/DEP2 separate compilation and caching]<br />
* [https://github.com/dlang/dub/wiki/DEP3 extensibility through DUB]<br />
* [https://github.com/dlang/dub/wiki/DEP4 control flow directives]<br />
* [https://github.com/dlang/dub/wiki/DEP5 build system support for C/C++]<br />
* support dub install for distributions<br />
* support building a {snap, Debian, Arch, ...} package out of DUB package<br />
<br />
Any of these listed DUB Enhancement Proposals (DEPs) could form the basis of a GSoC Project.<br />
<br />
'''Update:''' A very detailed list of ideas for improving Dub can be found in this [https://forum.dlang.org/post/eftttpylxanvxjhoigqu@forum.dlang.org Forum thread].<br />
<br />
Proposed Project Mentors: Sönke Ludwig, Sebastian Wilzbach<br />
<br />
=== Header generation for C/C++ ===<br />
----<br />
<br />
With the ever-improving integration between DMD and C/C++, quite a bit of tooling has been developed to generate D header files from C or C++ projects (e.g. [https://github.com/jacob-carlborg/dstep DStep] or [https://github.com/atilaneves/dpp DPP]).<br />
However, for many projects the majority of the source code is now written in D and the reverse step is needed: an automatic way to generate C and C++ headers from a D project.<br />
This would be very valuable for D as it could motivate inter-language projects that typically go C++-fist-with-a-D-binding to work the other way.<br />
<br />
Starting points:<br />
* [https://forum.dlang.org/post/mailman.7146.1551050711.29801.digitalmars-d@puremagic.com NG-Thread: "Make DMD emit C++ .h files same as .di files"]<br />
* [https://github.com/dlang/dmd/pull/8591 Existing specialized work for the DMD codebase]<br />
* [https://gitlab.com/mihails.strasuns/dtoh Existing WIP work for generating C headers]<br />
* [https://github.com/thewilsonator/dtoh Existing WIP work for generating C++ headers, using DMD as a library]<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Language Server Protocol for D ===<br />
----<br />
<br />
A Language Server is meant to provide the language-specific smarts and communicate with development tools over a protocol that enables inter-process communication. The [https://microsoft.github.io/language-server-protocol Language Server Protocol] (LSP) defines the protocol used between an editor or IDE and a language server that provides language features like auto complete, go to definition, find all references etc.<br />
<br />
Adding features like auto complete, go to definition, or documentation on hover for a programming language takes significant effort. Traditionally this work had to be repeated for each development tool, as each tool provides different APIs for implementing the same feature (see the list of [[Editors]] and [[IDEs]]). Additionally as the existing tools use `libdparse` (used in [https://github.com/d-language-server/dls DLS] and [https://github.com/dlang-community/DCD DCD]), they lack the ability to perform semantic analysis on the AST and can't evaluate `mixin`'s nor D's very powerful Compile-Time Function Evaluation (CTFE).<br />
<br />
The idea behind the Language Server Protocol (LSP) is to standardize the protocol for how such servers and development tools communicate. This way, a single D Language Server can be re-used in multiple development tools, which in turn can support multiple languages with minimal effort.<br />
<br />
Recent development in the DMD compiler [https://dlang.org/blog/2017/08/01/a-dub-case-study-compiling-dmd-as-a-library made it available as a DUB library]. This mean that the compiler itself can be re-used and third-party tools don't have to re-implement e.g. D's complex CTFE. This project is about using the DMD compiler as a library to implement a Language Server for D.<br />
<br />
Proposed Project Mentors: Jacob Carlborg, Sebastian Wilzbach<br />
<br />
How to start:<br />
* [https://github.com/dlang/dmd/blob/master/test/dub_package/frontend.d Simple example] of using DMD as a library<br />
* [https://github.com/jacob-carlborg/dlp More complex use cases]<br />
<br />
=== Mir Project ===<br />
----<br />
<br />
The Mir project is developing numerical libraries for the upcoming numeric packages of<br />
the Dlang standard library. The are numerous projects an interested student could pursue:<br />
<br />
* University project. Your GSoC project can be combined with your scientific research.<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://julialang.org Julia] integration<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://www.numpy.org NumPy] integration<br />
* General purpose BetterC libraries<br />
** I/O betterC Dlang library<br />
** Async betterC Dlang library<br />
** String and format betterC library<br />
* mir-cpuid <br />
** ARM support<br />
** Advanced OS specific support<br />
* mir-glas<br />
** BLAS Level 2 subprograms<br />
** One BLAS Level 3 subprogram. It is OK to do only one! But it must be faster then OpenBLAS, and not slower then Intel MKL.<br />
** Multithreading support for BLAS Level 2<br />
** Multithreading support for BLAS Level 3<br />
<br />
You can get more details on projects related to Mir [https://github.com/libmir/mir/wiki/GSoC-2019 here].<br />
<br />
Its Good To Know:<br />
<br />
To work on the Mir you should be proficient with one of:<br />
<br />
* C<br />
* C++<br />
* LLVM<br />
* Fortran<br />
* Experience with D is not essential.<br />
<br />
To work on the Mir project requires a responsible and self-motivated student.<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
=== LDC (LLVM-based D compiler) ===<br />
----<br />
<br />
The LDC project provides a portable D programming language compiler with modern optimization and code generation capabilities.<br />
The ever-improving feature set of LLVM opens up many opportunities with D.<br />
A few ideas for a potential GSoC project are:<br />
<br />
* exploiting immutability of variables (notably of structs such as string slices)<br />
* devirtualization<br />
* improve debuginfo<br />
* ASan with GC and multithreading<br />
* function multiversioning<br />
<br />
You might also want to browse the [https://github.com/ldc-developers/ldc/issues LDC's issue tracker] for more ideas.<br />
<br />
Proposed Project Mentors: TBA (LDC dev team)<br />
<br />
=== iOS support in LDC ===<br />
----<br />
<br />
Mobile is becoming, or rather is already, the biggest software platform. While LDC already supports the Android platform there's no official support for iOS. The project would consist of adding support for the iOS platform to the LDC compiler, the D runtime library and the D standard library. The goal would be to get support for this platform upstreamed to the LDC main project.<br />
<br />
A lot of existing work has been done but has never been completed or upstreamed: https://github.com/smolt/ldc-iphone-dev.<br />
<br />
Proposed Project Mentors: TBA (LDC dev team)<br />
<br />
=== Baremetal D runtime ===<br />
----<br />
<br />
Many features in the standard library are implemented by using the C runtime. Reusing the rock-solid work of generations of programmers makes a lot of sense as just outputting via `printf` can be very [https://github.molgen.mpg.de/git-mirror/glibc/blob/20003c49884422da7ffbc459cdeee768a6fee07b/stdio-common/vfprintf.c complex]. However, for embedded environments a programmer often only has a tiny amount of storage available or might not even have a C runtime available for his target.<br />
The idea of this project is to implement the most basic parts of the runtime natively in D, s.t. bare metals programmers can just compile for their target. Implementing features natively in D also means that other targets like [https://wiki.dlang.org/Generating_WebAssembly_with_LDC Web Assembly] will automatically be able to use them too. Another advantage of implementing these basic building blocks in D is that one can take advantage of D's Compile-Time Function Evaluation (CTFE) and optimize the methods even further at compile-time.<br />
<br />
Project focus:<br />
- Implement <code>memcpy</code>, <code>memcmp</code> and similar in D (with similar performance to C)<br />
- Implement `malloc` and similar in D (with similar performance to C)<br />
<br />
Starting points:<br />
* [https://theartofmachinery.com/2017/02/28/bare_metal_d.html D for Bare Metal Programming (tutorial series]<br />
* [https://github.com/JinShil/stm32f42_discovery_demo Simple demonstration of using D to bare-metal program an STM32F29I Discovery board]<br />
* [https://github.com/JinShil/memcpyD memcpyD]<br />
* [https://wiki.dlang.org/Programming_in_D_tutorial_on_Embedded_Linux_ARM_devices Programming in D tutorial on Embedded Linux ARM devices]<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== GDC (GCC-based D compiler) ===<br />
----<br />
<br />
The GDC compiles uses GCC as a backend to utilize this powerful backend.<br />
Recently, GDC [https://www.phoronix.com/scan.php?page=news_item&px=GCC-9-Merges-D-Language has been accepted as GCC frontend] and will be part of the GCC9 release.<br />
However, GDC still has lots of tasks that the potential students could work on.<br />
<br />
One idea would be to improve GDC's support for betterC by adding a compiler interface to allow using a modular runtime. Right now when GDC uses some feature (TypeInfo, asserts, unittests), it just emits a call to an `extern(C)` function. A much better approach would be to have a defined D API (e.g. `rt.assert.onAssertFailure(...)`). The compiler can then check if it finds `rt.assert.onFailure`. If not, the compiler can the simply disable that feature and provide nice error messages. This could be done for TypeInfo, Exceptions, Asserts, Switch errors, unit test support, etc. In the end, the vision would be to be able to ship a compiler completely without runtime. This compiler should be able to produce bare bones code without any further configuration. Then add a dependency to `drt:core` in the dub configuration to get class support, `dr:exception` for exceptions, etc. The compiler could then automatically detect availability of these features. (Of course manually adding -I paths would work in exactly the same way).<br />
<br />
For more ideas, interested students are encouraged to browse [https://bugzilla.gdcproject.org/describecomponents.cgi GDC's issue list] or getting [https://wiki.dlang.org/GDC in touch with the GDC development team].<br />
<br />
Proposed Project Mentors: TBA (GDC devteam)<br />
<br />
=== C++ interops ===<br />
----<br />
<br />
There are many experiments in transparently interfacing D with C++, notably:<br />
<br />
* [https://github.com/atilaneves/dpp dpp] by Atila Neves, that parses and translates headers on the fly<br />
* [https://wiki.dlang.org/Calypso Calypso] by Elie Morisse that bridges the two languages at the AST level.<br />
* [https://github.com/jacob-carlborg/dstep DStep] by Jacob Carlborg, automatically generates bindings for C and Objective-C code. The task would be to add support for C++.<br />
<br />
There is also a lot of work in bringing STL types to the DRuntime (see https://github.com/dlang/druntime/pull/2310).<br />
<br />
D would greatly benefit by seamlessly integrating the C++ ecosystem. There are many ways to accomplish this goal and it should be discussed with the community.<br />
Andrei already commented on the importance of a tool like Calypso in this thread:<br />
https://forum.dlang.org/post/m9s4cd$2s1v$1@digitalmars.com<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Persistent Data Structures ===<br />
----<br />
<br />
There is an ongoing effort to reduce the reliance of Phobos on the GC but the GC is not going anywhere given that it has many advantages over manual memory management.<br />
The community would greatly benefit from a wide range of functional programming techniques that have their roots in the usage of immutable and persistent data structures that heavily rely on the GC.<br />
Persistent Data Structures are heavily used in [http://docs.scala-lang.org/overviews/collections/overview.html Scala] and [http://clojure.org/reference/data_structures Clojure] and they allow the programmer to reason about interactivity, sharing and parallelism.<br />
<br />
The focus of this project would be to create a varying range of persistent data structures (sets, vectors, maps, strings, trees, lists, etc...) that respects the range interface and the semantics of Phobos.<br />
<br />
Related Work:<br />
<br />
* https://www.cs.cmu.edu/~rwh/theses/okasaki.pdf <br />
* https://www.worldcat.org/title/rrb-trees-efficient-immutable-vectors/oclc/820379112<br />
* https://www.youtube.com/watch?v=7BFF50BHPPo<br />
* https://www.infoq.com/presentations/Value-Values<br />
* https://github.com/arximboldi/immer<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== std.benchmark ===<br />
----<br />
<br />
Ideally every function in Phobos should have its own benchmark suite which is run for every PR to check for performance improvements or regressions.<br />
* Additionally support for the new big O annotation [https://github.com/dlang/phobos/pull/4965 here] would be nice. <br />
* Existing work: [https://github.com/dlang/phobos/pull/794 here], and [https://github.com/dlang/phobos/pull/3695 here], and [https://github.com/atilaneves/unit-threaded/tree/master/source/unit_threaded/randomized here (QuickText-like testing)]. <br />
<br />
Proposed Project Mentors: Sebastian Wilzbach<br />
<br />
=== Jupyter notebook D kernel ===<br />
----<br />
<br />
The Jupyter Notebook is an open-source web application that allows you to create and share documents that contain live code, equations, visualizations and narrative text. Uses include: data cleaning and transformation, numerical simulation, statistical modeling, data visualization, machine learning, and much more.<br />
Jupyter notebooks are extremely popular among data scientist as they allow interactive progress and exploring a solution step by step.<br />
With a bit of work, a statically compiled language can be used in an interactive notebook e.g. [https://blog.jupyter.org/interactive-workflows-for-c-with-jupyter-fe9b54227d92 Cling] for C++ and<br />
[https://github.com/gopherdata/gophernotes gophernotes] for Go.<br />
Apart from being useful to data scientist, a Jupyter D kernel would allow an intuitive exploration of the language for newcomers and people starting with new libraries.<br />
<br />
Existing works:<br />
* [https://github.com/dlang-community/drepl drepl] - simple REPL for D<br />
* [https://github.com/DlangScience/PydMagic PydMagic] - allows to write PyD extension in a notebook.<br />
<br />
Proposed Project Mentor: Sebastian Wilzbach<br />
<br />
=== Tabular data container (data frames) ===<br />
----<br />
<br />
Pandas, R and Julia have made [https://github.com/mobileink/data.frame/wiki/What-is-a-Data-Frame%3F data frames] very popular.<br />
As D is getting more interest from data scientist (e.g. [https://github.com/eBay/tsv-utils eBay] or [http://tech.adroll.com/blog/data/2014/11/17/d-is-for-data-science.html AdRoll]) it would be very beneficial to use one language for the entire data analysis pipeline - especially considering that D (in contrast to popular languages like Python, R or Julia) - is compiled to native machine code and gets optimized by the sophisticated LLVM backend.<br />
<br />
Minimum requirements:<br />
<br />
* conversion to and from CSV<br />
* multi-indexing<br />
* column binary operations, e.g. `column1 * column2`<br />
* group-by on an arbitrary number of columns<br />
* column/group aggregations<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
=== Graphics library for resource constrained embedded systems ===<br />
----<br />
<br />
Create a 2D rasterizer, rich drawing primitives, and 2D graphics library suitable for resource constrained embedded systems (e.g. ARM Cortex-M) to be used in industrial controls, home appliances, medical devices, consumer electronics, and IoT just to name a few. The end goal would be something similar to [https://www.segger.com/products/user-interface/emwin Segger's emWin]. The library would be used to drive LDCs similar to https://www.adafruit.com/product/3396<br />
Requirements:<br />
<br />
* Hardware agnostic; should simply render to a frame buffer<br />
* No dependencies (No Phobos, no C standard library, and no official D runtime).<br />
* Consider using -betterC, but a custom minimal D runtime is also a viable option<br />
<br />
Related work:<br />
<br />
* https://github.com/TurkeyMan/color<br />
* https://bitbucket.org/timosi/minlibd<br />
* https://github.com/JinShil/stm32f42_discovery_demo<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Functional Reactive Programming ===<br />
----<br />
<br />
Functional reactive programming (FRP) is a programming paradigm for reactive programming (asynchronous dataflow programming) using the building blocks of functional programming (e.g. map, reduce, filter).<br />
The best-known FRP API is the [http://reactivex.io ReactiveX API] whose implementation in D this project would focus.<br />
Note that this project is closely related to the std.eventloop project.<br />
<br />
Proposed Project Mentors: Petar Kirov<br />
<br />
=== BetterC runtime ===<br />
----<br />
<br />
[https://dlang.org/blog/2017/08/23/d-as-a-better-c BetterC] is a subset of D which limits the feature set of D, s.t. it's even easier to migrate from C as no Garbage Collection (GC) is used anymore.<br />
While, this feature is popular for some projects, `-betterC` today means still means a severe restriction in the amount of D features available (see the [https://dlang.org/spec/betterc.html BetterC specification]).<br />
This project is about making more parts of the D runtime betterC-compatible. For example, classes could be allocated with reference-counting instead of using the GC. <br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Java Native Interface (JNI) library ===<br />
----<br />
<br />
D's features allow to write cut down the boilerplate of wrapper drastically.<br />
See the recently published [https://dlang.org/blog/2017/05/31/project-highlight-excel-d excel-d] for a comparison between the C++ implementation for registering a function in Excel and the D way.<br />
Similarly a solid JNI library would open up new many new use cases and allow the Java community to profit even easier from D's features.<br />
<br />
Previous work: [https://github.com/Monnoroch/DJni DJni], [https://github.com/jamesmahler/djvm djvm]<br />
<br />
Proposed Project Mentor: TBA<br />
<br />
=== ORM mapping ===<br />
----<br />
<br />
SQLAlchemy is an object-relational mapper which provides "a full suite of well known enterprise-level persistence patterns, designed for efficient and high-performing database access, adapted into a simple and Pythonic domain language".<br />
While there has been some attempts in implementing an ORM in D - none of these got close to the simplicity and usability of SQLAlchemy (see [[Database Libraries]]).<br />
However, with D's CTFE queries could - like std.format's strings - already be checked at compile-time and optimizations could be be applied to the parser and serializer.<br />
<br />
This project would be based on the [http://dconf.org/2016/talks/smith.html proposed std.database abstraction] and focus on creating a general-purpose ORM on top of it.<br />
<br />
See also: Martin Nowak's DConf16 talk about [http://dconf.org/2016/talks/nowak.html Object-Relational Mapper] <br />
<br />
Existing work:<br />
* [https://github.com/huntlabs/hunt-entity hunt-entity]<br />
<br />
Proposed Project Mentor: TBA<br />
<br />
=== std.serialization ===<br />
----<br />
<br />
D has numerous serialization frameworks. From `std.json` to `std.csv` over [https://github.com/dcarp/protobuf-d protobuf] to [https://github.com/vibe-d/vibe.d Vibe.d's] own serialization framework.<br />
The goal of this project is to implement a flexible (de)serialization framework that can be used as a standardized building block for various serialization related things.<br />
One important goal would be to define how a user-specified type has to work in order to make it serializable, as well as to allow the end-user (e.g. a user of std.json) to change the serialization of third-party types that cannot themselves be modified (i.e. let them define their own policies).<br />
<br />
Starting points:<br />
<br />
* [http://vibed.org/api/vibe.data.serialization Vibe.d's serialization framework]<br />
* [https://github.com/jacob-carlborg/orange Orange framework]<br />
<br />
Proposed Project Mentor: Jacob Carlborg<br />
<br />
=== Propose your own project ===<br />
----<br />
<br />
Do you have your own vision for improving D's success? That's great!<br />
Are you convinced that your project helps to advance open source technology related to the D programming language?<br />
Then simply get in touch with D's GSoC org admin (social (at) dlang (dot) org) and potential mentors for your project.<br />
<br />
If you are searching for inspiration, you might want to have a look at the [[DIPs| list of D Improvement Proposals (DIPs)]], the [[Vision/2018H1|high-level vision for this semester]] or the [[Wish_list|wish list]].<br />
<br />
== Ideas From Previous Years ==<br />
<br />
These GSoC idea pages from the past years which might provide more inspiration for proposing your own idea:<br />
<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2018 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2017 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2016_Ideas GSoC 2016 Ideas] (accepted, 4 slots)<br />
* [http://wiki.dlang.org/GSOC_2015_Ideas GSoC 2015 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2014_Ideas GSoC 2014 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2013_Ideas GSoC 2013 Ideas] (not accepted)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2012_Ideas GSoC 2012 Ideas] (accepted, 3 slots)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2011_Ideas GSoC 2011 Ideas]<br />
<br />
You may also want to have a look at [https://wiki.dlang.org/SAOC_2018_ideas the Symmetry Autumn of Code ideas page].<br />
<br />
== Tips for students ==<br />
<br />
Please see the "gsoc" articles at our [https://dlang.org/blog/category/gsoc/ official blog] which contain experience reports from students of previous years.<br />
<br />
Daniel Pocock has [http://danielpocock.com/getting-selected-for-google-summer-of-code-2015 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.<br />
<br />
== Tips for Mentors ==<br />
<br />
If you are interested in mentoring, please check out the [http://en.flossmanuals.net/GSoCMentoring/ organization administrator and mentor] manual for more information.<br />
<br />
[[Category:GSOC]]</div>Greenifyhttps://wiki.dlang.org/?title=GSOC_2019_Ideas&diff=9586GSOC 2019 Ideas2019-03-07T10:14:07Z<p>Greenify: /* Jupyter notebook D kernel */ Fix formatting</p>
<hr />
<div>This is the D Language Foundation's Google Summer of Code 2019 page.<br />
<br />
If you are interested in working on a D project as part of GSoC 2019, please feel free to ask questions on the [https://forum.dlang.org/newpost/general?subject=%5Bgsoc%5D D Newsgroup].<br />
For more specific questions, please contact the GSoC admins at [mailto:gsoc@dlang.rocks?subject=%5BGSoC%202019%5D gsoc@dlang.rocks].<br />
<br />
<br />
== Timeline ==<br />
The timeline for GSoC 2019 [https://developers.google.com/open-source/gsoc/timeline can be found here].<br />
<br />
== Ideas ==<br />
<br />
The D ecosystem is always in need of improvement through the revision of existing projects and the creation of new ones. The core projects like the([http://dlang.org/phobos/index.html standard library]) and the compilers ([[Compilers]]) are always in need of attention. Other important areas include GUI support, integration with other languages, improving and enhancing the tooling, IDE and editor support, and more.<br />
<br />
Please add your project ideas to the list below, being as descriptive as you can in the summaries. Students interested in participating can use the ideas listed here as jumping off points, so the more information you provide, the easier it will be for them to get started. If your idea is particularly complex or nuanced, consider leaving contact information so that interested parties may follow up.<br />
<br />
=== DUB: D's package manager ===<br />
----<br />
<br />
[https://github.com/dlang/dub DUB] - D's package manager - is one of the central infrastructure tools in the D world as a convenient build and package management tool for the D community.<br />
With D gaining more and more popularity, it's also a key tool to guarantee D's further adoption.<br />
Thus there are many great ideas to improve DUB:<br />
<br />
* [https://github.com/dlang/dub/wiki/DEP6 git support]<br />
* [https://github.com/dlang/dub/wiki/DEP2 separate compilation and caching]<br />
* [https://github.com/dlang/dub/wiki/DEP3 extensibility through DUB]<br />
* [https://github.com/dlang/dub/wiki/DEP4 control flow directives]<br />
* [https://github.com/dlang/dub/wiki/DEP5 build system support for C/C++]<br />
* support dub install for distributions<br />
* support building a {snap, Debian, Arch, ...} package out of DUB package<br />
<br />
Any of these listed DUB Enhancement Proposals (DEPs) could form the basis of a GSoC Project.<br />
<br />
'''Update:''' A very detailed list of ideas for improving Dub can be found in this [https://forum.dlang.org/post/eftttpylxanvxjhoigqu@forum.dlang.org Forum thread].<br />
<br />
Proposed Project Mentors: Sönke Ludwig, Sebastian Wilzbach<br />
<br />
=== Header generation for C/C++ ===<br />
----<br />
<br />
With the ever-improving integration between DMD and C/C++, quite a bit of tooling has been developed to generate D header files from C or C++ projects (e.g. [https://github.com/jacob-carlborg/dstep DStep] or [https://github.com/atilaneves/dpp DPP]).<br />
However, for many projects the majority of the source code is now written in D and the reverse step is needed: an automatic way to generate C and C++ headers from a D project.<br />
This would be very valuable for D as it could motivate inter-language projects that typically go C++-fist-with-a-D-binding to work the other way.<br />
<br />
Starting points:<br />
* [https://forum.dlang.org/post/mailman.7146.1551050711.29801.digitalmars-d@puremagic.com NG-Thread: "Make DMD emit C++ .h files same as .di files"]<br />
* [https://github.com/dlang/dmd/pull/8591 Existing specialized work for the DMD codebase]<br />
* [https://gitlab.com/mihails.strasuns/dtoh Existing WIP work for generating C headers]<br />
* [https://github.com/thewilsonator/dtoh Existing WIP work for generating C++ headers, using DMD as a library]<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Language Server Protocol for D ===<br />
----<br />
<br />
The [https://microsoft.github.io/language-server-protocol Language Server Protocol] (LSP) defines the protocol used between an editor or IDE and a language server that provides language features like auto complete, go to definition, find all references etc. Adding features like auto complete, go to definition, or documentation on hover for a programming language takes significant effort. Traditionally this work had to be repeated for each development tool, as each tool provides different APIs for implementing the same feature (see the list of [[Editors]] and [[IDEs]]). Additionally as the existing tools only use `libdparse` (used in [https://github.com/d-language-server/dls DLS] and [https://github.com/dlang-community/DCD DCD]), they lack the ability to perform semantic analysis on the AST and can't evaluate `mixin`'s nor D's very powerful Compile-Time Function Evaluation (CTFE).<br />
A Language Server is meant to provide the language-specific smarts and communicate with development tools over a protocol that enables inter-process communication.<br />
The idea behind the Language Server Protocol (LSP) is to standardize the protocol for how such servers and development tools communicate. This way, single D Language Server can be re-used in multiple development tools, which in turn can support multiple languages with minimal effort.<br />
<br />
Recent development in the DMD compiler [https://dlang.org/blog/2017/08/01/a-dub-case-study-compiling-dmd-as-a-library made it available as a DUB library]. This mean that the compiler itself can be re-used and third-party tools don't have to re-implement e.g. D's complex CTFE. This project is about using the DMD compiler as a library to implement a Language Server for D.<br />
<br />
Proposed Project Mentors: Jacob Carlborg, Sebastian Wilzbach<br />
<br />
How to start:<br />
* [https://github.com/dlang/dmd/blob/master/test/dub_package/frontend.d Simple example] of using DMD as a library<br />
* [https://github.com/jacob-carlborg/dlp More complex use cases]<br />
<br />
=== Mir Project ===<br />
----<br />
<br />
The Mir project is developing numerical libraries for the upcoming numeric packages of<br />
the Dlang standard library. The are numerous projects an interested student could pursue:<br />
<br />
* University project. Your GSoC project can be combined with your scientific research.<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://julialang.org Julia] integration<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://www.numpy.org NumPy] integration<br />
* General purpose BetterC libraries<br />
** I/O betterC Dlang library<br />
** Async betterC Dlang library<br />
** String and format betterC library<br />
* mir-cpuid <br />
** ARM support<br />
** Advanced OS specific support<br />
* mir-glas<br />
** BLAS Level 2 subprograms<br />
** One BLAS Level 3 subprogram. It is OK to do only one! But it must be faster then OpenBLAS, and not slower then Intel MKL.<br />
** Multithreading support for BLAS Level 2<br />
** Multithreading support for BLAS Level 3<br />
<br />
You can get more details on projects related to Mir [https://github.com/libmir/mir/wiki/GSoC-2019 here].<br />
<br />
Its Good To Know:<br />
<br />
To work on the Mir you should be proficient with one of:<br />
<br />
* C<br />
* C++<br />
* LLVM<br />
* Fortran<br />
* Experience with D is not essential.<br />
<br />
To work on the Mir project requires a responsible and self-motivated student.<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
=== LDC (LLVM-based D compiler) ===<br />
----<br />
<br />
The LDC project provides a portable D programming language compiler with modern optimization and code generation capabilities.<br />
The ever-improving feature set of LLVM opens up many opportunities with D.<br />
A few ideas for a potential GSoC project are:<br />
<br />
* exploiting immutability of variables (notably of structs such as string slices)<br />
* devirtualization<br />
* improve debuginfo<br />
* ASan with GC and multithreading<br />
* function multiversioning<br />
<br />
You might also want to browse the [https://github.com/ldc-developers/ldc/issues LDC's issue tracker] for more ideas.<br />
<br />
Proposed Project Mentors: TBA (LDC dev team)<br />
<br />
=== iOS support in LDC ===<br />
----<br />
<br />
Mobile is becoming, or rather is already, the biggest software platform. While LDC already supports the Android platform there's no official support for iOS. The project would consist of adding support for the iOS platform to the LDC compiler, the D runtime library and the D standard library. The goal would be to get support for this platform upstreamed to the LDC main project.<br />
<br />
A lot of existing work has been done but has never been completed or upstreamed: https://github.com/smolt/ldc-iphone-dev.<br />
<br />
Proposed Project Mentors: TBA (LDC dev team)<br />
<br />
=== Baremetal D runtime ===<br />
----<br />
<br />
Many features in the standard library are implemented by using the C runtime. Reusing the rock-solid work of generations of programmers makes a lot of sense as just outputting via `printf` can be very [https://github.molgen.mpg.de/git-mirror/glibc/blob/20003c49884422da7ffbc459cdeee768a6fee07b/stdio-common/vfprintf.c complex]. However, for embedded environments a programmer often only has a tiny amount of storage available or might not even have a C runtime available for his target.<br />
The idea of this project is to implement the most basic parts of the runtime natively in D, s.t. bare metals programmers can just compile for their target. Implementing features natively in D also means that other targets like [https://wiki.dlang.org/Generating_WebAssembly_with_LDC Web Assembly] will automatically be able to use them too. Another advantage of implementing these basic building blocks in D is that one can take advantage of D's Compile-Time Function Evaluation (CTFE) and optimize the methods even further at compile-time.<br />
<br />
Project focus:<br />
- Implement <code>memcpy</code>, <code>memcmp</code> and similar in D (with similar performance to C)<br />
- Implement `malloc` and similar in D (with similar performance to C)<br />
<br />
Starting points:<br />
* [https://theartofmachinery.com/2017/02/28/bare_metal_d.html D for Bare Metal Programming (tutorial series]<br />
* [https://github.com/JinShil/stm32f42_discovery_demo Simple demonstration of using D to bare-metal program an STM32F29I Discovery board]<br />
* [https://github.com/JinShil/memcpyD memcpyD]<br />
* [https://wiki.dlang.org/Programming_in_D_tutorial_on_Embedded_Linux_ARM_devices Programming in D tutorial on Embedded Linux ARM devices]<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== GDC (GCC-based D compiler) ===<br />
----<br />
<br />
The GDC compiles uses GCC as a backend to utilize this powerful backend.<br />
Recently, GDC [https://www.phoronix.com/scan.php?page=news_item&px=GCC-9-Merges-D-Language has been accepted as GCC frontend] and will be part of the GCC9 release.<br />
However, GDC still has lots of tasks that the potential students could work on.<br />
<br />
One idea would be to improve GDC's support for betterC by adding a compiler interface to allow using a modular runtime. Right now when GDC uses some feature (TypeInfo, asserts, unittests), it just emits a call to an `extern(C)` function. A much better approach would be to have a defined D API (e.g. `rt.assert.onAssertFailure(...)`). The compiler can then check if it finds `rt.assert.onFailure`. If not, the compiler can the simply disable that feature and provide nice error messages. This could be done for TypeInfo, Exceptions, Asserts, Switch errors, unit test support, etc. In the end, the vision would be to be able to ship a compiler completely without runtime. This compiler should be able to produce bare bones code without any further configuration. Then add a dependency to `drt:core` in the dub configuration to get class support, `dr:exception` for exceptions, etc. The compiler could then automatically detect availability of these features. (Of course manually adding -I paths would work in exactly the same way).<br />
<br />
For more ideas, interested students are encouraged to browse [https://bugzilla.gdcproject.org/describecomponents.cgi GDC's issue list] or getting [https://wiki.dlang.org/GDC in touch with the GDC development team].<br />
<br />
Proposed Project Mentors: TBA (GDC devteam)<br />
<br />
=== C++ interops ===<br />
----<br />
<br />
There are many experiments in transparently interfacing D with C++, notably:<br />
<br />
* [https://github.com/atilaneves/dpp dpp] by Atila Neves, that parses and translates headers on the fly<br />
* [https://wiki.dlang.org/Calypso Calypso] by Elie Morisse that bridges the two languages at the AST level.<br />
* [https://github.com/jacob-carlborg/dstep DStep] by Jacob Carlborg, automatically generates bindings for C and Objective-C code. The task would be to add support for C++.<br />
<br />
There is also a lot of work in bringing STL types to the DRuntime (see https://github.com/dlang/druntime/pull/2310).<br />
<br />
D would greatly benefit by seamlessly integrating the C++ ecosystem. There are many ways to accomplish this goal and it should be discussed with the community.<br />
Andrei already commented on the importance of a tool like Calypso in this thread:<br />
https://forum.dlang.org/post/m9s4cd$2s1v$1@digitalmars.com<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Persistent Data Structures ===<br />
----<br />
<br />
There is an ongoing effort to reduce the reliance of Phobos on the GC but the GC is not going anywhere given that it has many advantages over manual memory management.<br />
The community would greatly benefit from a wide range of functional programming techniques that have their roots in the usage of immutable and persistent data structures that heavily rely on the GC.<br />
Persistent Data Structures are heavily used in [http://docs.scala-lang.org/overviews/collections/overview.html Scala] and [http://clojure.org/reference/data_structures Clojure] and they allow the programmer to reason about interactivity, sharing and parallelism.<br />
<br />
The focus of this project would be to create a varying range of persistent data structures (sets, vectors, maps, strings, trees, lists, etc...) that respects the range interface and the semantics of Phobos.<br />
<br />
Related Work:<br />
<br />
* https://www.cs.cmu.edu/~rwh/theses/okasaki.pdf <br />
* https://www.worldcat.org/title/rrb-trees-efficient-immutable-vectors/oclc/820379112<br />
* https://www.youtube.com/watch?v=7BFF50BHPPo<br />
* https://www.infoq.com/presentations/Value-Values<br />
* https://github.com/arximboldi/immer<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== std.benchmark ===<br />
----<br />
<br />
Ideally every function in Phobos should have its own benchmark suite which is run for every PR to check for performance improvements or regressions.<br />
* Additionally support for the new big O annotation [https://github.com/dlang/phobos/pull/4965 here] would be nice. <br />
* Existing work: [https://github.com/dlang/phobos/pull/794 here], and [https://github.com/dlang/phobos/pull/3695 here], and [https://github.com/atilaneves/unit-threaded/tree/master/source/unit_threaded/randomized here (QuickText-like testing)]. <br />
<br />
Proposed Project Mentors: Sebastian Wilzbach<br />
<br />
=== Jupyter notebook D kernel ===<br />
----<br />
<br />
The Jupyter Notebook is an open-source web application that allows you to create and share documents that contain live code, equations, visualizations and narrative text. Uses include: data cleaning and transformation, numerical simulation, statistical modeling, data visualization, machine learning, and much more.<br />
Jupyter notebooks are extremely popular among data scientist as they allow interactive progress and exploring a solution step by step.<br />
With a bit of work, a statically compiled language can be used in an interactive notebook e.g. [https://blog.jupyter.org/interactive-workflows-for-c-with-jupyter-fe9b54227d92 Cling] for C++ and<br />
[https://github.com/gopherdata/gophernotes gophernotes] for Go.<br />
Apart from being useful to data scientist, a Jupyter D kernel would allow an intuitive exploration of the language for newcomers and people starting with new libraries.<br />
<br />
Existing works:<br />
* [https://github.com/dlang-community/drepl drepl] - simple REPL for D<br />
* [https://github.com/DlangScience/PydMagic PydMagic] - allows to write PyD extension in a notebook.<br />
<br />
Proposed Project Mentor: Sebastian Wilzbach<br />
<br />
=== Tabular data container (data frames) ===<br />
----<br />
<br />
Pandas, R and Julia have made [https://github.com/mobileink/data.frame/wiki/What-is-a-Data-Frame%3F data frames] very popular.<br />
As D is getting more interest from data scientist (e.g. [https://github.com/eBay/tsv-utils eBay] or [http://tech.adroll.com/blog/data/2014/11/17/d-is-for-data-science.html AdRoll]) it would be very beneficial to use one language for the entire data analysis pipeline - especially considering that D (in contrast to popular languages like Python, R or Julia) - is compiled to native machine code and gets optimized by the sophisticated LLVM backend.<br />
<br />
Minimum requirements:<br />
<br />
* conversion to and from CSV<br />
* multi-indexing<br />
* column binary operations, e.g. `column1 * column2`<br />
* group-by on an arbitrary number of columns<br />
* column/group aggregations<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
=== Graphics library for resource constrained embedded systems ===<br />
----<br />
<br />
Create a 2D rasterizer, rich drawing primitives, and 2D graphics library suitable for resource constrained embedded systems (e.g. ARM Cortex-M) to be used in industrial controls, home appliances, medical devices, consumer electronics, and IoT just to name a few. The end goal would be something similar to [https://www.segger.com/products/user-interface/emwin Segger's emWin]. The library would be used to drive LDCs similar to https://www.adafruit.com/product/3396<br />
Requirements:<br />
<br />
* Hardware agnostic; should simply render to a frame buffer<br />
* No dependencies (No Phobos, no C standard library, and no official D runtime).<br />
* Consider using -betterC, but a custom minimal D runtime is also a viable option<br />
<br />
Related work:<br />
<br />
* https://github.com/TurkeyMan/color<br />
* https://bitbucket.org/timosi/minlibd<br />
* https://github.com/JinShil/stm32f42_discovery_demo<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Functional Reactive Programming ===<br />
----<br />
<br />
Functional reactive programming (FRP) is a programming paradigm for reactive programming (asynchronous dataflow programming) using the building blocks of functional programming (e.g. map, reduce, filter).<br />
The best-known FRP API is the [http://reactivex.io ReactiveX API] whose implementation in D this project would focus.<br />
Note that this project is closely related to the std.eventloop project.<br />
<br />
Proposed Project Mentors: Petar Kirov<br />
<br />
=== BetterC runtime ===<br />
----<br />
<br />
[https://dlang.org/blog/2017/08/23/d-as-a-better-c BetterC] is a subset of D which limits the feature set of D, s.t. it's even easier to migrate from C as no Garbage Collection (GC) is used anymore.<br />
While, this feature is popular for some projects, `-betterC` today means still means a severe restriction in the amount of D features available (see the [https://dlang.org/spec/betterc.html BetterC specification]).<br />
This project is about making more parts of the D runtime betterC-compatible. For example, classes could be allocated with reference-counting instead of using the GC. <br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Java Native Interface (JNI) library ===<br />
----<br />
<br />
D's features allow to write cut down the boilerplate of wrapper drastically.<br />
See the recently published [https://dlang.org/blog/2017/05/31/project-highlight-excel-d excel-d] for a comparison between the C++ implementation for registering a function in Excel and the D way.<br />
Similarly a solid JNI library would open up new many new use cases and allow the Java community to profit even easier from D's features.<br />
<br />
Previous work: [https://github.com/Monnoroch/DJni DJni], [https://github.com/jamesmahler/djvm djvm]<br />
<br />
Proposed Project Mentor: TBA<br />
<br />
=== ORM mapping ===<br />
----<br />
<br />
SQLAlchemy is an object-relational mapper which provides "a full suite of well known enterprise-level persistence patterns, designed for efficient and high-performing database access, adapted into a simple and Pythonic domain language".<br />
While there has been some attempts in implementing an ORM in D - none of these got close to the simplicity and usability of SQLAlchemy (see [[Database Libraries]]).<br />
However, with D's CTFE queries could - like std.format's strings - already be checked at compile-time and optimizations could be be applied to the parser and serializer.<br />
<br />
This project would be based on the [http://dconf.org/2016/talks/smith.html proposed std.database abstraction] and focus on creating a general-purpose ORM on top of it.<br />
<br />
See also: Martin Nowak's DConf16 talk about [http://dconf.org/2016/talks/nowak.html Object-Relational Mapper] <br />
<br />
Existing work:<br />
* [https://github.com/huntlabs/hunt-entity hunt-entity]<br />
<br />
Proposed Project Mentor: TBA<br />
<br />
=== std.serialization ===<br />
----<br />
<br />
D has numerous serialization frameworks. From `std.json` to `std.csv` over [https://github.com/dcarp/protobuf-d protobuf] to [https://github.com/vibe-d/vibe.d Vibe.d's] own serialization framework.<br />
The goal of this project is to implement a flexible (de)serialization framework that can be used as a standardized building block for various serialization related things.<br />
One important goal would be to define how a user-specified type has to work in order to make it serializable, as well as to allow the end-user (e.g. a user of std.json) to change the serialization of third-party types that cannot themselves be modified (i.e. let them define their own policies).<br />
<br />
Starting points:<br />
<br />
* [http://vibed.org/api/vibe.data.serialization Vibe.d's serialization framework]<br />
* [https://github.com/jacob-carlborg/orange Orange framework]<br />
<br />
Proposed Project Mentor: Jacob Carlborg<br />
<br />
=== Propose your own project ===<br />
----<br />
<br />
Do you have your own vision for improving D's success? That's great!<br />
Are you convinced that your project helps to advance open source technology related to the D programming language?<br />
Then simply get in touch with D's GSoC org admin (social (at) dlang (dot) org) and potential mentors for your project.<br />
<br />
If you are searching for inspiration, you might want to have a look at the [[DIPs| list of D Improvement Proposals (DIPs)]], the [[Vision/2018H1|high-level vision for this semester]] or the [[Wish_list|wish list]].<br />
<br />
== Ideas From Previous Years ==<br />
<br />
These GSoC idea pages from the past years which might provide more inspiration for proposing your own idea:<br />
<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2018 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2017 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2016_Ideas GSoC 2016 Ideas] (accepted, 4 slots)<br />
* [http://wiki.dlang.org/GSOC_2015_Ideas GSoC 2015 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2014_Ideas GSoC 2014 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2013_Ideas GSoC 2013 Ideas] (not accepted)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2012_Ideas GSoC 2012 Ideas] (accepted, 3 slots)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2011_Ideas GSoC 2011 Ideas]<br />
<br />
You may also want to have a look at [https://wiki.dlang.org/SAOC_2018_ideas the Symmetry Autumn of Code ideas page].<br />
<br />
== Tips for students ==<br />
<br />
Please see the "gsoc" articles at our [https://dlang.org/blog/category/gsoc/ official blog] which contain experience reports from students of previous years.<br />
<br />
Daniel Pocock has [http://danielpocock.com/getting-selected-for-google-summer-of-code-2015 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.<br />
<br />
== Tips for Mentors ==<br />
<br />
If you are interested in mentoring, please check out the [http://en.flossmanuals.net/GSoCMentoring/ organization administrator and mentor] manual for more information.<br />
<br />
[[Category:GSOC]]</div>Greenifyhttps://wiki.dlang.org/?title=GSOC_2019_Ideas&diff=9585GSOC 2019 Ideas2019-03-07T10:10:07Z<p>Greenify: Use a DForum link with a pre-filled [gsoc] subject line</p>
<hr />
<div>This is the D Language Foundation's Google Summer of Code 2019 page.<br />
<br />
If you are interested in working on a D project as part of GSoC 2019, please feel free to ask questions on the [https://forum.dlang.org/newpost/general?subject=%5Bgsoc%5D D Newsgroup].<br />
For more specific questions, please contact the GSoC admins at [mailto:gsoc@dlang.rocks?subject=%5BGSoC%202019%5D gsoc@dlang.rocks].<br />
<br />
<br />
== Timeline ==<br />
The timeline for GSoC 2019 [https://developers.google.com/open-source/gsoc/timeline can be found here].<br />
<br />
== Ideas ==<br />
<br />
The D ecosystem is always in need of improvement through the revision of existing projects and the creation of new ones. The core projects like the([http://dlang.org/phobos/index.html standard library]) and the compilers ([[Compilers]]) are always in need of attention. Other important areas include GUI support, integration with other languages, improving and enhancing the tooling, IDE and editor support, and more.<br />
<br />
Please add your project ideas to the list below, being as descriptive as you can in the summaries. Students interested in participating can use the ideas listed here as jumping off points, so the more information you provide, the easier it will be for them to get started. If your idea is particularly complex or nuanced, consider leaving contact information so that interested parties may follow up.<br />
<br />
=== DUB: D's package manager ===<br />
----<br />
<br />
[https://github.com/dlang/dub DUB] - D's package manager - is one of the central infrastructure tools in the D world as a convenient build and package management tool for the D community.<br />
With D gaining more and more popularity, it's also a key tool to guarantee D's further adoption.<br />
Thus there are many great ideas to improve DUB:<br />
<br />
* [https://github.com/dlang/dub/wiki/DEP6 git support]<br />
* [https://github.com/dlang/dub/wiki/DEP2 separate compilation and caching]<br />
* [https://github.com/dlang/dub/wiki/DEP3 extensibility through DUB]<br />
* [https://github.com/dlang/dub/wiki/DEP4 control flow directives]<br />
* [https://github.com/dlang/dub/wiki/DEP5 build system support for C/C++]<br />
* support dub install for distributions<br />
* support building a {snap, Debian, Arch, ...} package out of DUB package<br />
<br />
Any of these listed DUB Enhancement Proposals (DEPs) could form the basis of a GSoC Project.<br />
<br />
'''Update:''' A very detailed list of ideas for improving Dub can be found in this [https://forum.dlang.org/post/eftttpylxanvxjhoigqu@forum.dlang.org Forum thread].<br />
<br />
Proposed Project Mentors: Sönke Ludwig, Sebastian Wilzbach<br />
<br />
=== Header generation for C/C++ ===<br />
----<br />
<br />
With the ever-improving integration between DMD and C/C++, quite a bit of tooling has been developed to generate D header files from C or C++ projects (e.g. [https://github.com/jacob-carlborg/dstep DStep] or [https://github.com/atilaneves/dpp DPP]).<br />
However, for many projects the majority of the source code is now written in D and the reverse step is needed: an automatic way to generate C and C++ headers from a D project.<br />
This would be very valuable for D as it could motivate inter-language projects that typically go C++-fist-with-a-D-binding to work the other way.<br />
<br />
Starting points:<br />
* [https://forum.dlang.org/post/mailman.7146.1551050711.29801.digitalmars-d@puremagic.com NG-Thread: "Make DMD emit C++ .h files same as .di files"]<br />
* [https://github.com/dlang/dmd/pull/8591 Existing specialized work for the DMD codebase]<br />
* [https://gitlab.com/mihails.strasuns/dtoh Existing WIP work for generating C headers]<br />
* [https://github.com/thewilsonator/dtoh Existing WIP work for generating C++ headers, using DMD as a library]<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Language Server Protocol for D ===<br />
----<br />
<br />
The [https://microsoft.github.io/language-server-protocol Language Server Protocol] (LSP) defines the protocol used between an editor or IDE and a language server that provides language features like auto complete, go to definition, find all references etc. Adding features like auto complete, go to definition, or documentation on hover for a programming language takes significant effort. Traditionally this work had to be repeated for each development tool, as each tool provides different APIs for implementing the same feature (see the list of [[Editors]] and [[IDEs]]). Additionally as the existing tools only use `libdparse` (used in [https://github.com/d-language-server/dls DLS] and [https://github.com/dlang-community/DCD DCD]), they lack the ability to perform semantic analysis on the AST and can't evaluate `mixin`'s nor D's very powerful Compile-Time Function Evaluation (CTFE).<br />
A Language Server is meant to provide the language-specific smarts and communicate with development tools over a protocol that enables inter-process communication.<br />
The idea behind the Language Server Protocol (LSP) is to standardize the protocol for how such servers and development tools communicate. This way, single D Language Server can be re-used in multiple development tools, which in turn can support multiple languages with minimal effort.<br />
<br />
Recent development in the DMD compiler [https://dlang.org/blog/2017/08/01/a-dub-case-study-compiling-dmd-as-a-library made it available as a DUB library]. This mean that the compiler itself can be re-used and third-party tools don't have to re-implement e.g. D's complex CTFE. This project is about using the DMD compiler as a library to implement a Language Server for D.<br />
<br />
Proposed Project Mentors: Jacob Carlborg, Sebastian Wilzbach<br />
<br />
How to start:<br />
* [https://github.com/dlang/dmd/blob/master/test/dub_package/frontend.d Simple example] of using DMD as a library<br />
* [https://github.com/jacob-carlborg/dlp More complex use cases]<br />
<br />
=== Mir Project ===<br />
----<br />
<br />
The Mir project is developing numerical libraries for the upcoming numeric packages of<br />
the Dlang standard library. The are numerous projects an interested student could pursue:<br />
<br />
* University project. Your GSoC project can be combined with your scientific research.<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://julialang.org Julia] integration<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://www.numpy.org NumPy] integration<br />
* General purpose BetterC libraries<br />
** I/O betterC Dlang library<br />
** Async betterC Dlang library<br />
** String and format betterC library<br />
* mir-cpuid <br />
** ARM support<br />
** Advanced OS specific support<br />
* mir-glas<br />
** BLAS Level 2 subprograms<br />
** One BLAS Level 3 subprogram. It is OK to do only one! But it must be faster then OpenBLAS, and not slower then Intel MKL.<br />
** Multithreading support for BLAS Level 2<br />
** Multithreading support for BLAS Level 3<br />
<br />
You can get more details on projects related to Mir [https://github.com/libmir/mir/wiki/GSoC-2019 here].<br />
<br />
Its Good To Know:<br />
<br />
To work on the Mir you should be proficient with one of:<br />
<br />
* C<br />
* C++<br />
* LLVM<br />
* Fortran<br />
* Experience with D is not essential.<br />
<br />
To work on the Mir project requires a responsible and self-motivated student.<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
=== LDC (LLVM-based D compiler) ===<br />
----<br />
<br />
The LDC project provides a portable D programming language compiler with modern optimization and code generation capabilities.<br />
The ever-improving feature set of LLVM opens up many opportunities with D.<br />
A few ideas for a potential GSoC project are:<br />
<br />
* exploiting immutability of variables (notably of structs such as string slices)<br />
* devirtualization<br />
* improve debuginfo<br />
* ASan with GC and multithreading<br />
* function multiversioning<br />
<br />
You might also want to browse the [https://github.com/ldc-developers/ldc/issues LDC's issue tracker] for more ideas.<br />
<br />
Proposed Project Mentors: TBA (LDC dev team)<br />
<br />
=== iOS support in LDC ===<br />
----<br />
<br />
Mobile is becoming, or rather is already, the biggest software platform. While LDC already supports the Android platform there's no official support for iOS. The project would consist of adding support for the iOS platform to the LDC compiler, the D runtime library and the D standard library. The goal would be to get support for this platform upstreamed to the LDC main project.<br />
<br />
A lot of existing work has been done but has never been completed or upstreamed: https://github.com/smolt/ldc-iphone-dev.<br />
<br />
Proposed Project Mentors: TBA (LDC dev team)<br />
<br />
=== Baremetal D runtime ===<br />
----<br />
<br />
Many features in the standard library are implemented by using the C runtime. Reusing the rock-solid work of generations of programmers makes a lot of sense as just outputting via `printf` can be very [https://github.molgen.mpg.de/git-mirror/glibc/blob/20003c49884422da7ffbc459cdeee768a6fee07b/stdio-common/vfprintf.c complex]. However, for embedded environments a programmer often only has a tiny amount of storage available or might not even have a C runtime available for his target.<br />
The idea of this project is to implement the most basic parts of the runtime natively in D, s.t. bare metals programmers can just compile for their target. Implementing features natively in D also means that other targets like [https://wiki.dlang.org/Generating_WebAssembly_with_LDC Web Assembly] will automatically be able to use them too. Another advantage of implementing these basic building blocks in D is that one can take advantage of D's Compile-Time Function Evaluation (CTFE) and optimize the methods even further at compile-time.<br />
<br />
Project focus:<br />
- Implement <code>memcpy</code>, <code>memcmp</code> and similar in D (with similar performance to C)<br />
- Implement `malloc` and similar in D (with similar performance to C)<br />
<br />
Starting points:<br />
* [https://theartofmachinery.com/2017/02/28/bare_metal_d.html D for Bare Metal Programming (tutorial series]<br />
* [https://github.com/JinShil/stm32f42_discovery_demo Simple demonstration of using D to bare-metal program an STM32F29I Discovery board]<br />
* [https://github.com/JinShil/memcpyD memcpyD]<br />
* [https://wiki.dlang.org/Programming_in_D_tutorial_on_Embedded_Linux_ARM_devices Programming in D tutorial on Embedded Linux ARM devices]<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== GDC (GCC-based D compiler) ===<br />
----<br />
<br />
The GDC compiles uses GCC as a backend to utilize this powerful backend.<br />
Recently, GDC [https://www.phoronix.com/scan.php?page=news_item&px=GCC-9-Merges-D-Language has been accepted as GCC frontend] and will be part of the GCC9 release.<br />
However, GDC still has lots of tasks that the potential students could work on.<br />
<br />
One idea would be to improve GDC's support for betterC by adding a compiler interface to allow using a modular runtime. Right now when GDC uses some feature (TypeInfo, asserts, unittests), it just emits a call to an `extern(C)` function. A much better approach would be to have a defined D API (e.g. `rt.assert.onAssertFailure(...)`). The compiler can then check if it finds `rt.assert.onFailure`. If not, the compiler can the simply disable that feature and provide nice error messages. This could be done for TypeInfo, Exceptions, Asserts, Switch errors, unit test support, etc. In the end, the vision would be to be able to ship a compiler completely without runtime. This compiler should be able to produce bare bones code without any further configuration. Then add a dependency to `drt:core` in the dub configuration to get class support, `dr:exception` for exceptions, etc. The compiler could then automatically detect availability of these features. (Of course manually adding -I paths would work in exactly the same way).<br />
<br />
For more ideas, interested students are encouraged to browse [https://bugzilla.gdcproject.org/describecomponents.cgi GDC's issue list] or getting [https://wiki.dlang.org/GDC in touch with the GDC development team].<br />
<br />
Proposed Project Mentors: TBA (GDC devteam)<br />
<br />
=== C++ interops ===<br />
----<br />
<br />
There are many experiments in transparently interfacing D with C++, notably:<br />
<br />
* [https://github.com/atilaneves/dpp dpp] by Atila Neves, that parses and translates headers on the fly<br />
* [https://wiki.dlang.org/Calypso Calypso] by Elie Morisse that bridges the two languages at the AST level.<br />
* [https://github.com/jacob-carlborg/dstep DStep] by Jacob Carlborg, automatically generates bindings for C and Objective-C code. The task would be to add support for C++.<br />
<br />
There is also a lot of work in bringing STL types to the DRuntime (see https://github.com/dlang/druntime/pull/2310).<br />
<br />
D would greatly benefit by seamlessly integrating the C++ ecosystem. There are many ways to accomplish this goal and it should be discussed with the community.<br />
Andrei already commented on the importance of a tool like Calypso in this thread:<br />
https://forum.dlang.org/post/m9s4cd$2s1v$1@digitalmars.com<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Persistent Data Structures ===<br />
----<br />
<br />
There is an ongoing effort to reduce the reliance of Phobos on the GC but the GC is not going anywhere given that it has many advantages over manual memory management.<br />
The community would greatly benefit from a wide range of functional programming techniques that have their roots in the usage of immutable and persistent data structures that heavily rely on the GC.<br />
Persistent Data Structures are heavily used in [http://docs.scala-lang.org/overviews/collections/overview.html Scala] and [http://clojure.org/reference/data_structures Clojure] and they allow the programmer to reason about interactivity, sharing and parallelism.<br />
<br />
The focus of this project would be to create a varying range of persistent data structures (sets, vectors, maps, strings, trees, lists, etc...) that respects the range interface and the semantics of Phobos.<br />
<br />
Related Work:<br />
<br />
* https://www.cs.cmu.edu/~rwh/theses/okasaki.pdf <br />
* https://www.worldcat.org/title/rrb-trees-efficient-immutable-vectors/oclc/820379112<br />
* https://www.youtube.com/watch?v=7BFF50BHPPo<br />
* https://www.infoq.com/presentations/Value-Values<br />
* https://github.com/arximboldi/immer<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== std.benchmark ===<br />
----<br />
<br />
Ideally every function in Phobos should have its own benchmark suite which is run for every PR to check for performance improvements or regressions.<br />
* Additionally support for the new big O annotation [https://github.com/dlang/phobos/pull/4965 here] would be nice. <br />
* Existing work: [https://github.com/dlang/phobos/pull/794 here], and [https://github.com/dlang/phobos/pull/3695 here], and [https://github.com/atilaneves/unit-threaded/tree/master/source/unit_threaded/randomized here (QuickText-like testing)]. <br />
<br />
Proposed Project Mentors: Sebastian Wilzbach<br />
<br />
=== Jupyter notebook D kernel ===<br />
----<br />
<br />
The Jupyter Notebook is an open-source web application that allows you to create and share documents that contain live code, equations, visualizations and narrative text. Uses include: data cleaning and transformation, numerical simulation, statistical modeling, data visualization, machine learning, and much more.<br />
Jupyter notebooks are extremely popular among data scientist as they allow interactive progress and exploring a solution step by step.<br />
With a bit of work, a statically compiled language can be used in an interactive notebook e.g. [Cling https://blog.jupyter.org/interactive-workflows-for-c-with-jupyter-fe9b54227d92] and Go with<br />
[https://github.com/gopherdata/gophernotes gophernotes].<br />
Apart from being useful to data scientist, a Jupyter D kernel would allow an intuitive exploration of the language for newcomers and people starting with new libraries.<br />
<br />
Existing works:<br />
- [https://github.com/dlang-community/drepl drepl] - simple REPL for D<br />
- [https://github.com/DlangScience/PydMagic PydMagic] - allows to write PyD extension in a notebook.<br />
<br />
Proposed Project Mentor: Sebastian Wilzbach<br />
<br />
=== Tabular data container (data frames) ===<br />
----<br />
<br />
Pandas, R and Julia have made [https://github.com/mobileink/data.frame/wiki/What-is-a-Data-Frame%3F data frames] very popular.<br />
As D is getting more interest from data scientist (e.g. [https://github.com/eBay/tsv-utils eBay] or [http://tech.adroll.com/blog/data/2014/11/17/d-is-for-data-science.html AdRoll]) it would be very beneficial to use one language for the entire data analysis pipeline - especially considering that D (in contrast to popular languages like Python, R or Julia) - is compiled to native machine code and gets optimized by the sophisticated LLVM backend.<br />
<br />
Minimum requirements:<br />
<br />
* conversion to and from CSV<br />
* multi-indexing<br />
* column binary operations, e.g. `column1 * column2`<br />
* group-by on an arbitrary number of columns<br />
* column/group aggregations<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
=== Graphics library for resource constrained embedded systems ===<br />
----<br />
<br />
Create a 2D rasterizer, rich drawing primitives, and 2D graphics library suitable for resource constrained embedded systems (e.g. ARM Cortex-M) to be used in industrial controls, home appliances, medical devices, consumer electronics, and IoT just to name a few. The end goal would be something similar to [https://www.segger.com/products/user-interface/emwin Segger's emWin]. The library would be used to drive LDCs similar to https://www.adafruit.com/product/3396<br />
Requirements:<br />
<br />
* Hardware agnostic; should simply render to a frame buffer<br />
* No dependencies (No Phobos, no C standard library, and no official D runtime).<br />
* Consider using -betterC, but a custom minimal D runtime is also a viable option<br />
<br />
Related work:<br />
<br />
* https://github.com/TurkeyMan/color<br />
* https://bitbucket.org/timosi/minlibd<br />
* https://github.com/JinShil/stm32f42_discovery_demo<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Functional Reactive Programming ===<br />
----<br />
<br />
Functional reactive programming (FRP) is a programming paradigm for reactive programming (asynchronous dataflow programming) using the building blocks of functional programming (e.g. map, reduce, filter).<br />
The best-known FRP API is the [http://reactivex.io ReactiveX API] whose implementation in D this project would focus.<br />
Note that this project is closely related to the std.eventloop project.<br />
<br />
Proposed Project Mentors: Petar Kirov<br />
<br />
=== BetterC runtime ===<br />
----<br />
<br />
[https://dlang.org/blog/2017/08/23/d-as-a-better-c BetterC] is a subset of D which limits the feature set of D, s.t. it's even easier to migrate from C as no Garbage Collection (GC) is used anymore.<br />
While, this feature is popular for some projects, `-betterC` today means still means a severe restriction in the amount of D features available (see the [https://dlang.org/spec/betterc.html BetterC specification]).<br />
This project is about making more parts of the D runtime betterC-compatible. For example, classes could be allocated with reference-counting instead of using the GC. <br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Java Native Interface (JNI) library ===<br />
----<br />
<br />
D's features allow to write cut down the boilerplate of wrapper drastically.<br />
See the recently published [https://dlang.org/blog/2017/05/31/project-highlight-excel-d excel-d] for a comparison between the C++ implementation for registering a function in Excel and the D way.<br />
Similarly a solid JNI library would open up new many new use cases and allow the Java community to profit even easier from D's features.<br />
<br />
Previous work: [https://github.com/Monnoroch/DJni DJni], [https://github.com/jamesmahler/djvm djvm]<br />
<br />
Proposed Project Mentor: TBA<br />
<br />
=== ORM mapping ===<br />
----<br />
<br />
SQLAlchemy is an object-relational mapper which provides "a full suite of well known enterprise-level persistence patterns, designed for efficient and high-performing database access, adapted into a simple and Pythonic domain language".<br />
While there has been some attempts in implementing an ORM in D - none of these got close to the simplicity and usability of SQLAlchemy (see [[Database Libraries]]).<br />
However, with D's CTFE queries could - like std.format's strings - already be checked at compile-time and optimizations could be be applied to the parser and serializer.<br />
<br />
This project would be based on the [http://dconf.org/2016/talks/smith.html proposed std.database abstraction] and focus on creating a general-purpose ORM on top of it.<br />
<br />
See also: Martin Nowak's DConf16 talk about [http://dconf.org/2016/talks/nowak.html Object-Relational Mapper] <br />
<br />
Existing work:<br />
* [https://github.com/huntlabs/hunt-entity hunt-entity]<br />
<br />
Proposed Project Mentor: TBA<br />
<br />
=== std.serialization ===<br />
----<br />
<br />
D has numerous serialization frameworks. From `std.json` to `std.csv` over [https://github.com/dcarp/protobuf-d protobuf] to [https://github.com/vibe-d/vibe.d Vibe.d's] own serialization framework.<br />
The goal of this project is to implement a flexible (de)serialization framework that can be used as a standardized building block for various serialization related things.<br />
One important goal would be to define how a user-specified type has to work in order to make it serializable, as well as to allow the end-user (e.g. a user of std.json) to change the serialization of third-party types that cannot themselves be modified (i.e. let them define their own policies).<br />
<br />
Starting points:<br />
<br />
* [http://vibed.org/api/vibe.data.serialization Vibe.d's serialization framework]<br />
* [https://github.com/jacob-carlborg/orange Orange framework]<br />
<br />
Proposed Project Mentor: Jacob Carlborg<br />
<br />
=== Propose your own project ===<br />
----<br />
<br />
Do you have your own vision for improving D's success? That's great!<br />
Are you convinced that your project helps to advance open source technology related to the D programming language?<br />
Then simply get in touch with D's GSoC org admin (social (at) dlang (dot) org) and potential mentors for your project.<br />
<br />
If you are searching for inspiration, you might want to have a look at the [[DIPs| list of D Improvement Proposals (DIPs)]], the [[Vision/2018H1|high-level vision for this semester]] or the [[Wish_list|wish list]].<br />
<br />
== Ideas From Previous Years ==<br />
<br />
These GSoC idea pages from the past years which might provide more inspiration for proposing your own idea:<br />
<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2018 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2017 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2016_Ideas GSoC 2016 Ideas] (accepted, 4 slots)<br />
* [http://wiki.dlang.org/GSOC_2015_Ideas GSoC 2015 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2014_Ideas GSoC 2014 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2013_Ideas GSoC 2013 Ideas] (not accepted)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2012_Ideas GSoC 2012 Ideas] (accepted, 3 slots)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2011_Ideas GSoC 2011 Ideas]<br />
<br />
You may also want to have a look at [https://wiki.dlang.org/SAOC_2018_ideas the Symmetry Autumn of Code ideas page].<br />
<br />
== Tips for students ==<br />
<br />
Please see the "gsoc" articles at our [https://dlang.org/blog/category/gsoc/ official blog] which contain experience reports from students of previous years.<br />
<br />
Daniel Pocock has [http://danielpocock.com/getting-selected-for-google-summer-of-code-2015 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.<br />
<br />
== Tips for Mentors ==<br />
<br />
If you are interested in mentoring, please check out the [http://en.flossmanuals.net/GSoCMentoring/ organization administrator and mentor] manual for more information.<br />
<br />
[[Category:GSOC]]</div>Greenifyhttps://wiki.dlang.org/?title=GSOC_2019_Ideas&diff=9584GSOC 2019 Ideas2019-03-07T09:57:18Z<p>Greenify: Updated contact information</p>
<hr />
<div>This is the D Language Foundation's Google Summer of Code 2019 page.<br />
<br />
If you are interested in working on a D project as part of GSoC 2019, please feel free to ask questions on the [https://forum.dlang.org/group/general D Newsgroup].<br />
For more specific questions or for mentors, please contact the GSoC admins at [mailto:gsoc@dlang.rocks?subject=%5BGSoC%202019%5D gsoc@dlang.rocks].<br />
<br />
<br />
== Timeline ==<br />
The timeline for GSoC 2019 [https://developers.google.com/open-source/gsoc/timeline can be found here].<br />
<br />
== Ideas ==<br />
<br />
The D ecosystem is always in need of improvement through the revision of existing projects and the creation of new ones. The core projects like the([http://dlang.org/phobos/index.html standard library]) and the compilers ([[Compilers]]) are always in need of attention. Other important areas include GUI support, integration with other languages, improving and enhancing the tooling, IDE and editor support, and more.<br />
<br />
Please add your project ideas to the list below, being as descriptive as you can in the summaries. Students interested in participating can use the ideas listed here as jumping off points, so the more information you provide, the easier it will be for them to get started. If your idea is particularly complex or nuanced, consider leaving contact information so that interested parties may follow up.<br />
<br />
=== DUB: D's package manager ===<br />
----<br />
<br />
[https://github.com/dlang/dub DUB] - D's package manager - is one of the central infrastructure tools in the D world as a convenient build and package management tool for the D community.<br />
With D gaining more and more popularity, it's also a key tool to guarantee D's further adoption.<br />
Thus there are many great ideas to improve DUB:<br />
<br />
* [https://github.com/dlang/dub/wiki/DEP6 git support]<br />
* [https://github.com/dlang/dub/wiki/DEP2 separate compilation and caching]<br />
* [https://github.com/dlang/dub/wiki/DEP3 extensibility through DUB]<br />
* [https://github.com/dlang/dub/wiki/DEP4 control flow directives]<br />
* [https://github.com/dlang/dub/wiki/DEP5 build system support for C/C++]<br />
* support dub install for distributions<br />
* support building a {snap, Debian, Arch, ...} package out of DUB package<br />
<br />
Any of these listed DUB Enhancement Proposals (DEPs) could form the basis of a GSoC Project.<br />
<br />
'''Update:''' A very detailed list of ideas for improving Dub can be found in this [https://forum.dlang.org/post/eftttpylxanvxjhoigqu@forum.dlang.org Forum thread].<br />
<br />
Proposed Project Mentors: Sönke Ludwig, Sebastian Wilzbach<br />
<br />
=== Header generation for C/C++ ===<br />
----<br />
<br />
With the ever-improving integration between DMD and C/C++, quite a bit of tooling has been developed to generate D header files from C or C++ projects (e.g. [https://github.com/jacob-carlborg/dstep DStep] or [https://github.com/atilaneves/dpp DPP]).<br />
However, for many projects the majority of the source code is now written in D and the reverse step is needed: an automatic way to generate C and C++ headers from a D project.<br />
This would be very valuable for D as it could motivate inter-language projects that typically go C++-fist-with-a-D-binding to work the other way.<br />
<br />
Starting points:<br />
* [https://forum.dlang.org/post/mailman.7146.1551050711.29801.digitalmars-d@puremagic.com NG-Thread: "Make DMD emit C++ .h files same as .di files"]<br />
* [https://github.com/dlang/dmd/pull/8591 Existing specialized work for the DMD codebase]<br />
* [https://gitlab.com/mihails.strasuns/dtoh Existing WIP work for generating C headers]<br />
* [https://github.com/thewilsonator/dtoh Existing WIP work for generating C++ headers, using DMD as a library]<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Language Server Protocol for D ===<br />
----<br />
<br />
The [https://microsoft.github.io/language-server-protocol Language Server Protocol] (LSP) defines the protocol used between an editor or IDE and a language server that provides language features like auto complete, go to definition, find all references etc. Adding features like auto complete, go to definition, or documentation on hover for a programming language takes significant effort. Traditionally this work had to be repeated for each development tool, as each tool provides different APIs for implementing the same feature (see the list of [[Editors]] and [[IDEs]]). Additionally as the existing tools only use `libdparse` (used in [https://github.com/d-language-server/dls DLS] and [https://github.com/dlang-community/DCD DCD]), they lack the ability to perform semantic analysis on the AST and can't evaluate `mixin`'s nor D's very powerful Compile-Time Function Evaluation (CTFE).<br />
A Language Server is meant to provide the language-specific smarts and communicate with development tools over a protocol that enables inter-process communication.<br />
The idea behind the Language Server Protocol (LSP) is to standardize the protocol for how such servers and development tools communicate. This way, single D Language Server can be re-used in multiple development tools, which in turn can support multiple languages with minimal effort.<br />
<br />
Recent development in the DMD compiler [https://dlang.org/blog/2017/08/01/a-dub-case-study-compiling-dmd-as-a-library made it available as a DUB library]. This mean that the compiler itself can be re-used and third-party tools don't have to re-implement e.g. D's complex CTFE. This project is about using the DMD compiler as a library to implement a Language Server for D.<br />
<br />
Proposed Project Mentors: Jacob Carlborg, Sebastian Wilzbach<br />
<br />
How to start:<br />
* [https://github.com/dlang/dmd/blob/master/test/dub_package/frontend.d Simple example] of using DMD as a library<br />
* [https://github.com/jacob-carlborg/dlp More complex use cases]<br />
<br />
=== Mir Project ===<br />
----<br />
<br />
The Mir project is developing numerical libraries for the upcoming numeric packages of<br />
the Dlang standard library. The are numerous projects an interested student could pursue:<br />
<br />
* University project. Your GSoC project can be combined with your scientific research.<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://julialang.org Julia] integration<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://www.numpy.org NumPy] integration<br />
* General purpose BetterC libraries<br />
** I/O betterC Dlang library<br />
** Async betterC Dlang library<br />
** String and format betterC library<br />
* mir-cpuid <br />
** ARM support<br />
** Advanced OS specific support<br />
* mir-glas<br />
** BLAS Level 2 subprograms<br />
** One BLAS Level 3 subprogram. It is OK to do only one! But it must be faster then OpenBLAS, and not slower then Intel MKL.<br />
** Multithreading support for BLAS Level 2<br />
** Multithreading support for BLAS Level 3<br />
<br />
You can get more details on projects related to Mir [https://github.com/libmir/mir/wiki/GSoC-2019 here].<br />
<br />
Its Good To Know:<br />
<br />
To work on the Mir you should be proficient with one of:<br />
<br />
* C<br />
* C++<br />
* LLVM<br />
* Fortran<br />
* Experience with D is not essential.<br />
<br />
To work on the Mir project requires a responsible and self-motivated student.<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
=== LDC (LLVM-based D compiler) ===<br />
----<br />
<br />
The LDC project provides a portable D programming language compiler with modern optimization and code generation capabilities.<br />
The ever-improving feature set of LLVM opens up many opportunities with D.<br />
A few ideas for a potential GSoC project are:<br />
<br />
* exploiting immutability of variables (notably of structs such as string slices)<br />
* devirtualization<br />
* improve debuginfo<br />
* ASan with GC and multithreading<br />
* function multiversioning<br />
<br />
You might also want to browse the [https://github.com/ldc-developers/ldc/issues LDC's issue tracker] for more ideas.<br />
<br />
Proposed Project Mentors: TBA (LDC dev team)<br />
<br />
=== iOS support in LDC ===<br />
----<br />
<br />
Mobile is becoming, or rather is already, the biggest software platform. While LDC already supports the Android platform there's no official support for iOS. The project would consist of adding support for the iOS platform to the LDC compiler, the D runtime library and the D standard library. The goal would be to get support for this platform upstreamed to the LDC main project.<br />
<br />
A lot of existing work has been done but has never been completed or upstreamed: https://github.com/smolt/ldc-iphone-dev.<br />
<br />
Proposed Project Mentors: TBA (LDC dev team)<br />
<br />
=== Baremetal D runtime ===<br />
----<br />
<br />
Many features in the standard library are implemented by using the C runtime. Reusing the rock-solid work of generations of programmers makes a lot of sense as just outputting via `printf` can be very [https://github.molgen.mpg.de/git-mirror/glibc/blob/20003c49884422da7ffbc459cdeee768a6fee07b/stdio-common/vfprintf.c complex]. However, for embedded environments a programmer often only has a tiny amount of storage available or might not even have a C runtime available for his target.<br />
The idea of this project is to implement the most basic parts of the runtime natively in D, s.t. bare metals programmers can just compile for their target. Implementing features natively in D also means that other targets like [https://wiki.dlang.org/Generating_WebAssembly_with_LDC Web Assembly] will automatically be able to use them too. Another advantage of implementing these basic building blocks in D is that one can take advantage of D's Compile-Time Function Evaluation (CTFE) and optimize the methods even further at compile-time.<br />
<br />
Project focus:<br />
- Implement <code>memcpy</code>, <code>memcmp</code> and similar in D (with similar performance to C)<br />
- Implement `malloc` and similar in D (with similar performance to C)<br />
<br />
Starting points:<br />
* [https://theartofmachinery.com/2017/02/28/bare_metal_d.html D for Bare Metal Programming (tutorial series]<br />
* [https://github.com/JinShil/stm32f42_discovery_demo Simple demonstration of using D to bare-metal program an STM32F29I Discovery board]<br />
* [https://github.com/JinShil/memcpyD memcpyD]<br />
* [https://wiki.dlang.org/Programming_in_D_tutorial_on_Embedded_Linux_ARM_devices Programming in D tutorial on Embedded Linux ARM devices]<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== GDC (GCC-based D compiler) ===<br />
----<br />
<br />
The GDC compiles uses GCC as a backend to utilize this powerful backend.<br />
Recently, GDC [https://www.phoronix.com/scan.php?page=news_item&px=GCC-9-Merges-D-Language has been accepted as GCC frontend] and will be part of the GCC9 release.<br />
However, GDC still has lots of tasks that the potential students could work on.<br />
<br />
One idea would be to improve GDC's support for betterC by adding a compiler interface to allow using a modular runtime. Right now when GDC uses some feature (TypeInfo, asserts, unittests), it just emits a call to an `extern(C)` function. A much better approach would be to have a defined D API (e.g. `rt.assert.onAssertFailure(...)`). The compiler can then check if it finds `rt.assert.onFailure`. If not, the compiler can the simply disable that feature and provide nice error messages. This could be done for TypeInfo, Exceptions, Asserts, Switch errors, unit test support, etc. In the end, the vision would be to be able to ship a compiler completely without runtime. This compiler should be able to produce bare bones code without any further configuration. Then add a dependency to `drt:core` in the dub configuration to get class support, `dr:exception` for exceptions, etc. The compiler could then automatically detect availability of these features. (Of course manually adding -I paths would work in exactly the same way).<br />
<br />
For more ideas, interested students are encouraged to browse [https://bugzilla.gdcproject.org/describecomponents.cgi GDC's issue list] or getting [https://wiki.dlang.org/GDC in touch with the GDC development team].<br />
<br />
Proposed Project Mentors: TBA (GDC devteam)<br />
<br />
=== C++ interops ===<br />
----<br />
<br />
There are many experiments in transparently interfacing D with C++, notably:<br />
<br />
* [https://github.com/atilaneves/dpp dpp] by Atila Neves, that parses and translates headers on the fly<br />
* [https://wiki.dlang.org/Calypso Calypso] by Elie Morisse that bridges the two languages at the AST level.<br />
* [https://github.com/jacob-carlborg/dstep DStep] by Jacob Carlborg, automatically generates bindings for C and Objective-C code. The task would be to add support for C++.<br />
<br />
There is also a lot of work in bringing STL types to the DRuntime (see https://github.com/dlang/druntime/pull/2310).<br />
<br />
D would greatly benefit by seamlessly integrating the C++ ecosystem. There are many ways to accomplish this goal and it should be discussed with the community.<br />
Andrei already commented on the importance of a tool like Calypso in this thread:<br />
https://forum.dlang.org/post/m9s4cd$2s1v$1@digitalmars.com<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Persistent Data Structures ===<br />
----<br />
<br />
There is an ongoing effort to reduce the reliance of Phobos on the GC but the GC is not going anywhere given that it has many advantages over manual memory management.<br />
The community would greatly benefit from a wide range of functional programming techniques that have their roots in the usage of immutable and persistent data structures that heavily rely on the GC.<br />
Persistent Data Structures are heavily used in [http://docs.scala-lang.org/overviews/collections/overview.html Scala] and [http://clojure.org/reference/data_structures Clojure] and they allow the programmer to reason about interactivity, sharing and parallelism.<br />
<br />
The focus of this project would be to create a varying range of persistent data structures (sets, vectors, maps, strings, trees, lists, etc...) that respects the range interface and the semantics of Phobos.<br />
<br />
Related Work:<br />
<br />
* https://www.cs.cmu.edu/~rwh/theses/okasaki.pdf <br />
* https://www.worldcat.org/title/rrb-trees-efficient-immutable-vectors/oclc/820379112<br />
* https://www.youtube.com/watch?v=7BFF50BHPPo<br />
* https://www.infoq.com/presentations/Value-Values<br />
* https://github.com/arximboldi/immer<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== std.benchmark ===<br />
----<br />
<br />
Ideally every function in Phobos should have its own benchmark suite which is run for every PR to check for performance improvements or regressions.<br />
* Additionally support for the new big O annotation [https://github.com/dlang/phobos/pull/4965 here] would be nice. <br />
* Existing work: [https://github.com/dlang/phobos/pull/794 here], and [https://github.com/dlang/phobos/pull/3695 here], and [https://github.com/atilaneves/unit-threaded/tree/master/source/unit_threaded/randomized here (QuickText-like testing)]. <br />
<br />
Proposed Project Mentors: Sebastian Wilzbach<br />
<br />
=== Jupyter notebook D kernel ===<br />
----<br />
<br />
The Jupyter Notebook is an open-source web application that allows you to create and share documents that contain live code, equations, visualizations and narrative text. Uses include: data cleaning and transformation, numerical simulation, statistical modeling, data visualization, machine learning, and much more.<br />
Jupyter notebooks are extremely popular among data scientist as they allow interactive progress and exploring a solution step by step.<br />
With a bit of work, a statically compiled language can be used in an interactive notebook e.g. [Cling https://blog.jupyter.org/interactive-workflows-for-c-with-jupyter-fe9b54227d92] and Go with<br />
[https://github.com/gopherdata/gophernotes gophernotes].<br />
Apart from being useful to data scientist, a Jupyter D kernel would allow an intuitive exploration of the language for newcomers and people starting with new libraries.<br />
<br />
Existing works:<br />
- [https://github.com/dlang-community/drepl drepl] - simple REPL for D<br />
- [https://github.com/DlangScience/PydMagic PydMagic] - allows to write PyD extension in a notebook.<br />
<br />
Proposed Project Mentor: Sebastian Wilzbach<br />
<br />
=== Tabular data container (data frames) ===<br />
----<br />
<br />
Pandas, R and Julia have made [https://github.com/mobileink/data.frame/wiki/What-is-a-Data-Frame%3F data frames] very popular.<br />
As D is getting more interest from data scientist (e.g. [https://github.com/eBay/tsv-utils eBay] or [http://tech.adroll.com/blog/data/2014/11/17/d-is-for-data-science.html AdRoll]) it would be very beneficial to use one language for the entire data analysis pipeline - especially considering that D (in contrast to popular languages like Python, R or Julia) - is compiled to native machine code and gets optimized by the sophisticated LLVM backend.<br />
<br />
Minimum requirements:<br />
<br />
* conversion to and from CSV<br />
* multi-indexing<br />
* column binary operations, e.g. `column1 * column2`<br />
* group-by on an arbitrary number of columns<br />
* column/group aggregations<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
=== Graphics library for resource constrained embedded systems ===<br />
----<br />
<br />
Create a 2D rasterizer, rich drawing primitives, and 2D graphics library suitable for resource constrained embedded systems (e.g. ARM Cortex-M) to be used in industrial controls, home appliances, medical devices, consumer electronics, and IoT just to name a few. The end goal would be something similar to [https://www.segger.com/products/user-interface/emwin Segger's emWin]. The library would be used to drive LDCs similar to https://www.adafruit.com/product/3396<br />
Requirements:<br />
<br />
* Hardware agnostic; should simply render to a frame buffer<br />
* No dependencies (No Phobos, no C standard library, and no official D runtime).<br />
* Consider using -betterC, but a custom minimal D runtime is also a viable option<br />
<br />
Related work:<br />
<br />
* https://github.com/TurkeyMan/color<br />
* https://bitbucket.org/timosi/minlibd<br />
* https://github.com/JinShil/stm32f42_discovery_demo<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Functional Reactive Programming ===<br />
----<br />
<br />
Functional reactive programming (FRP) is a programming paradigm for reactive programming (asynchronous dataflow programming) using the building blocks of functional programming (e.g. map, reduce, filter).<br />
The best-known FRP API is the [http://reactivex.io ReactiveX API] whose implementation in D this project would focus.<br />
Note that this project is closely related to the std.eventloop project.<br />
<br />
Proposed Project Mentors: Petar Kirov<br />
<br />
=== BetterC runtime ===<br />
----<br />
<br />
[https://dlang.org/blog/2017/08/23/d-as-a-better-c BetterC] is a subset of D which limits the feature set of D, s.t. it's even easier to migrate from C as no Garbage Collection (GC) is used anymore.<br />
While, this feature is popular for some projects, `-betterC` today means still means a severe restriction in the amount of D features available (see the [https://dlang.org/spec/betterc.html BetterC specification]).<br />
This project is about making more parts of the D runtime betterC-compatible. For example, classes could be allocated with reference-counting instead of using the GC. <br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Java Native Interface (JNI) library ===<br />
----<br />
<br />
D's features allow to write cut down the boilerplate of wrapper drastically.<br />
See the recently published [https://dlang.org/blog/2017/05/31/project-highlight-excel-d excel-d] for a comparison between the C++ implementation for registering a function in Excel and the D way.<br />
Similarly a solid JNI library would open up new many new use cases and allow the Java community to profit even easier from D's features.<br />
<br />
Previous work: [https://github.com/Monnoroch/DJni DJni], [https://github.com/jamesmahler/djvm djvm]<br />
<br />
Proposed Project Mentor: TBA<br />
<br />
=== ORM mapping ===<br />
----<br />
<br />
SQLAlchemy is an object-relational mapper which provides "a full suite of well known enterprise-level persistence patterns, designed for efficient and high-performing database access, adapted into a simple and Pythonic domain language".<br />
While there has been some attempts in implementing an ORM in D - none of these got close to the simplicity and usability of SQLAlchemy (see [[Database Libraries]]).<br />
However, with D's CTFE queries could - like std.format's strings - already be checked at compile-time and optimizations could be be applied to the parser and serializer.<br />
<br />
This project would be based on the [http://dconf.org/2016/talks/smith.html proposed std.database abstraction] and focus on creating a general-purpose ORM on top of it.<br />
<br />
See also: Martin Nowak's DConf16 talk about [http://dconf.org/2016/talks/nowak.html Object-Relational Mapper] <br />
<br />
Existing work:<br />
* [https://github.com/huntlabs/hunt-entity hunt-entity]<br />
<br />
Proposed Project Mentor: TBA<br />
<br />
=== std.serialization ===<br />
----<br />
<br />
D has numerous serialization frameworks. From `std.json` to `std.csv` over [https://github.com/dcarp/protobuf-d protobuf] to [https://github.com/vibe-d/vibe.d Vibe.d's] own serialization framework.<br />
The goal of this project is to implement a flexible (de)serialization framework that can be used as a standardized building block for various serialization related things.<br />
One important goal would be to define how a user-specified type has to work in order to make it serializable, as well as to allow the end-user (e.g. a user of std.json) to change the serialization of third-party types that cannot themselves be modified (i.e. let them define their own policies).<br />
<br />
Starting points:<br />
<br />
* [http://vibed.org/api/vibe.data.serialization Vibe.d's serialization framework]<br />
* [https://github.com/jacob-carlborg/orange Orange framework]<br />
<br />
Proposed Project Mentor: Jacob Carlborg<br />
<br />
=== Propose your own project ===<br />
----<br />
<br />
Do you have your own vision for improving D's success? That's great!<br />
Are you convinced that your project helps to advance open source technology related to the D programming language?<br />
Then simply get in touch with D's GSoC org admin (social (at) dlang (dot) org) and potential mentors for your project.<br />
<br />
If you are searching for inspiration, you might want to have a look at the [[DIPs| list of D Improvement Proposals (DIPs)]], the [[Vision/2018H1|high-level vision for this semester]] or the [[Wish_list|wish list]].<br />
<br />
== Ideas From Previous Years ==<br />
<br />
These GSoC idea pages from the past years which might provide more inspiration for proposing your own idea:<br />
<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2018 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2017 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2016_Ideas GSoC 2016 Ideas] (accepted, 4 slots)<br />
* [http://wiki.dlang.org/GSOC_2015_Ideas GSoC 2015 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2014_Ideas GSoC 2014 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2013_Ideas GSoC 2013 Ideas] (not accepted)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2012_Ideas GSoC 2012 Ideas] (accepted, 3 slots)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2011_Ideas GSoC 2011 Ideas]<br />
<br />
You may also want to have a look at [https://wiki.dlang.org/SAOC_2018_ideas the Symmetry Autumn of Code ideas page].<br />
<br />
== Tips for students ==<br />
<br />
Please see the "gsoc" articles at our [https://dlang.org/blog/category/gsoc/ official blog] which contain experience reports from students of previous years.<br />
<br />
Daniel Pocock has [http://danielpocock.com/getting-selected-for-google-summer-of-code-2015 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.<br />
<br />
== Tips for Mentors ==<br />
<br />
If you are interested in mentoring, please check out the [http://en.flossmanuals.net/GSoCMentoring/ organization administrator and mentor] manual for more information.<br />
<br />
[[Category:GSOC]]</div>Greenifyhttps://wiki.dlang.org/?title=GSOC_2019_Ideas&diff=9583GSOC 2019 Ideas2019-03-07T09:33:10Z<p>Greenify: Changed contact address</p>
<hr />
<div>This is the D Language Foundation's Google Summer of Code 2019 page.<br />
<br />
If you are interested in working on a D project as part of GSoC 2019, as either a student or mentor, please contact the GSoC admins at [mailto:gsoc@dlang.rocks?subject=[GSoC%202019] gsoc@dlang.rocks. Include "GSoC 2019" in the email subject line.<br />
<br />
<br />
== Timeline ==<br />
The timeline for GSoC 2019 [https://developers.google.com/open-source/gsoc/timeline can be found here].<br />
<br />
== Ideas ==<br />
<br />
The D ecosystem is always in need of improvement through the revision of existing projects and the creation of new ones. The core projects like the([http://dlang.org/phobos/index.html standard library]) and the compilers ([[Compilers]]) are always in need of attention. Other important areas include GUI support, integration with other languages, improving and enhancing the tooling, IDE and editor support, and more.<br />
<br />
Please add your project ideas to the list below, being as descriptive as you can in the summaries. Students interested in participating can use the ideas listed here as jumping off points, so the more information you provide, the easier it will be for them to get started. If your idea is particularly complex or nuanced, consider leaving contact information so that interested parties may follow up.<br />
<br />
=== DUB: D's package manager ===<br />
----<br />
<br />
[https://github.com/dlang/dub DUB] - D's package manager - is one of the central infrastructure tools in the D world as a convenient build and package management tool for the D community.<br />
With D gaining more and more popularity, it's also a key tool to guarantee D's further adoption.<br />
Thus there are many great ideas to improve DUB:<br />
<br />
* [https://github.com/dlang/dub/wiki/DEP6 git support]<br />
* [https://github.com/dlang/dub/wiki/DEP2 separate compilation and caching]<br />
* [https://github.com/dlang/dub/wiki/DEP3 extensibility through DUB]<br />
* [https://github.com/dlang/dub/wiki/DEP4 control flow directives]<br />
* [https://github.com/dlang/dub/wiki/DEP5 build system support for C/C++]<br />
* support dub install for distributions<br />
* support building a {snap, Debian, Arch, ...} package out of DUB package<br />
<br />
Any of these listed DUB Enhancement Proposals (DEPs) could form the basis of a GSoC Project.<br />
<br />
'''Update:''' A very detailed list of ideas for improving Dub can be found in this [https://forum.dlang.org/post/eftttpylxanvxjhoigqu@forum.dlang.org Forum thread].<br />
<br />
Proposed Project Mentors: Sönke Ludwig, Sebastian Wilzbach<br />
<br />
=== Header generation for C/C++ ===<br />
----<br />
<br />
With the ever-improving integration between DMD and C/C++, quite a bit of tooling has been developed to generate D header files from C or C++ projects (e.g. [https://github.com/jacob-carlborg/dstep DStep] or [https://github.com/atilaneves/dpp DPP]).<br />
However, for many projects the majority of the source code is now written in D and the reverse step is needed: an automatic way to generate C and C++ headers from a D project.<br />
This would be very valuable for D as it could motivate inter-language projects that typically go C++-fist-with-a-D-binding to work the other way.<br />
<br />
Starting points:<br />
* [https://forum.dlang.org/post/mailman.7146.1551050711.29801.digitalmars-d@puremagic.com NG-Thread: "Make DMD emit C++ .h files same as .di files"]<br />
* [https://github.com/dlang/dmd/pull/8591 Existing specialized work for the DMD codebase]<br />
* [https://gitlab.com/mihails.strasuns/dtoh Existing WIP work for generating C headers]<br />
* [https://github.com/thewilsonator/dtoh Existing WIP work for generating C++ headers, using DMD as a library]<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Language Server Protocol for D ===<br />
----<br />
<br />
The [https://microsoft.github.io/language-server-protocol Language Server Protocol] (LSP) defines the protocol used between an editor or IDE and a language server that provides language features like auto complete, go to definition, find all references etc. Adding features like auto complete, go to definition, or documentation on hover for a programming language takes significant effort. Traditionally this work had to be repeated for each development tool, as each tool provides different APIs for implementing the same feature (see the list of [[Editors]] and [[IDEs]]). Additionally as the existing tools only use `libdparse` (used in [https://github.com/d-language-server/dls DLS] and [https://github.com/dlang-community/DCD DCD]), they lack the ability to perform semantic analysis on the AST and can't evaluate `mixin`'s nor D's very powerful Compile-Time Function Evaluation (CTFE).<br />
A Language Server is meant to provide the language-specific smarts and communicate with development tools over a protocol that enables inter-process communication.<br />
The idea behind the Language Server Protocol (LSP) is to standardize the protocol for how such servers and development tools communicate. This way, single D Language Server can be re-used in multiple development tools, which in turn can support multiple languages with minimal effort.<br />
<br />
Recent development in the DMD compiler [https://dlang.org/blog/2017/08/01/a-dub-case-study-compiling-dmd-as-a-library made it available as a DUB library]. This mean that the compiler itself can be re-used and third-party tools don't have to re-implement e.g. D's complex CTFE. This project is about using the DMD compiler as a library to implement a Language Server for D.<br />
<br />
Proposed Project Mentors: Jacob Carlborg, Sebastian Wilzbach<br />
<br />
How to start:<br />
* [https://github.com/dlang/dmd/blob/master/test/dub_package/frontend.d Simple example] of using DMD as a library<br />
* [https://github.com/jacob-carlborg/dlp More complex use cases]<br />
<br />
=== Mir Project ===<br />
----<br />
<br />
The Mir project is developing numerical libraries for the upcoming numeric packages of<br />
the Dlang standard library. The are numerous projects an interested student could pursue:<br />
<br />
* University project. Your GSoC project can be combined with your scientific research.<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://julialang.org Julia] integration<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://www.numpy.org NumPy] integration<br />
* General purpose BetterC libraries<br />
** I/O betterC Dlang library<br />
** Async betterC Dlang library<br />
** String and format betterC library<br />
* mir-cpuid <br />
** ARM support<br />
** Advanced OS specific support<br />
* mir-glas<br />
** BLAS Level 2 subprograms<br />
** One BLAS Level 3 subprogram. It is OK to do only one! But it must be faster then OpenBLAS, and not slower then Intel MKL.<br />
** Multithreading support for BLAS Level 2<br />
** Multithreading support for BLAS Level 3<br />
<br />
You can get more details on projects related to Mir [https://github.com/libmir/mir/wiki/GSoC-2019 here].<br />
<br />
Its Good To Know:<br />
<br />
To work on the Mir you should be proficient with one of:<br />
<br />
* C<br />
* C++<br />
* LLVM<br />
* Fortran<br />
* Experience with D is not essential.<br />
<br />
To work on the Mir project requires a responsible and self-motivated student.<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
=== LDC (LLVM-based D compiler) ===<br />
----<br />
<br />
The LDC project provides a portable D programming language compiler with modern optimization and code generation capabilities.<br />
The ever-improving feature set of LLVM opens up many opportunities with D.<br />
A few ideas for a potential GSoC project are:<br />
<br />
* exploiting immutability of variables (notably of structs such as string slices)<br />
* devirtualization<br />
* improve debuginfo<br />
* ASan with GC and multithreading<br />
* function multiversioning<br />
<br />
You might also want to browse the [https://github.com/ldc-developers/ldc/issues LDC's issue tracker] for more ideas.<br />
<br />
Proposed Project Mentors: TBA (LDC dev team)<br />
<br />
=== iOS support in LDC ===<br />
----<br />
<br />
Mobile is becoming, or rather is already, the biggest software platform. While LDC already supports the Android platform there's no official support for iOS. The project would consist of adding support for the iOS platform to the LDC compiler, the D runtime library and the D standard library. The goal would be to get support for this platform upstreamed to the LDC main project.<br />
<br />
A lot of existing work has been done but has never been completed or upstreamed: https://github.com/smolt/ldc-iphone-dev.<br />
<br />
Proposed Project Mentors: TBA (LDC dev team)<br />
<br />
=== Baremetal D runtime ===<br />
----<br />
<br />
Many features in the standard library are implemented by using the C runtime. Reusing the rock-solid work of generations of programmers makes a lot of sense as just outputting via `printf` can be very [https://github.molgen.mpg.de/git-mirror/glibc/blob/20003c49884422da7ffbc459cdeee768a6fee07b/stdio-common/vfprintf.c complex]. However, for embedded environments a programmer often only has a tiny amount of storage available or might not even have a C runtime available for his target.<br />
The idea of this project is to implement the most basic parts of the runtime natively in D, s.t. bare metals programmers can just compile for their target. Implementing features natively in D also means that other targets like [https://wiki.dlang.org/Generating_WebAssembly_with_LDC Web Assembly] will automatically be able to use them too. Another advantage of implementing these basic building blocks in D is that one can take advantage of D's Compile-Time Function Evaluation (CTFE) and optimize the methods even further at compile-time.<br />
<br />
Project focus:<br />
- Implement <code>memcpy</code>, <code>memcmp</code> and similar in D (with similar performance to C)<br />
- Implement `malloc` and similar in D (with similar performance to C)<br />
<br />
Starting points:<br />
* [https://theartofmachinery.com/2017/02/28/bare_metal_d.html D for Bare Metal Programming (tutorial series]<br />
* [https://github.com/JinShil/stm32f42_discovery_demo Simple demonstration of using D to bare-metal program an STM32F29I Discovery board]<br />
* [https://github.com/JinShil/memcpyD memcpyD]<br />
* [https://wiki.dlang.org/Programming_in_D_tutorial_on_Embedded_Linux_ARM_devices Programming in D tutorial on Embedded Linux ARM devices]<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== GDC (GCC-based D compiler) ===<br />
----<br />
<br />
The GDC compiles uses GCC as a backend to utilize this powerful backend.<br />
Recently, GDC [https://www.phoronix.com/scan.php?page=news_item&px=GCC-9-Merges-D-Language has been accepted as GCC frontend] and will be part of the GCC9 release.<br />
However, GDC still has lots of tasks that the potential students could work on.<br />
<br />
One idea would be to improve GDC's support for betterC by adding a compiler interface to allow using a modular runtime. Right now when GDC uses some feature (TypeInfo, asserts, unittests), it just emits a call to an `extern(C)` function. A much better approach would be to have a defined D API (e.g. `rt.assert.onAssertFailure(...)`). The compiler can then check if it finds `rt.assert.onFailure`. If not, the compiler can the simply disable that feature and provide nice error messages. This could be done for TypeInfo, Exceptions, Asserts, Switch errors, unit test support, etc. In the end, the vision would be to be able to ship a compiler completely without runtime. This compiler should be able to produce bare bones code without any further configuration. Then add a dependency to `drt:core` in the dub configuration to get class support, `dr:exception` for exceptions, etc. The compiler could then automatically detect availability of these features. (Of course manually adding -I paths would work in exactly the same way).<br />
<br />
For more ideas, interested students are encouraged to browse [https://bugzilla.gdcproject.org/describecomponents.cgi GDC's issue list] or getting [https://wiki.dlang.org/GDC in touch with the GDC development team].<br />
<br />
Proposed Project Mentors: TBA (GDC devteam)<br />
<br />
=== C++ interops ===<br />
----<br />
<br />
There are many experiments in transparently interfacing D with C++, notably:<br />
<br />
* [https://github.com/atilaneves/dpp dpp] by Atila Neves, that parses and translates headers on the fly<br />
* [https://wiki.dlang.org/Calypso Calypso] by Elie Morisse that bridges the two languages at the AST level.<br />
* [https://github.com/jacob-carlborg/dstep DStep] by Jacob Carlborg, automatically generates bindings for C and Objective-C code. The task would be to add support for C++.<br />
<br />
There is also a lot of work in bringing STL types to the DRuntime (see https://github.com/dlang/druntime/pull/2310).<br />
<br />
D would greatly benefit by seamlessly integrating the C++ ecosystem. There are many ways to accomplish this goal and it should be discussed with the community.<br />
Andrei already commented on the importance of a tool like Calypso in this thread:<br />
https://forum.dlang.org/post/m9s4cd$2s1v$1@digitalmars.com<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Persistent Data Structures ===<br />
----<br />
<br />
There is an ongoing effort to reduce the reliance of Phobos on the GC but the GC is not going anywhere given that it has many advantages over manual memory management.<br />
The community would greatly benefit from a wide range of functional programming techniques that have their roots in the usage of immutable and persistent data structures that heavily rely on the GC.<br />
Persistent Data Structures are heavily used in [http://docs.scala-lang.org/overviews/collections/overview.html Scala] and [http://clojure.org/reference/data_structures Clojure] and they allow the programmer to reason about interactivity, sharing and parallelism.<br />
<br />
The focus of this project would be to create a varying range of persistent data structures (sets, vectors, maps, strings, trees, lists, etc...) that respects the range interface and the semantics of Phobos.<br />
<br />
Related Work:<br />
<br />
* https://www.cs.cmu.edu/~rwh/theses/okasaki.pdf <br />
* https://www.worldcat.org/title/rrb-trees-efficient-immutable-vectors/oclc/820379112<br />
* https://www.youtube.com/watch?v=7BFF50BHPPo<br />
* https://www.infoq.com/presentations/Value-Values<br />
* https://github.com/arximboldi/immer<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== std.benchmark ===<br />
----<br />
<br />
Ideally every function in Phobos should have its own benchmark suite which is run for every PR to check for performance improvements or regressions.<br />
* Additionally support for the new big O annotation [https://github.com/dlang/phobos/pull/4965 here] would be nice. <br />
* Existing work: [https://github.com/dlang/phobos/pull/794 here], and [https://github.com/dlang/phobos/pull/3695 here], and [https://github.com/atilaneves/unit-threaded/tree/master/source/unit_threaded/randomized here (QuickText-like testing)]. <br />
<br />
Proposed Project Mentors: Sebastian Wilzbach<br />
<br />
=== Jupyter notebook D kernel ===<br />
----<br />
<br />
The Jupyter Notebook is an open-source web application that allows you to create and share documents that contain live code, equations, visualizations and narrative text. Uses include: data cleaning and transformation, numerical simulation, statistical modeling, data visualization, machine learning, and much more.<br />
Jupyter notebooks are extremely popular among data scientist as they allow interactive progress and exploring a solution step by step.<br />
With a bit of work, a statically compiled language can be used in an interactive notebook e.g. [Cling https://blog.jupyter.org/interactive-workflows-for-c-with-jupyter-fe9b54227d92] and Go with<br />
[https://github.com/gopherdata/gophernotes gophernotes].<br />
Apart from being useful to data scientist, a Jupyter D kernel would allow an intuitive exploration of the language for newcomers and people starting with new libraries.<br />
<br />
Existing works:<br />
- [https://github.com/dlang-community/drepl drepl] - simple REPL for D<br />
- [https://github.com/DlangScience/PydMagic PydMagic] - allows to write PyD extension in a notebook.<br />
<br />
Proposed Project Mentor: Sebastian Wilzbach<br />
<br />
=== Tabular data container (data frames) ===<br />
----<br />
<br />
Pandas, R and Julia have made [https://github.com/mobileink/data.frame/wiki/What-is-a-Data-Frame%3F data frames] very popular.<br />
As D is getting more interest from data scientist (e.g. [https://github.com/eBay/tsv-utils eBay] or [http://tech.adroll.com/blog/data/2014/11/17/d-is-for-data-science.html AdRoll]) it would be very beneficial to use one language for the entire data analysis pipeline - especially considering that D (in contrast to popular languages like Python, R or Julia) - is compiled to native machine code and gets optimized by the sophisticated LLVM backend.<br />
<br />
Minimum requirements:<br />
<br />
* conversion to and from CSV<br />
* multi-indexing<br />
* column binary operations, e.g. `column1 * column2`<br />
* group-by on an arbitrary number of columns<br />
* column/group aggregations<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
=== Graphics library for resource constrained embedded systems ===<br />
----<br />
<br />
Create a 2D rasterizer, rich drawing primitives, and 2D graphics library suitable for resource constrained embedded systems (e.g. ARM Cortex-M) to be used in industrial controls, home appliances, medical devices, consumer electronics, and IoT just to name a few. The end goal would be something similar to [https://www.segger.com/products/user-interface/emwin Segger's emWin]. The library would be used to drive LDCs similar to https://www.adafruit.com/product/3396<br />
Requirements:<br />
<br />
* Hardware agnostic; should simply render to a frame buffer<br />
* No dependencies (No Phobos, no C standard library, and no official D runtime).<br />
* Consider using -betterC, but a custom minimal D runtime is also a viable option<br />
<br />
Related work:<br />
<br />
* https://github.com/TurkeyMan/color<br />
* https://bitbucket.org/timosi/minlibd<br />
* https://github.com/JinShil/stm32f42_discovery_demo<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Functional Reactive Programming ===<br />
----<br />
<br />
Functional reactive programming (FRP) is a programming paradigm for reactive programming (asynchronous dataflow programming) using the building blocks of functional programming (e.g. map, reduce, filter).<br />
The best-known FRP API is the [http://reactivex.io ReactiveX API] whose implementation in D this project would focus.<br />
Note that this project is closely related to the std.eventloop project.<br />
<br />
Proposed Project Mentors: Petar Kirov<br />
<br />
=== BetterC runtime ===<br />
----<br />
<br />
[https://dlang.org/blog/2017/08/23/d-as-a-better-c BetterC] is a subset of D which limits the feature set of D, s.t. it's even easier to migrate from C as no Garbage Collection (GC) is used anymore.<br />
While, this feature is popular for some projects, `-betterC` today means still means a severe restriction in the amount of D features available (see the [https://dlang.org/spec/betterc.html BetterC specification]).<br />
This project is about making more parts of the D runtime betterC-compatible. For example, classes could be allocated with reference-counting instead of using the GC. <br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Java Native Interface (JNI) library ===<br />
----<br />
<br />
D's features allow to write cut down the boilerplate of wrapper drastically.<br />
See the recently published [https://dlang.org/blog/2017/05/31/project-highlight-excel-d excel-d] for a comparison between the C++ implementation for registering a function in Excel and the D way.<br />
Similarly a solid JNI library would open up new many new use cases and allow the Java community to profit even easier from D's features.<br />
<br />
Previous work: [https://github.com/Monnoroch/DJni DJni], [https://github.com/jamesmahler/djvm djvm]<br />
<br />
Proposed Project Mentor: TBA<br />
<br />
=== ORM mapping ===<br />
----<br />
<br />
SQLAlchemy is an object-relational mapper which provides "a full suite of well known enterprise-level persistence patterns, designed for efficient and high-performing database access, adapted into a simple and Pythonic domain language".<br />
While there has been some attempts in implementing an ORM in D - none of these got close to the simplicity and usability of SQLAlchemy (see [[Database Libraries]]).<br />
However, with D's CTFE queries could - like std.format's strings - already be checked at compile-time and optimizations could be be applied to the parser and serializer.<br />
<br />
This project would be based on the [http://dconf.org/2016/talks/smith.html proposed std.database abstraction] and focus on creating a general-purpose ORM on top of it.<br />
<br />
See also: Martin Nowak's DConf16 talk about [http://dconf.org/2016/talks/nowak.html Object-Relational Mapper] <br />
<br />
Existing work:<br />
* [https://github.com/huntlabs/hunt-entity hunt-entity]<br />
<br />
Proposed Project Mentor: TBA<br />
<br />
=== std.serialization ===<br />
----<br />
<br />
D has numerous serialization frameworks. From `std.json` to `std.csv` over [https://github.com/dcarp/protobuf-d protobuf] to [https://github.com/vibe-d/vibe.d Vibe.d's] own serialization framework.<br />
The goal of this project is to implement a flexible (de)serialization framework that can be used as a standardized building block for various serialization related things.<br />
One important goal would be to define how a user-specified type has to work in order to make it serializable, as well as to allow the end-user (e.g. a user of std.json) to change the serialization of third-party types that cannot themselves be modified (i.e. let them define their own policies).<br />
<br />
Starting points:<br />
<br />
* [http://vibed.org/api/vibe.data.serialization Vibe.d's serialization framework]<br />
* [https://github.com/jacob-carlborg/orange Orange framework]<br />
<br />
Proposed Project Mentor: Jacob Carlborg<br />
<br />
=== Propose your own project ===<br />
----<br />
<br />
Do you have your own vision for improving D's success? That's great!<br />
Are you convinced that your project helps to advance open source technology related to the D programming language?<br />
Then simply get in touch with D's GSoC org admin (social (at) dlang (dot) org) and potential mentors for your project.<br />
<br />
If you are searching for inspiration, you might want to have a look at the [[DIPs| list of D Improvement Proposals (DIPs)]], the [[Vision/2018H1|high-level vision for this semester]] or the [[Wish_list|wish list]].<br />
<br />
== Ideas From Previous Years ==<br />
<br />
These GSoC idea pages from the past years which might provide more inspiration for proposing your own idea:<br />
<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2018 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2017 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2016_Ideas GSoC 2016 Ideas] (accepted, 4 slots)<br />
* [http://wiki.dlang.org/GSOC_2015_Ideas GSoC 2015 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2014_Ideas GSoC 2014 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2013_Ideas GSoC 2013 Ideas] (not accepted)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2012_Ideas GSoC 2012 Ideas] (accepted, 3 slots)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2011_Ideas GSoC 2011 Ideas]<br />
<br />
You may also want to have a look at [https://wiki.dlang.org/SAOC_2018_ideas the Symmetry Autumn of Code ideas page].<br />
<br />
== Tips for students ==<br />
<br />
Please see the "gsoc" articles at our [https://dlang.org/blog/category/gsoc/ official blog] which contain experience reports from students of previous years.<br />
<br />
Daniel Pocock has [http://danielpocock.com/getting-selected-for-google-summer-of-code-2015 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.<br />
<br />
== Tips for Mentors ==<br />
<br />
If you are interested in mentoring, please check out the [http://en.flossmanuals.net/GSoCMentoring/ organization administrator and mentor] manual for more information.<br />
<br />
[[Category:GSOC]]</div>Greenifyhttps://wiki.dlang.org/?title=GSOC_2019_Ideas&diff=9574GSOC 2019 Ideas2019-03-03T04:50:23Z<p>Greenify: Whitespace edits</p>
<hr />
<div>This is the D Language Foundation's Google Summer of Code 2019 page.<br />
<br />
If you are interested in working on a D project as part of GSoC 2019, as either a student or mentor, please contact the GSoC admins at social@dlang.org. Include "GSoC 2019" in the email subject line.<br />
<br />
<br />
== Timeline ==<br />
The timeline for GSoC 2019 [https://developers.google.com/open-source/gsoc/timeline can be found here].<br />
<br />
== Ideas ==<br />
<br />
The D ecosystem is always in need of improvement through the revision of existing projects and the creation of new ones. The core projects like the([http://dlang.org/phobos/index.html standard library]) and the compilers ([[Compilers]]) are always in need of attention. Other important areas include GUI support, integration with other languages, improving and enhancing the tooling, IDE and editor support, and more.<br />
<br />
Please add your project ideas to the list below, being as descriptive as you can in the summaries. Students interested in participating can use the ideas listed here as jumping off points, so the more information you provide, the easier it will be for them to get started. If your idea is particularly complex or nuanced, consider leaving contact information so that interested parties may follow up.<br />
<br />
=== DUB: D's package manager ===<br />
----<br />
<br />
[https://github.com/dlang/dub DUB] - D's package manager - is one of the central infrastructure tools in the D world as a convenient build and package management tool for the D community.<br />
With D gaining more and more popularity, it's also a key tool to guarantee D's further adoption.<br />
Thus there are many great ideas to improve DUB:<br />
<br />
* [https://github.com/dlang/dub/wiki/DEP6 git support]<br />
* [https://github.com/dlang/dub/wiki/DEP2 separate compilation and caching]<br />
* [https://github.com/dlang/dub/wiki/DEP3 extensibility through DUB]<br />
* [https://github.com/dlang/dub/wiki/DEP4 control flow directives]<br />
* [https://github.com/dlang/dub/wiki/DEP5 build system support for C/C++]<br />
* support dub install for distributions<br />
* support building a {snap, Debian, Arch, ...} package out of DUB package<br />
<br />
Any of these listed DUB Enhancement Proposals (DEPs) could form the basis of a GSoC Project.<br />
<br />
'''Update:''' A very detailed list of ideas for improving Dub can be found in this [https://forum.dlang.org/post/eftttpylxanvxjhoigqu@forum.dlang.org Forum thread].<br />
<br />
Proposed Project Mentors: Sönke Ludwig, Sebastian Wilzbach<br />
<br />
=== Header generation for C/C++ ===<br />
----<br />
<br />
With the ever-improving integration between DMD and C/C++, quite a bit of tooling has been developed to generate D header files from C or C++ projects (e.g. [https://github.com/jacob-carlborg/dstep DStep] or [https://github.com/atilaneves/dpp DPP]).<br />
However, for many projects the majority of the source code is now written in D and the reverse step is needed: an automatic way to generate C and C++ headers from a D project.<br />
This would be very valuable for D as it could motivate inter-language projects that typically go C++-fist-with-a-D-binding to work the other way.<br />
<br />
Starting points:<br />
* [https://forum.dlang.org/post/mailman.7146.1551050711.29801.digitalmars-d@puremagic.com NG-Thread: "Make DMD emit C++ .h files same as .di files"]<br />
* [https://github.com/dlang/dmd/pull/8591 Existing specialized work for the DMD codebase]<br />
* [https://gitlab.com/mihails.strasuns/dtoh Existing WIP work for generating C headers]<br />
* [https://github.com/thewilsonator/dtoh Existing WIP work for generating C++ headers, using DMD as a library]<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Language Server Protocol for D ===<br />
----<br />
<br />
The [https://microsoft.github.io/language-server-protocol Language Server Protocol] (LSP) defines the protocol used between an editor or IDE and a language server that provides language features like auto complete, go to definition, find all references etc. Adding features like auto complete, go to definition, or documentation on hover for a programming language takes significant effort. Traditionally this work had to be repeated for each development tool, as each tool provides different APIs for implementing the same feature (see the list of [[Editors]] and [[IDEs]]). Additionally as the existing tools only use `libdparse` (used in [https://github.com/d-language-server/dls DLS] and [https://github.com/dlang-community/DCD DCD]), they lack the ability to perform semantic analysis on the AST and can't evaluate `mixin`'s nor D's very powerful Compile-Time Function Evaluation (CTFE).<br />
A Language Server is meant to provide the language-specific smarts and communicate with development tools over a protocol that enables inter-process communication.<br />
The idea behind the Language Server Protocol (LSP) is to standardize the protocol for how such servers and development tools communicate. This way, single D Language Server can be re-used in multiple development tools, which in turn can support multiple languages with minimal effort.<br />
<br />
Recent development in the DMD compiler [https://dlang.org/blog/2017/08/01/a-dub-case-study-compiling-dmd-as-a-library made it available as a DUB library]. This mean that the compiler itself can be re-used and third-party tools don't have to re-implement e.g. D's complex CTFE. This project is about using the DMD compiler as a library to implement a Language Server for D.<br />
<br />
Proposed Project Mentors: Jacob Carlborg, Sebastian Wilzbach<br />
<br />
How to start:<br />
* [https://github.com/dlang/dmd/blob/master/test/dub_package/frontend.d Simple example] of using DMD as a library<br />
* [https://github.com/jacob-carlborg/dlp More complex use cases]<br />
<br />
=== Mir Project ===<br />
----<br />
<br />
The Mir project is developing numerical libraries for the upcoming numeric packages of<br />
the Dlang standard library. The are numerous projects an interested student could pursue:<br />
<br />
* University project. Your GSoC project can be combined with your scientific research.<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://julialang.org Julia] integration<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://www.numpy.org NumPy] integration<br />
* General purpose BetterC libraries<br />
** I/O betterC Dlang library<br />
** Async betterC Dlang library<br />
** String and format betterC library<br />
* mir-cpuid <br />
** ARM support<br />
** Advanced OS specific support<br />
* mir-glas<br />
** BLAS Level 2 subprograms<br />
** One BLAS Level 3 subprogram. It is OK to do only one! But it must be faster then OpenBLAS, and not slower then Intel MKL.<br />
** Multithreading support for BLAS Level 2<br />
** Multithreading support for BLAS Level 3<br />
<br />
You can get more details on projects related to Mir [https://github.com/libmir/mir/wiki/GSoC-2019 here].<br />
<br />
Its Good To Know:<br />
<br />
To work on the Mir you should be proficient with one of:<br />
<br />
* C<br />
* C++<br />
* LLVM<br />
* Fortran<br />
* Experience with D is not essential.<br />
<br />
To work on the Mir project requires a responsible and self-motivated student.<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
=== LDC (LLVM-based D compiler) ===<br />
----<br />
<br />
The LDC project provides a portable D programming language compiler with modern optimization and code generation capabilities.<br />
The ever-improving feature set of LLVM opens up many opportunities with D.<br />
A few ideas for a potential GSoC project are:<br />
<br />
* exploiting immutability of variables (notably of structs such as string slices)<br />
* devirtualization<br />
* improve debuginfo<br />
* ASan with GC and multithreading<br />
* function multiversioning<br />
<br />
You might also want to browse the [https://github.com/ldc-developers/ldc/issues LDC's issue tracker] for more ideas.<br />
<br />
Proposed Project Mentors: TBA (LDC dev team)<br />
<br />
=== iOS support in LDC ===<br />
----<br />
<br />
Mobile is becoming, or rather is already, the biggest software platform. While LDC already supports the Android platform there's no official support for iOS. The project would consist of adding support for the iOS platform to the LDC compiler, the D runtime library and the D standard library. The goal would be to get support for this platform upstreamed to the LDC main project.<br />
<br />
A lot of existing work has been done but has never been completed or upstreamed: https://github.com/smolt/ldc-iphone-dev.<br />
<br />
Proposed Project Mentors: TBA (LDC dev team)<br />
<br />
=== Baremetal D runtime ===<br />
----<br />
<br />
Many features in the standard library are implemented by using the C runtime. Reusing the rock-solid work of generations of programmers makes a lot of sense as just outputting via `printf` can be very [https://github.molgen.mpg.de/git-mirror/glibc/blob/20003c49884422da7ffbc459cdeee768a6fee07b/stdio-common/vfprintf.c complex]. However, for embedded environments a programmer often only has a tiny amount of storage available or might not even have a C runtime available for his target.<br />
The idea of this project is to implement the most basic parts of the runtime natively in D, s.t. bare metals programmers can just compile for their target. Implementing features natively in D also means that other targets like [https://wiki.dlang.org/Generating_WebAssembly_with_LDC Web Assembly] will automatically be able to use them too. Another advantage of implementing these basic building blocks in D is that one can take advantage of D's Compile-Time Function Evaluation (CTFE) and optimize the methods even further at compile-time.<br />
<br />
Project focus:<br />
- Implement <code>memcpy</code>, <code>memcmp</code> and similar in D (with similar performance to C)<br />
- Implement `malloc` and similar in D (with similar performance to C)<br />
<br />
Starting points:<br />
* [https://theartofmachinery.com/2017/02/28/bare_metal_d.html D for Bare Metal Programming (tutorial series]<br />
* [https://github.com/JinShil/stm32f42_discovery_demo Simple demonstration of using D to bare-metal program an STM32F29I Discovery board]<br />
* [https://github.com/JinShil/memcpyD memcpyD]<br />
* [https://wiki.dlang.org/Programming_in_D_tutorial_on_Embedded_Linux_ARM_devices Programming in D tutorial on Embedded Linux ARM devices]<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== GDC (GCC-based D compiler) ===<br />
----<br />
<br />
The GDC compiles uses GCC as a backend to utilize this powerful backend.<br />
Recently, GDC [https://www.phoronix.com/scan.php?page=news_item&px=GCC-9-Merges-D-Language has been accepted as GCC frontend] and will be part of the GCC9 release.<br />
However, GDC still has lots of tasks that the potential students could work on.<br />
<br />
One idea would be to improve GDC's support for betterC by adding a compiler interface to allow using a modular runtime. Right now when GDC uses some feature (TypeInfo, asserts, unittests), it just emits a call to an `extern(C)` function. A much better approach would be to have a defined D API (e.g. `rt.assert.onAssertFailure(...)`). The compiler can then check if it finds `rt.assert.onFailure`. If not, the compiler can the simply disable that feature and provide nice error messages. This could be done for TypeInfo, Exceptions, Asserts, Switch errors, unit test support, etc. In the end, the vision would be to be able to ship a compiler completely without runtime. This compiler should be able to produce bare bones code without any further configuration. Then add a dependency to `drt:core` in the dub configuration to get class support, `dr:exception` for exceptions, etc. The compiler could then automatically detect availability of these features. (Of course manually adding -I paths would work in exactly the same way).<br />
<br />
For more ideas, interested students are encouraged to browse [https://bugzilla.gdcproject.org/describecomponents.cgi GDC's issue list] or getting [https://wiki.dlang.org/GDC in touch with the GDC development team].<br />
<br />
Proposed Project Mentors: TBA (GDC devteam)<br />
<br />
=== C++ interops ===<br />
----<br />
<br />
There are many experiments in transparently interfacing D with C++, notably:<br />
<br />
* [https://github.com/atilaneves/dpp dpp] by Atila Neves, that parses and translates headers on the fly<br />
* [https://wiki.dlang.org/Calypso Calypso] by Elie Morisse that bridges the two languages at the AST level.<br />
* [https://github.com/jacob-carlborg/dstep DStep] by Jacob Carlborg, automatically generates bindings for C and Objective-C code. The task would be to add support for C++.<br />
<br />
There is also a lot of work in bringing STL types to the DRuntime (see https://github.com/dlang/druntime/pull/2310).<br />
<br />
D would greatly benefit by seamlessly integrating the C++ ecosystem. There are many ways to accomplish this goal and it should be discussed with the community.<br />
Andrei already commented on the importance of a tool like Calypso in this thread:<br />
https://forum.dlang.org/post/m9s4cd$2s1v$1@digitalmars.com<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Persistent Data Structures ===<br />
----<br />
<br />
There is an ongoing effort to reduce the reliance of Phobos on the GC but the GC is not going anywhere given that it has many advantages over manual memory management.<br />
The community would greatly benefit from a wide range of functional programming techniques that have their roots in the usage of immutable and persistent data structures that heavily rely on the GC.<br />
Persistent Data Structures are heavily used in [http://docs.scala-lang.org/overviews/collections/overview.html Scala] and [http://clojure.org/reference/data_structures Clojure] and they allow the programmer to reason about interactivity, sharing and parallelism.<br />
<br />
The focus of this project would be to create a varying range of persistent data structures (sets, vectors, maps, strings, trees, lists, etc...) that respects the range interface and the semantics of Phobos.<br />
<br />
Related Work:<br />
<br />
* https://www.cs.cmu.edu/~rwh/theses/okasaki.pdf <br />
* https://www.worldcat.org/title/rrb-trees-efficient-immutable-vectors/oclc/820379112<br />
* https://www.youtube.com/watch?v=7BFF50BHPPo<br />
* https://www.infoq.com/presentations/Value-Values<br />
* https://github.com/arximboldi/immer<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== std.benchmark ===<br />
----<br />
<br />
Ideally every function in Phobos should have its own benchmark suite which is run for every PR to check for performance improvements or regressions.<br />
* Additionally support for the new big O annotation [https://github.com/dlang/phobos/pull/4965 here] would be nice. <br />
* Existing work: [https://github.com/dlang/phobos/pull/794 here], and [https://github.com/dlang/phobos/pull/3695 here], and [https://github.com/atilaneves/unit-threaded/tree/master/source/unit_threaded/randomized here (QuickText-like testing)]. <br />
<br />
Proposed Project Mentors: Sebastian Wilzbach<br />
<br />
=== Jupyter notebook D kernel ===<br />
----<br />
<br />
The Jupyter Notebook is an open-source web application that allows you to create and share documents that contain live code, equations, visualizations and narrative text. Uses include: data cleaning and transformation, numerical simulation, statistical modeling, data visualization, machine learning, and much more.<br />
Jupyter notebooks are extremely popular among data scientist as they allow interactive progress and exploring a solution step by step.<br />
With a bit of work, a statically compiled language can be used in an interactive notebook e.g. [Cling https://blog.jupyter.org/interactive-workflows-for-c-with-jupyter-fe9b54227d92] and Go with<br />
[https://github.com/gopherdata/gophernotes gophernotes].<br />
Apart from being useful to data scientist, a Jupyter D kernel would allow an intuitive exploration of the language for newcomers and people starting with new libraries.<br />
<br />
Existing works:<br />
- [https://github.com/dlang-community/drepl drepl] - simple REPL for D<br />
- [https://github.com/DlangScience/PydMagic PydMagic] - allows to write PyD extension in a notebook.<br />
<br />
Proposed Project Mentor: Sebastian Wilzbach<br />
<br />
=== Tabular data container (data frames) ===<br />
----<br />
<br />
Pandas, R and Julia have made [https://github.com/mobileink/data.frame/wiki/What-is-a-Data-Frame%3F data frames] very popular.<br />
As D is getting more interest from data scientist (e.g. [https://github.com/eBay/tsv-utils eBay] or [http://tech.adroll.com/blog/data/2014/11/17/d-is-for-data-science.html AdRoll]) it would be very beneficial to use one language for the entire data analysis pipeline - especially considering that D (in contrast to popular languages like Python, R or Julia) - is compiled to native machine code and gets optimized by the sophisticated LLVM backend.<br />
<br />
Minimum requirements:<br />
<br />
* conversion to and from CSV<br />
* multi-indexing<br />
* column binary operations, e.g. `column1 * column2`<br />
* group-by on an arbitrary number of columns<br />
* column/group aggregations<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
=== Graphics library for resource constrained embedded systems ===<br />
----<br />
<br />
Create a 2D rasterizer, rich drawing primitives, and 2D graphics library suitable for resource constrained embedded systems (e.g. ARM Cortex-M) to be used in industrial controls, home appliances, medical devices, consumer electronics, and IoT just to name a few. The end goal would be something similar to [https://www.segger.com/products/user-interface/emwin Segger's emWin]. The library would be used to drive LDCs similar to https://www.adafruit.com/product/3396<br />
Requirements:<br />
<br />
* Hardware agnostic; should simply render to a frame buffer<br />
* No dependencies (No Phobos, no C standard library, and no official D runtime).<br />
* Consider using -betterC, but a custom minimal D runtime is also a viable option<br />
<br />
Related work:<br />
<br />
* https://github.com/TurkeyMan/color<br />
* https://bitbucket.org/timosi/minlibd<br />
* https://github.com/JinShil/stm32f42_discovery_demo<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Functional Reactive Programming ===<br />
----<br />
<br />
Functional reactive programming (FRP) is a programming paradigm for reactive programming (asynchronous dataflow programming) using the building blocks of functional programming (e.g. map, reduce, filter).<br />
The best-known FRP API is the [http://reactivex.io ReactiveX API] whose implementation in D this project would focus.<br />
Note that this project is closely related to the std.eventloop project.<br />
<br />
Proposed Project Mentors: Petar Kirov<br />
<br />
=== BetterC runtime ===<br />
----<br />
<br />
[https://dlang.org/blog/2017/08/23/d-as-a-better-c BetterC] is a subset of D which limits the feature set of D, s.t. it's even easier to migrate from C as no Garbage Collection (GC) is used anymore.<br />
While, this feature is popular for some projects, `-betterC` today means still means a severe restriction in the amount of D features available (see the [https://dlang.org/spec/betterc.html BetterC specification]).<br />
This project is about making more parts of the D runtime betterC-compatible. For example, classes could be allocated with reference-counting instead of using the GC. <br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Java Native Interface (JNI) library ===<br />
----<br />
<br />
D's features allow to write cut down the boilerplate of wrapper drastically.<br />
See the recently published [https://dlang.org/blog/2017/05/31/project-highlight-excel-d excel-d] for a comparison between the C++ implementation for registering a function in Excel and the D way.<br />
Similarly a solid JNI library would open up new many new use cases and allow the Java community to profit even easier from D's features.<br />
<br />
Previous work: [https://github.com/Monnoroch/DJni DJni], [https://github.com/jamesmahler/djvm djvm]<br />
<br />
Proposed Project Mentor: TBA<br />
<br />
=== ORM mapping ===<br />
----<br />
<br />
SQLAlchemy is an object-relational mapper which provides "a full suite of well known enterprise-level persistence patterns, designed for efficient and high-performing database access, adapted into a simple and Pythonic domain language".<br />
While there has been some attempts in implementing an ORM in D - none of these got close to the simplicity and usability of SQLAlchemy (see [[Database Libraries]]).<br />
However, with D's CTFE queries could - like std.format's strings - already be checked at compile-time and optimizations could be be applied to the parser and serializer.<br />
<br />
This project would be based on the [http://dconf.org/2016/talks/smith.html proposed std.database abstraction] and focus on creating a general-purpose ORM on top of it.<br />
<br />
See also: Martin Nowak's DConf16 talk about [http://dconf.org/2016/talks/nowak.html Object-Relational Mapper] <br />
<br />
Existing work:<br />
* [https://github.com/huntlabs/hunt-entity hunt-entity]<br />
<br />
Proposed Project Mentor: TBA<br />
<br />
=== std.serialization ===<br />
----<br />
<br />
D has numerous serialization frameworks. From `std.json` to `std.csv` over [https://github.com/dcarp/protobuf-d protobuf] to [https://github.com/vibe-d/vibe.d Vibe.d's] own serialization framework.<br />
The goal of this project is to implement a flexible (de)serialization framework that can be used as a standardized building block for various serialization related things.<br />
One important goal would be to define how a user-specified type has to work in order to make it serializable, as well as to allow the end-user (e.g. a user of std.json) to change the serialization of third-party types that cannot themselves be modified (i.e. let them define their own policies).<br />
<br />
Starting points:<br />
<br />
* [http://vibed.org/api/vibe.data.serialization Vibe.d's serialization framework]<br />
* [https://github.com/jacob-carlborg/orange Orange framework]<br />
<br />
Proposed Project Mentor: Jacob Carlborg<br />
<br />
=== Propose your own project ===<br />
----<br />
<br />
Do you have your own vision for improving D's success? That's great!<br />
Are you convinced that your project helps to advance open source technology related to the D programming language?<br />
Then simply get in touch with D's GSoC org admin (social (at) dlang (dot) org) and potential mentors for your project.<br />
<br />
If you are searching for inspiration, you might want to have a look at the [[DIPs| list of D Improvement Proposals (DIPs)]], the [[Vision/2018H1|high-level vision for this semester]] or the [[Wish_list|wish list]].<br />
<br />
== Ideas From Previous Years ==<br />
<br />
These GSoC idea pages from the past years which might provide more inspiration for proposing your own idea:<br />
<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2018 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2017 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2016_Ideas GSoC 2016 Ideas] (accepted, 4 slots)<br />
* [http://wiki.dlang.org/GSOC_2015_Ideas GSoC 2015 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2014_Ideas GSoC 2014 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2013_Ideas GSoC 2013 Ideas] (not accepted)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2012_Ideas GSoC 2012 Ideas] (accepted, 3 slots)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2011_Ideas GSoC 2011 Ideas]<br />
<br />
You may also want to have a look at [https://wiki.dlang.org/SAOC_2018_ideas the Symmetry Autumn of Code ideas page].<br />
<br />
== Tips for students ==<br />
<br />
Please see the "gsoc" articles at our [https://dlang.org/blog/category/gsoc/ official blog] which contain experience reports from students of previous years.<br />
<br />
Daniel Pocock has [http://danielpocock.com/getting-selected-for-google-summer-of-code-2015 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.<br />
<br />
== Tips for Mentors ==<br />
<br />
If you are interested in mentoring, please check out the [http://en.flossmanuals.net/GSoCMentoring/ organization administrator and mentor] manual for more information.<br />
<br />
[[Category:GSOC]]</div>Greenifyhttps://wiki.dlang.org/?title=GSOC_2019_Ideas&diff=9573GSOC 2019 Ideas2019-03-03T04:49:06Z<p>Greenify: /* Java Native Interface (JNI) library */ whitespace</p>
<hr />
<div>This is the D Language Foundation's Google Summer of Code 2019 page.<br />
<br />
If you are interested in working on a D project as part of GSoC 2019, as either a student or mentor, please contact the GSoC admins at social@dlang.org. Include "GSoC 2019" in the email subject line.<br />
<br />
<br />
== Timeline ==<br />
The timeline for GSoC 2019 [https://developers.google.com/open-source/gsoc/timeline can be found here].<br />
<br />
== Ideas ==<br />
<br />
The D ecosystem is always in need of improvement through the revision of existing projects and the creation of new ones. The core projects like the([http://dlang.org/phobos/index.html standard library]) and the compilers ([[Compilers]]) are always in need of attention. Other important areas include GUI support, integration with other languages, improving and enhancing the tooling, IDE and editor support, and more.<br />
<br />
Please add your project ideas to the list below, being as descriptive as you can in the summaries. Students interested in participating can use the ideas listed here as jumping off points, so the more information you provide, the easier it will be for them to get started. If your idea is particularly complex or nuanced, consider leaving contact information so that interested parties may follow up.<br />
<br />
=== DUB: D's package manager ===<br />
----<br />
<br />
[https://github.com/dlang/dub DUB] - D's package manager - is one of the central infrastructure tools in the D world as a convenient build and package management tool for the D community.<br />
With D gaining more and more popularity, it's also a key tool to guarantee D's further adoption.<br />
Thus there are many great ideas to improve DUB:<br />
<br />
* [https://github.com/dlang/dub/wiki/DEP6 git support]<br />
* [https://github.com/dlang/dub/wiki/DEP2 separate compilation and caching]<br />
* [https://github.com/dlang/dub/wiki/DEP3 extensibility through DUB]<br />
* [https://github.com/dlang/dub/wiki/DEP4 control flow directives]<br />
* [https://github.com/dlang/dub/wiki/DEP5 build system support for C/C++]<br />
* support dub install for distributions<br />
* support building a {snap, Debian, Arch, ...} package out of DUB package<br />
<br />
Any of these listed DUB Enhancement Proposals (DEPs) could form the basis of a GSoC Project.<br />
<br />
'''Update:''' A very detailed list of ideas for improving Dub can be found in this [https://forum.dlang.org/post/eftttpylxanvxjhoigqu@forum.dlang.org Forum thread].<br />
<br />
Proposed Project Mentors: Sönke Ludwig, Sebastian Wilzbach<br />
<br />
=== Header generation for C/C++ ===<br />
----<br />
<br />
With the ever-improving integration between DMD and C/C++, quite a bit of tooling has been developed to generate D header files from C or C++ projects (e.g. [https://github.com/jacob-carlborg/dstep DStep] or [https://github.com/atilaneves/dpp DPP]).<br />
However, for many projects the majority of the source code is now written in D and the reverse step is needed: an automatic way to generate C and C++ headers from a D project.<br />
This would be very valuable for D as it could motivate inter-language projects that typically go C++-fist-with-a-D-binding to work the other way.<br />
<br />
Starting points:<br />
* [https://forum.dlang.org/post/mailman.7146.1551050711.29801.digitalmars-d@puremagic.com NG-Thread: "Make DMD emit C++ .h files same as .di files"]<br />
* [https://github.com/dlang/dmd/pull/8591 Existing specialized work for the DMD codebase]<br />
* [https://gitlab.com/mihails.strasuns/dtoh Existing WIP work for generating C headers]<br />
* [https://github.com/thewilsonator/dtoh Existing WIP work for generating C++ headers, using DMD as a library]<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Language Server Protocol for D ===<br />
----<br />
<br />
The [https://microsoft.github.io/language-server-protocol Language Server Protocol] (LSP) defines the protocol used between an editor or IDE and a language server that provides language features like auto complete, go to definition, find all references etc. Adding features like auto complete, go to definition, or documentation on hover for a programming language takes significant effort. Traditionally this work had to be repeated for each development tool, as each tool provides different APIs for implementing the same feature (see the list of [[Editors]] and [[IDEs]]). Additionally as the existing tools only use `libdparse` (used in [https://github.com/d-language-server/dls DLS] and [https://github.com/dlang-community/DCD DCD]), they lack the ability to perform semantic analysis on the AST and can't evaluate `mixin`'s nor D's very powerful Compile-Time Function Evaluation (CTFE).<br />
A Language Server is meant to provide the language-specific smarts and communicate with development tools over a protocol that enables inter-process communication.<br />
The idea behind the Language Server Protocol (LSP) is to standardize the protocol for how such servers and development tools communicate. This way, single D Language Server can be re-used in multiple development tools, which in turn can support multiple languages with minimal effort.<br />
<br />
Recent development in the DMD compiler [https://dlang.org/blog/2017/08/01/a-dub-case-study-compiling-dmd-as-a-library made it available as a DUB library]. This mean that the compiler itself can be re-used and third-party tools don't have to re-implement e.g. D's complex CTFE. This project is about using the DMD compiler as a library to implement a Language Server for D.<br />
<br />
Proposed Project Mentors: Jacob Carlborg, Sebastian Wilzbach<br />
<br />
How to start:<br />
* [https://github.com/dlang/dmd/blob/master/test/dub_package/frontend.d Simple example] of using DMD as a library<br />
* [https://github.com/jacob-carlborg/dlp More complex use cases]<br />
<br />
=== Mir Project ===<br />
----<br />
<br />
The Mir project is developing numerical libraries for the upcoming numeric packages of<br />
the Dlang standard library. The are numerous projects an interested student could pursue:<br />
<br />
* University project. Your GSoC project can be combined with your scientific research.<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://julialang.org Julia] integration<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://www.numpy.org NumPy] integration<br />
* General purpose BetterC libraries<br />
** I/O betterC Dlang library<br />
** Async betterC Dlang library<br />
** String and format betterC library<br />
* mir-cpuid <br />
** ARM support<br />
** Advanced OS specific support<br />
* mir-glas<br />
** BLAS Level 2 subprograms<br />
** One BLAS Level 3 subprogram. It is OK to do only one! But it must be faster then OpenBLAS, and not slower then Intel MKL.<br />
** Multithreading support for BLAS Level 2<br />
** Multithreading support for BLAS Level 3<br />
<br />
You can get more details on projects related to Mir [https://github.com/libmir/mir/wiki/GSoC-2019 here].<br />
<br />
Its Good To Know:<br />
<br />
To work on the Mir you should be proficient with one of:<br />
<br />
* C<br />
* C++<br />
* LLVM<br />
* Fortran<br />
* Experience with D is not essential.<br />
<br />
To work on the Mir project requires a responsible and self-motivated student.<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
<br />
=== LDC (LLVM-based D compiler) ===<br />
----<br />
<br />
The LDC project provides a portable D programming language compiler with modern optimization and code generation capabilities.<br />
The ever-improving feature set of LLVM opens up many opportunities with D.<br />
A few ideas for a potential GSoC project are:<br />
<br />
* exploiting immutability of variables (notably of structs such as string slices)<br />
* devirtualization<br />
* improve debuginfo<br />
* ASan with GC and multithreading<br />
* function multiversioning<br />
<br />
You might also want to browse the [https://github.com/ldc-developers/ldc/issues LDC's issue tracker] for more ideas.<br />
<br />
Proposed Project Mentors: TBA (LDC dev team)<br />
<br />
=== iOS support in LDC ===<br />
----<br />
<br />
Mobile is becoming, or rather is already, the biggest software platform. While LDC already supports the Android platform there's no official support for iOS. The project would consist of adding support for the iOS platform to the LDC compiler, the D runtime library and the D standard library. The goal would be to get support for this platform upstreamed to the LDC main project.<br />
<br />
A lot of existing work has been done but has never been completed or upstreamed: https://github.com/smolt/ldc-iphone-dev.<br />
<br />
Proposed Project Mentors: TBA (LDC dev team)<br />
<br />
=== Baremetal D runtime ===<br />
----<br />
<br />
Many features in the standard library are implemented by using the C runtime. Reusing the rock-solid work of generations of programmers makes a lot of sense as just outputting via `printf` can be very [https://github.molgen.mpg.de/git-mirror/glibc/blob/20003c49884422da7ffbc459cdeee768a6fee07b/stdio-common/vfprintf.c complex]. However, for embedded environments a programmer often only has a tiny amount of storage available or might not even have a C runtime available for his target.<br />
The idea of this project is to implement the most basic parts of the runtime natively in D, s.t. bare metals programmers can just compile for their target. Implementing features natively in D also means that other targets like [https://wiki.dlang.org/Generating_WebAssembly_with_LDC Web Assembly] will automatically be able to use them too. Another advantage of implementing these basic building blocks in D is that one can take advantage of D's Compile-Time Function Evaluation (CTFE) and optimize the methods even further at compile-time.<br />
<br />
Project focus:<br />
- Implement <code>memcpy</code>, <code>memcmp</code> and similar in D (with similar performance to C)<br />
- Implement `malloc` and similar in D (with similar performance to C)<br />
<br />
Starting points:<br />
* [https://theartofmachinery.com/2017/02/28/bare_metal_d.html D for Bare Metal Programming (tutorial series]<br />
* [https://github.com/JinShil/stm32f42_discovery_demo Simple demonstration of using D to bare-metal program an STM32F29I Discovery board]<br />
* [https://github.com/JinShil/memcpyD memcpyD]<br />
* [https://wiki.dlang.org/Programming_in_D_tutorial_on_Embedded_Linux_ARM_devices Programming in D tutorial on Embedded Linux ARM devices]<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== GDC (GCC-based D compiler) ===<br />
----<br />
<br />
The GDC compiles uses GCC as a backend to utilize this powerful backend.<br />
Recently, GDC [https://www.phoronix.com/scan.php?page=news_item&px=GCC-9-Merges-D-Language has been accepted as GCC frontend] and will be part of the GCC9 release.<br />
However, GDC still has lots of tasks that the potential students could work on.<br />
<br />
One idea would be to improve GDC's support for betterC by adding a compiler interface to allow using a modular runtime. Right now when GDC uses some feature (TypeInfo, asserts, unittests), it just emits a call to an `extern(C)` function. A much better approach would be to have a defined D API (e.g. `rt.assert.onAssertFailure(...)`). The compiler can then check if it finds `rt.assert.onFailure`. If not, the compiler can the simply disable that feature and provide nice error messages. This could be done for TypeInfo, Exceptions, Asserts, Switch errors, unit test support, etc. In the end, the vision would be to be able to ship a compiler completely without runtime. This compiler should be able to produce bare bones code without any further configuration. Then add a dependency to `drt:core` in the dub configuration to get class support, `dr:exception` for exceptions, etc. The compiler could then automatically detect availability of these features. (Of course manually adding -I paths would work in exactly the same way).<br />
<br />
For more ideas, interested students are encouraged to browse [https://bugzilla.gdcproject.org/describecomponents.cgi GDC's issue list] or getting [https://wiki.dlang.org/GDC in touch with the GDC development team].<br />
<br />
Proposed Project Mentors: TBA (GDC devteam)<br />
<br />
=== C++ interops ===<br />
----<br />
<br />
There are many experiments in transparently interfacing D with C++, notably:<br />
<br />
* [https://github.com/atilaneves/dpp dpp] by Atila Neves, that parses and translates headers on the fly<br />
* [https://wiki.dlang.org/Calypso Calypso] by Elie Morisse that bridges the two languages at the AST level.<br />
* [https://github.com/jacob-carlborg/dstep DStep] by Jacob Carlborg, automatically generates bindings for C and Objective-C code. The task would be to add support for C++.<br />
<br />
There is also a lot of work in bringing STL types to the DRuntime (see https://github.com/dlang/druntime/pull/2310).<br />
<br />
D would greatly benefit by seamlessly integrating the C++ ecosystem. There are many ways to accomplish this goal and it should be discussed with the community.<br />
Andrei already commented on the importance of a tool like Calypso in this thread:<br />
https://forum.dlang.org/post/m9s4cd$2s1v$1@digitalmars.com<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Persistent Data Structures ===<br />
----<br />
<br />
There is an ongoing effort to reduce the reliance of Phobos on the GC but the GC is not going anywhere given that it has many advantages over manual memory management.<br />
The community would greatly benefit from a wide range of functional programming techniques that have their roots in the usage of immutable and persistent data structures that heavily rely on the GC.<br />
Persistent Data Structures are heavily used in [http://docs.scala-lang.org/overviews/collections/overview.html Scala] and [http://clojure.org/reference/data_structures Clojure] and they allow the programmer to reason about interactivity, sharing and parallelism.<br />
<br />
The focus of this project would be to create a varying range of persistent data structures (sets, vectors, maps, strings, trees, lists, etc...) that respects the range interface and the semantics of Phobos.<br />
<br />
Related Work:<br />
<br />
* https://www.cs.cmu.edu/~rwh/theses/okasaki.pdf <br />
* https://www.worldcat.org/title/rrb-trees-efficient-immutable-vectors/oclc/820379112<br />
* https://www.youtube.com/watch?v=7BFF50BHPPo<br />
* https://www.infoq.com/presentations/Value-Values<br />
* https://github.com/arximboldi/immer<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== std.benchmark ===<br />
----<br />
<br />
Ideally every function in Phobos should have its own benchmark suite which is run for every PR to check for performance improvements or regressions.<br />
* Additionally support for the new big O annotation [https://github.com/dlang/phobos/pull/4965 here] would be nice. <br />
* Existing work: [https://github.com/dlang/phobos/pull/794 here], and [https://github.com/dlang/phobos/pull/3695 here], and [https://github.com/atilaneves/unit-threaded/tree/master/source/unit_threaded/randomized here (QuickText-like testing)]. <br />
<br />
Proposed Project Mentors: Sebastian Wilzbach<br />
<br />
=== Jupyter notebook D kernel ===<br />
----<br />
<br />
The Jupyter Notebook is an open-source web application that allows you to create and share documents that contain live code, equations, visualizations and narrative text. Uses include: data cleaning and transformation, numerical simulation, statistical modeling, data visualization, machine learning, and much more.<br />
Jupyter notebooks are extremely popular among data scientist as they allow interactive progress and exploring a solution step by step.<br />
With a bit of work, a statically compiled language can be used in an interactive notebook e.g. [Cling https://blog.jupyter.org/interactive-workflows-for-c-with-jupyter-fe9b54227d92] and Go with<br />
[https://github.com/gopherdata/gophernotes gophernotes].<br />
Apart from being useful to data scientist, a Jupyter D kernel would allow an intuitive exploration of the language for newcomers and people starting with new libraries.<br />
<br />
Existing works:<br />
- [https://github.com/dlang-community/drepl drepl] - simple REPL for D<br />
- [https://github.com/DlangScience/PydMagic PydMagic] - allows to write PyD extension in a notebook.<br />
<br />
Proposed Project Mentor: Sebastian Wilzbach<br />
<br />
<br />
=== Tabular data container (data frames) ===<br />
----<br />
<br />
Pandas, R and Julia have made [https://github.com/mobileink/data.frame/wiki/What-is-a-Data-Frame%3F data frames] very popular.<br />
As D is getting more interest from data scientist (e.g. [https://github.com/eBay/tsv-utils eBay] or [http://tech.adroll.com/blog/data/2014/11/17/d-is-for-data-science.html AdRoll]) it would be very beneficial to use one language for the entire data analysis pipeline - especially considering that D (in contrast to popular languages like Python, R or Julia) - is compiled to native machine code and gets optimized by the sophisticated LLVM backend.<br />
<br />
Minimum requirements:<br />
<br />
* conversion to and from CSV<br />
* multi-indexing<br />
* column binary operations, e.g. `column1 * column2`<br />
* group-by on an arbitrary number of columns<br />
* column/group aggregations<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
=== Graphics library for resource constrained embedded systems ===<br />
----<br />
<br />
Create a 2D rasterizer, rich drawing primitives, and 2D graphics library suitable for resource constrained embedded systems (e.g. ARM Cortex-M) to be used in industrial controls, home appliances, medical devices, consumer electronics, and IoT just to name a few. The end goal would be something similar to [https://www.segger.com/products/user-interface/emwin Segger's emWin]. The library would be used to drive LDCs similar to https://www.adafruit.com/product/3396<br />
Requirements:<br />
<br />
* Hardware agnostic; should simply render to a frame buffer<br />
* No dependencies (No Phobos, no C standard library, and no official D runtime).<br />
* Consider using -betterC, but a custom minimal D runtime is also a viable option<br />
<br />
Related work:<br />
<br />
* https://github.com/TurkeyMan/color<br />
* https://bitbucket.org/timosi/minlibd<br />
* https://github.com/JinShil/stm32f42_discovery_demo<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
<br />
=== Functional Reactive Programming ===<br />
----<br />
<br />
Functional reactive programming (FRP) is a programming paradigm for reactive programming (asynchronous dataflow programming) using the building blocks of functional programming (e.g. map, reduce, filter).<br />
The best-known FRP API is the [http://reactivex.io ReactiveX API] whose implementation in D this project would focus.<br />
Note that this project is closely related to the std.eventloop project.<br />
<br />
Proposed Project Mentors: Petar Kirov<br />
<br />
=== BetterC runtime ===<br />
----<br />
<br />
[https://dlang.org/blog/2017/08/23/d-as-a-better-c BetterC] is a subset of D which limits the feature set of D, s.t. it's even easier to migrate from C as no Garbage Collection (GC) is used anymore.<br />
While, this feature is popular for some projects, `-betterC` today means still means a severe restriction in the amount of D features available (see the [https://dlang.org/spec/betterc.html BetterC specification]).<br />
This project is about making more parts of the D runtime betterC-compatible. For example, classes could be allocated with reference-counting instead of using the GC. <br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Java Native Interface (JNI) library ===<br />
----<br />
<br />
D's features allow to write cut down the boilerplate of wrapper drastically.<br />
See the recently published [https://dlang.org/blog/2017/05/31/project-highlight-excel-d excel-d] for a comparison between the C++ implementation for registering a function in Excel and the D way.<br />
Similarly a solid JNI library would open up new many new use cases and allow the Java community to profit even easier from D's features.<br />
<br />
Previous work: [https://github.com/Monnoroch/DJni DJni], [https://github.com/jamesmahler/djvm djvm]<br />
<br />
Proposed Project Mentor: TBA<br />
<br />
=== ORM mapping ===<br />
----<br />
<br />
SQLAlchemy is an object-relational mapper which provides "a full suite of well known enterprise-level persistence patterns, designed for efficient and high-performing database access, adapted into a simple and Pythonic domain language".<br />
While there has been some attempts in implementing an ORM in D - none of these got close to the simplicity and usability of SQLAlchemy (see [[Database Libraries]]).<br />
However, with D's CTFE queries could - like std.format's strings - already be checked at compile-time and optimizations could be be applied to the parser and serializer.<br />
<br />
This project would be based on the [http://dconf.org/2016/talks/smith.html proposed std.database abstraction] and focus on creating a general-purpose ORM on top of it.<br />
<br />
See also: Martin Nowak's DConf16 talk about [http://dconf.org/2016/talks/nowak.html Object-Relational Mapper] <br />
<br />
Existing work:<br />
* [https://github.com/huntlabs/hunt-entity hunt-entity]<br />
<br />
Proposed Project Mentor: TBA<br />
<br />
=== std.serialization ===<br />
----<br />
<br />
D has numerous serialization frameworks. From `std.json` to `std.csv` over [https://github.com/dcarp/protobuf-d protobuf] to [https://github.com/vibe-d/vibe.d Vibe.d's] own serialization framework.<br />
The goal of this project is to implement a flexible (de)serialization framework that can be used as a standardized building block for various serialization related things.<br />
One important goal would be to define how a user-specified type has to work in order to make it serializable, as well as to allow the end-user (e.g. a user of std.json) to change the serialization of third-party types that cannot themselves be modified (i.e. let them define their own policies).<br />
<br />
Starting points:<br />
<br />
* [http://vibed.org/api/vibe.data.serialization Vibe.d's serialization framework]<br />
* [https://github.com/jacob-carlborg/orange Orange framework]<br />
<br />
Proposed Project Mentor: Jacob Carlborg<br />
<br />
=== Propose your own project ===<br />
----<br />
<br />
Do you have your own vision for improving D's success? That's great!<br />
Are you convinced that your project helps to advance open source technology related to the D programming language?<br />
Then simply get in touch with D's GSoC org admin (social (at) dlang (dot) org) and potential mentors for your project.<br />
<br />
If you are searching for inspiration, you might want to have a look at the [[DIPs| list of D Improvement Proposals (DIPs)]], the [[Vision/2018H1|high-level vision for this semester]] or the [[Wish_list|wish list]].<br />
<br />
== Ideas From Previous Years ==<br />
<br />
These GSoC idea pages from the past years which might provide more inspiration for proposing your own idea:<br />
<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2018 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2017 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2016_Ideas GSoC 2016 Ideas] (accepted, 4 slots)<br />
* [http://wiki.dlang.org/GSOC_2015_Ideas GSoC 2015 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2014_Ideas GSoC 2014 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2013_Ideas GSoC 2013 Ideas] (not accepted)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2012_Ideas GSoC 2012 Ideas] (accepted, 3 slots)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2011_Ideas GSoC 2011 Ideas]<br />
<br />
You may also want to have a look at [https://wiki.dlang.org/SAOC_2018_ideas the Symmetry Autumn of Code ideas page].<br />
<br />
== Tips for students ==<br />
<br />
Please see the "gsoc" articles at our [https://dlang.org/blog/category/gsoc/ official blog] which contain experience reports from students of previous years.<br />
<br />
Daniel Pocock has [http://danielpocock.com/getting-selected-for-google-summer-of-code-2015 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.<br />
<br />
== Tips for Mentors ==<br />
<br />
If you are interested in mentoring, please check out the [http://en.flossmanuals.net/GSoCMentoring/ organization administrator and mentor] manual for more information.<br />
<br />
[[Category:GSOC]]</div>Greenifyhttps://wiki.dlang.org/?title=GSOC_2019_Ideas&diff=9572GSOC 2019 Ideas2019-03-03T04:48:18Z<p>Greenify: /* Baremetal D runtime */ use <code> tags</p>
<hr />
<div>This is the D Language Foundation's Google Summer of Code 2019 page.<br />
<br />
If you are interested in working on a D project as part of GSoC 2019, as either a student or mentor, please contact the GSoC admins at social@dlang.org. Include "GSoC 2019" in the email subject line.<br />
<br />
<br />
== Timeline ==<br />
The timeline for GSoC 2019 [https://developers.google.com/open-source/gsoc/timeline can be found here].<br />
<br />
== Ideas ==<br />
<br />
The D ecosystem is always in need of improvement through the revision of existing projects and the creation of new ones. The core projects like the([http://dlang.org/phobos/index.html standard library]) and the compilers ([[Compilers]]) are always in need of attention. Other important areas include GUI support, integration with other languages, improving and enhancing the tooling, IDE and editor support, and more.<br />
<br />
Please add your project ideas to the list below, being as descriptive as you can in the summaries. Students interested in participating can use the ideas listed here as jumping off points, so the more information you provide, the easier it will be for them to get started. If your idea is particularly complex or nuanced, consider leaving contact information so that interested parties may follow up.<br />
<br />
=== DUB: D's package manager ===<br />
----<br />
<br />
[https://github.com/dlang/dub DUB] - D's package manager - is one of the central infrastructure tools in the D world as a convenient build and package management tool for the D community.<br />
With D gaining more and more popularity, it's also a key tool to guarantee D's further adoption.<br />
Thus there are many great ideas to improve DUB:<br />
<br />
* [https://github.com/dlang/dub/wiki/DEP6 git support]<br />
* [https://github.com/dlang/dub/wiki/DEP2 separate compilation and caching]<br />
* [https://github.com/dlang/dub/wiki/DEP3 extensibility through DUB]<br />
* [https://github.com/dlang/dub/wiki/DEP4 control flow directives]<br />
* [https://github.com/dlang/dub/wiki/DEP5 build system support for C/C++]<br />
* support dub install for distributions<br />
* support building a {snap, Debian, Arch, ...} package out of DUB package<br />
<br />
Any of these listed DUB Enhancement Proposals (DEPs) could form the basis of a GSoC Project.<br />
<br />
'''Update:''' A very detailed list of ideas for improving Dub can be found in this [https://forum.dlang.org/post/eftttpylxanvxjhoigqu@forum.dlang.org Forum thread].<br />
<br />
Proposed Project Mentors: Sönke Ludwig, Sebastian Wilzbach<br />
<br />
=== Header generation for C/C++ ===<br />
----<br />
<br />
With the ever-improving integration between DMD and C/C++, quite a bit of tooling has been developed to generate D header files from C or C++ projects (e.g. [https://github.com/jacob-carlborg/dstep DStep] or [https://github.com/atilaneves/dpp DPP]).<br />
However, for many projects the majority of the source code is now written in D and the reverse step is needed: an automatic way to generate C and C++ headers from a D project.<br />
This would be very valuable for D as it could motivate inter-language projects that typically go C++-fist-with-a-D-binding to work the other way.<br />
<br />
Starting points:<br />
* [https://forum.dlang.org/post/mailman.7146.1551050711.29801.digitalmars-d@puremagic.com NG-Thread: "Make DMD emit C++ .h files same as .di files"]<br />
* [https://github.com/dlang/dmd/pull/8591 Existing specialized work for the DMD codebase]<br />
* [https://gitlab.com/mihails.strasuns/dtoh Existing WIP work for generating C headers]<br />
* [https://github.com/thewilsonator/dtoh Existing WIP work for generating C++ headers, using DMD as a library]<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Language Server Protocol for D ===<br />
----<br />
<br />
The [https://microsoft.github.io/language-server-protocol Language Server Protocol] (LSP) defines the protocol used between an editor or IDE and a language server that provides language features like auto complete, go to definition, find all references etc. Adding features like auto complete, go to definition, or documentation on hover for a programming language takes significant effort. Traditionally this work had to be repeated for each development tool, as each tool provides different APIs for implementing the same feature (see the list of [[Editors]] and [[IDEs]]). Additionally as the existing tools only use `libdparse` (used in [https://github.com/d-language-server/dls DLS] and [https://github.com/dlang-community/DCD DCD]), they lack the ability to perform semantic analysis on the AST and can't evaluate `mixin`'s nor D's very powerful Compile-Time Function Evaluation (CTFE).<br />
A Language Server is meant to provide the language-specific smarts and communicate with development tools over a protocol that enables inter-process communication.<br />
The idea behind the Language Server Protocol (LSP) is to standardize the protocol for how such servers and development tools communicate. This way, single D Language Server can be re-used in multiple development tools, which in turn can support multiple languages with minimal effort.<br />
<br />
Recent development in the DMD compiler [https://dlang.org/blog/2017/08/01/a-dub-case-study-compiling-dmd-as-a-library made it available as a DUB library]. This mean that the compiler itself can be re-used and third-party tools don't have to re-implement e.g. D's complex CTFE. This project is about using the DMD compiler as a library to implement a Language Server for D.<br />
<br />
Proposed Project Mentors: Jacob Carlborg, Sebastian Wilzbach<br />
<br />
How to start:<br />
* [https://github.com/dlang/dmd/blob/master/test/dub_package/frontend.d Simple example] of using DMD as a library<br />
* [https://github.com/jacob-carlborg/dlp More complex use cases]<br />
<br />
=== Mir Project ===<br />
----<br />
<br />
The Mir project is developing numerical libraries for the upcoming numeric packages of<br />
the Dlang standard library. The are numerous projects an interested student could pursue:<br />
<br />
* University project. Your GSoC project can be combined with your scientific research.<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://julialang.org Julia] integration<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://www.numpy.org NumPy] integration<br />
* General purpose BetterC libraries<br />
** I/O betterC Dlang library<br />
** Async betterC Dlang library<br />
** String and format betterC library<br />
* mir-cpuid <br />
** ARM support<br />
** Advanced OS specific support<br />
* mir-glas<br />
** BLAS Level 2 subprograms<br />
** One BLAS Level 3 subprogram. It is OK to do only one! But it must be faster then OpenBLAS, and not slower then Intel MKL.<br />
** Multithreading support for BLAS Level 2<br />
** Multithreading support for BLAS Level 3<br />
<br />
You can get more details on projects related to Mir [https://github.com/libmir/mir/wiki/GSoC-2019 here].<br />
<br />
Its Good To Know:<br />
<br />
To work on the Mir you should be proficient with one of:<br />
<br />
* C<br />
* C++<br />
* LLVM<br />
* Fortran<br />
* Experience with D is not essential.<br />
<br />
To work on the Mir project requires a responsible and self-motivated student.<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
<br />
=== LDC (LLVM-based D compiler) ===<br />
----<br />
<br />
The LDC project provides a portable D programming language compiler with modern optimization and code generation capabilities.<br />
The ever-improving feature set of LLVM opens up many opportunities with D.<br />
A few ideas for a potential GSoC project are:<br />
<br />
* exploiting immutability of variables (notably of structs such as string slices)<br />
* devirtualization<br />
* improve debuginfo<br />
* ASan with GC and multithreading<br />
* function multiversioning<br />
<br />
You might also want to browse the [https://github.com/ldc-developers/ldc/issues LDC's issue tracker] for more ideas.<br />
<br />
Proposed Project Mentors: TBA (LDC dev team)<br />
<br />
=== iOS support in LDC ===<br />
----<br />
<br />
Mobile is becoming, or rather is already, the biggest software platform. While LDC already supports the Android platform there's no official support for iOS. The project would consist of adding support for the iOS platform to the LDC compiler, the D runtime library and the D standard library. The goal would be to get support for this platform upstreamed to the LDC main project.<br />
<br />
A lot of existing work has been done but has never been completed or upstreamed: https://github.com/smolt/ldc-iphone-dev.<br />
<br />
Proposed Project Mentors: TBA (LDC dev team)<br />
<br />
=== Baremetal D runtime ===<br />
----<br />
<br />
Many features in the standard library are implemented by using the C runtime. Reusing the rock-solid work of generations of programmers makes a lot of sense as just outputting via `printf` can be very [https://github.molgen.mpg.de/git-mirror/glibc/blob/20003c49884422da7ffbc459cdeee768a6fee07b/stdio-common/vfprintf.c complex]. However, for embedded environments a programmer often only has a tiny amount of storage available or might not even have a C runtime available for his target.<br />
The idea of this project is to implement the most basic parts of the runtime natively in D, s.t. bare metals programmers can just compile for their target. Implementing features natively in D also means that other targets like [https://wiki.dlang.org/Generating_WebAssembly_with_LDC Web Assembly] will automatically be able to use them too. Another advantage of implementing these basic building blocks in D is that one can take advantage of D's Compile-Time Function Evaluation (CTFE) and optimize the methods even further at compile-time.<br />
<br />
Project focus:<br />
- Implement <code>memcpy</code>, <code>memcmp</code> and similar in D (with similar performance to C)<br />
- Implement `malloc` and similar in D (with similar performance to C)<br />
<br />
Starting points:<br />
* [https://theartofmachinery.com/2017/02/28/bare_metal_d.html D for Bare Metal Programming (tutorial series]<br />
* [https://github.com/JinShil/stm32f42_discovery_demo Simple demonstration of using D to bare-metal program an STM32F29I Discovery board]<br />
* [https://github.com/JinShil/memcpyD memcpyD]<br />
* [https://wiki.dlang.org/Programming_in_D_tutorial_on_Embedded_Linux_ARM_devices Programming in D tutorial on Embedded Linux ARM devices]<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== GDC (GCC-based D compiler) ===<br />
----<br />
<br />
The GDC compiles uses GCC as a backend to utilize this powerful backend.<br />
Recently, GDC [https://www.phoronix.com/scan.php?page=news_item&px=GCC-9-Merges-D-Language has been accepted as GCC frontend] and will be part of the GCC9 release.<br />
However, GDC still has lots of tasks that the potential students could work on.<br />
<br />
One idea would be to improve GDC's support for betterC by adding a compiler interface to allow using a modular runtime. Right now when GDC uses some feature (TypeInfo, asserts, unittests), it just emits a call to an `extern(C)` function. A much better approach would be to have a defined D API (e.g. `rt.assert.onAssertFailure(...)`). The compiler can then check if it finds `rt.assert.onFailure`. If not, the compiler can the simply disable that feature and provide nice error messages. This could be done for TypeInfo, Exceptions, Asserts, Switch errors, unit test support, etc. In the end, the vision would be to be able to ship a compiler completely without runtime. This compiler should be able to produce bare bones code without any further configuration. Then add a dependency to `drt:core` in the dub configuration to get class support, `dr:exception` for exceptions, etc. The compiler could then automatically detect availability of these features. (Of course manually adding -I paths would work in exactly the same way).<br />
<br />
For more ideas, interested students are encouraged to browse [https://bugzilla.gdcproject.org/describecomponents.cgi GDC's issue list] or getting [https://wiki.dlang.org/GDC in touch with the GDC development team].<br />
<br />
Proposed Project Mentors: TBA (GDC devteam)<br />
<br />
=== C++ interops ===<br />
----<br />
<br />
There are many experiments in transparently interfacing D with C++, notably:<br />
<br />
* [https://github.com/atilaneves/dpp dpp] by Atila Neves, that parses and translates headers on the fly<br />
* [https://wiki.dlang.org/Calypso Calypso] by Elie Morisse that bridges the two languages at the AST level.<br />
* [https://github.com/jacob-carlborg/dstep DStep] by Jacob Carlborg, automatically generates bindings for C and Objective-C code. The task would be to add support for C++.<br />
<br />
There is also a lot of work in bringing STL types to the DRuntime (see https://github.com/dlang/druntime/pull/2310).<br />
<br />
D would greatly benefit by seamlessly integrating the C++ ecosystem. There are many ways to accomplish this goal and it should be discussed with the community.<br />
Andrei already commented on the importance of a tool like Calypso in this thread:<br />
https://forum.dlang.org/post/m9s4cd$2s1v$1@digitalmars.com<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Persistent Data Structures ===<br />
----<br />
<br />
There is an ongoing effort to reduce the reliance of Phobos on the GC but the GC is not going anywhere given that it has many advantages over manual memory management.<br />
The community would greatly benefit from a wide range of functional programming techniques that have their roots in the usage of immutable and persistent data structures that heavily rely on the GC.<br />
Persistent Data Structures are heavily used in [http://docs.scala-lang.org/overviews/collections/overview.html Scala] and [http://clojure.org/reference/data_structures Clojure] and they allow the programmer to reason about interactivity, sharing and parallelism.<br />
<br />
The focus of this project would be to create a varying range of persistent data structures (sets, vectors, maps, strings, trees, lists, etc...) that respects the range interface and the semantics of Phobos.<br />
<br />
Related Work:<br />
<br />
* https://www.cs.cmu.edu/~rwh/theses/okasaki.pdf <br />
* https://www.worldcat.org/title/rrb-trees-efficient-immutable-vectors/oclc/820379112<br />
* https://www.youtube.com/watch?v=7BFF50BHPPo<br />
* https://www.infoq.com/presentations/Value-Values<br />
* https://github.com/arximboldi/immer<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== std.benchmark ===<br />
----<br />
<br />
Ideally every function in Phobos should have its own benchmark suite which is run for every PR to check for performance improvements or regressions.<br />
* Additionally support for the new big O annotation [https://github.com/dlang/phobos/pull/4965 here] would be nice. <br />
* Existing work: [https://github.com/dlang/phobos/pull/794 here], and [https://github.com/dlang/phobos/pull/3695 here], and [https://github.com/atilaneves/unit-threaded/tree/master/source/unit_threaded/randomized here (QuickText-like testing)]. <br />
<br />
Proposed Project Mentors: Sebastian Wilzbach<br />
<br />
=== Jupyter notebook D kernel ===<br />
----<br />
<br />
The Jupyter Notebook is an open-source web application that allows you to create and share documents that contain live code, equations, visualizations and narrative text. Uses include: data cleaning and transformation, numerical simulation, statistical modeling, data visualization, machine learning, and much more.<br />
Jupyter notebooks are extremely popular among data scientist as they allow interactive progress and exploring a solution step by step.<br />
With a bit of work, a statically compiled language can be used in an interactive notebook e.g. [Cling https://blog.jupyter.org/interactive-workflows-for-c-with-jupyter-fe9b54227d92] and Go with<br />
[https://github.com/gopherdata/gophernotes gophernotes].<br />
Apart from being useful to data scientist, a Jupyter D kernel would allow an intuitive exploration of the language for newcomers and people starting with new libraries.<br />
<br />
Existing works:<br />
- [https://github.com/dlang-community/drepl drepl] - simple REPL for D<br />
- [https://github.com/DlangScience/PydMagic PydMagic] - allows to write PyD extension in a notebook.<br />
<br />
Proposed Project Mentor: Sebastian Wilzbach<br />
<br />
<br />
=== Tabular data container (data frames) ===<br />
----<br />
<br />
Pandas, R and Julia have made [https://github.com/mobileink/data.frame/wiki/What-is-a-Data-Frame%3F data frames] very popular.<br />
As D is getting more interest from data scientist (e.g. [https://github.com/eBay/tsv-utils eBay] or [http://tech.adroll.com/blog/data/2014/11/17/d-is-for-data-science.html AdRoll]) it would be very beneficial to use one language for the entire data analysis pipeline - especially considering that D (in contrast to popular languages like Python, R or Julia) - is compiled to native machine code and gets optimized by the sophisticated LLVM backend.<br />
<br />
Minimum requirements:<br />
<br />
* conversion to and from CSV<br />
* multi-indexing<br />
* column binary operations, e.g. `column1 * column2`<br />
* group-by on an arbitrary number of columns<br />
* column/group aggregations<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
=== Graphics library for resource constrained embedded systems ===<br />
----<br />
<br />
Create a 2D rasterizer, rich drawing primitives, and 2D graphics library suitable for resource constrained embedded systems (e.g. ARM Cortex-M) to be used in industrial controls, home appliances, medical devices, consumer electronics, and IoT just to name a few. The end goal would be something similar to [https://www.segger.com/products/user-interface/emwin Segger's emWin]. The library would be used to drive LDCs similar to https://www.adafruit.com/product/3396<br />
Requirements:<br />
<br />
* Hardware agnostic; should simply render to a frame buffer<br />
* No dependencies (No Phobos, no C standard library, and no official D runtime).<br />
* Consider using -betterC, but a custom minimal D runtime is also a viable option<br />
<br />
Related work:<br />
<br />
* https://github.com/TurkeyMan/color<br />
* https://bitbucket.org/timosi/minlibd<br />
* https://github.com/JinShil/stm32f42_discovery_demo<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
<br />
=== Functional Reactive Programming ===<br />
----<br />
<br />
Functional reactive programming (FRP) is a programming paradigm for reactive programming (asynchronous dataflow programming) using the building blocks of functional programming (e.g. map, reduce, filter).<br />
The best-known FRP API is the [http://reactivex.io ReactiveX API] whose implementation in D this project would focus.<br />
Note that this project is closely related to the std.eventloop project.<br />
<br />
Proposed Project Mentors: Petar Kirov<br />
<br />
=== BetterC runtime ===<br />
----<br />
<br />
[https://dlang.org/blog/2017/08/23/d-as-a-better-c BetterC] is a subset of D which limits the feature set of D, s.t. it's even easier to migrate from C as no Garbage Collection (GC) is used anymore.<br />
While, this feature is popular for some projects, `-betterC` today means still means a severe restriction in the amount of D features available (see the [https://dlang.org/spec/betterc.html BetterC specification]).<br />
This project is about making more parts of the D runtime betterC-compatible. For example, classes could be allocated with reference-counting instead of using the GC. <br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Java Native Interface (JNI) library ===<br />
----<br />
<br />
D's features allow to write cut down the boilerplate of wrapper drastically.<br />
See the recently published [https://dlang.org/blog/2017/05/31/project-highlight-excel-d excel-d] for a comparison between the C++ implementation for registering a function in Excel and the D way.<br />
Similarly a solid JNI library would open up new many new use cases and allow the Java community to profit even easier from D's features.<br />
<br />
Previous work: [https://github.com/Monnoroch/DJni DJni], [https://github.com/jamesmahler/djvm djvm]<br />
Proposed Project Mentor: TBA<br />
<br />
=== ORM mapping ===<br />
----<br />
<br />
SQLAlchemy is an object-relational mapper which provides "a full suite of well known enterprise-level persistence patterns, designed for efficient and high-performing database access, adapted into a simple and Pythonic domain language".<br />
While there has been some attempts in implementing an ORM in D - none of these got close to the simplicity and usability of SQLAlchemy (see [[Database Libraries]]).<br />
However, with D's CTFE queries could - like std.format's strings - already be checked at compile-time and optimizations could be be applied to the parser and serializer.<br />
<br />
This project would be based on the [http://dconf.org/2016/talks/smith.html proposed std.database abstraction] and focus on creating a general-purpose ORM on top of it.<br />
<br />
See also: Martin Nowak's DConf16 talk about [http://dconf.org/2016/talks/nowak.html Object-Relational Mapper] <br />
<br />
Existing work:<br />
* [https://github.com/huntlabs/hunt-entity hunt-entity]<br />
<br />
Proposed Project Mentor: TBA<br />
<br />
=== std.serialization ===<br />
----<br />
<br />
D has numerous serialization frameworks. From `std.json` to `std.csv` over [https://github.com/dcarp/protobuf-d protobuf] to [https://github.com/vibe-d/vibe.d Vibe.d's] own serialization framework.<br />
The goal of this project is to implement a flexible (de)serialization framework that can be used as a standardized building block for various serialization related things.<br />
One important goal would be to define how a user-specified type has to work in order to make it serializable, as well as to allow the end-user (e.g. a user of std.json) to change the serialization of third-party types that cannot themselves be modified (i.e. let them define their own policies).<br />
<br />
Starting points:<br />
<br />
* [http://vibed.org/api/vibe.data.serialization Vibe.d's serialization framework]<br />
* [https://github.com/jacob-carlborg/orange Orange framework]<br />
<br />
Proposed Project Mentor: Jacob Carlborg<br />
<br />
=== Propose your own project ===<br />
----<br />
<br />
Do you have your own vision for improving D's success? That's great!<br />
Are you convinced that your project helps to advance open source technology related to the D programming language?<br />
Then simply get in touch with D's GSoC org admin (social (at) dlang (dot) org) and potential mentors for your project.<br />
<br />
If you are searching for inspiration, you might want to have a look at the [[DIPs| list of D Improvement Proposals (DIPs)]], the [[Vision/2018H1|high-level vision for this semester]] or the [[Wish_list|wish list]].<br />
<br />
== Ideas From Previous Years ==<br />
<br />
These GSoC idea pages from the past years which might provide more inspiration for proposing your own idea:<br />
<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2018 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2017 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2016_Ideas GSoC 2016 Ideas] (accepted, 4 slots)<br />
* [http://wiki.dlang.org/GSOC_2015_Ideas GSoC 2015 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2014_Ideas GSoC 2014 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2013_Ideas GSoC 2013 Ideas] (not accepted)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2012_Ideas GSoC 2012 Ideas] (accepted, 3 slots)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2011_Ideas GSoC 2011 Ideas]<br />
<br />
You may also want to have a look at [https://wiki.dlang.org/SAOC_2018_ideas the Symmetry Autumn of Code ideas page].<br />
<br />
== Tips for students ==<br />
<br />
Please see the "gsoc" articles at our [https://dlang.org/blog/category/gsoc/ official blog] which contain experience reports from students of previous years.<br />
<br />
Daniel Pocock has [http://danielpocock.com/getting-selected-for-google-summer-of-code-2015 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.<br />
<br />
== Tips for Mentors ==<br />
<br />
If you are interested in mentoring, please check out the [http://en.flossmanuals.net/GSoCMentoring/ organization administrator and mentor] manual for more information.<br />
<br />
[[Category:GSOC]]</div>Greenifyhttps://wiki.dlang.org/?title=GSOC_2019_Ideas&diff=9571GSOC 2019 Ideas2019-03-03T04:36:52Z<p>Greenify: Whitespace edits</p>
<hr />
<div>This is the D Language Foundation's Google Summer of Code 2019 page.<br />
<br />
If you are interested in working on a D project as part of GSoC 2019, as either a student or mentor, please contact the GSoC admins at social@dlang.org. Include "GSoC 2019" in the email subject line.<br />
<br />
<br />
== Timeline ==<br />
The timeline for GSoC 2019 [https://developers.google.com/open-source/gsoc/timeline can be found here].<br />
<br />
== Ideas ==<br />
<br />
The D ecosystem is always in need of improvement through the revision of existing projects and the creation of new ones. The core projects like the([http://dlang.org/phobos/index.html standard library]) and the compilers ([[Compilers]]) are always in need of attention. Other important areas include GUI support, integration with other languages, improving and enhancing the tooling, IDE and editor support, and more.<br />
<br />
Please add your project ideas to the list below, being as descriptive as you can in the summaries. Students interested in participating can use the ideas listed here as jumping off points, so the more information you provide, the easier it will be for them to get started. If your idea is particularly complex or nuanced, consider leaving contact information so that interested parties may follow up.<br />
<br />
=== DUB: D's package manager ===<br />
----<br />
<br />
[https://github.com/dlang/dub DUB] - D's package manager - is one of the central infrastructure tools in the D world as a convenient build and package management tool for the D community.<br />
With D gaining more and more popularity, it's also a key tool to guarantee D's further adoption.<br />
Thus there are many great ideas to improve DUB:<br />
<br />
* [https://github.com/dlang/dub/wiki/DEP6 git support]<br />
* [https://github.com/dlang/dub/wiki/DEP2 separate compilation and caching]<br />
* [https://github.com/dlang/dub/wiki/DEP3 extensibility through DUB]<br />
* [https://github.com/dlang/dub/wiki/DEP4 control flow directives]<br />
* [https://github.com/dlang/dub/wiki/DEP5 build system support for C/C++]<br />
* support dub install for distributions<br />
* support building a {snap, Debian, Arch, ...} package out of DUB package<br />
<br />
Any of these listed DUB Enhancement Proposals (DEPs) could form the basis of a GSoC Project.<br />
<br />
'''Update:''' A very detailed list of ideas for improving Dub can be found in this [https://forum.dlang.org/post/eftttpylxanvxjhoigqu@forum.dlang.org Forum thread].<br />
<br />
Proposed Project Mentors: Sönke Ludwig, Sebastian Wilzbach<br />
<br />
=== Header generation for C/C++ ===<br />
----<br />
<br />
With the ever-improving integration between DMD and C/C++, quite a bit of tooling has been developed to generate D header files from C or C++ projects (e.g. [https://github.com/jacob-carlborg/dstep DStep] or [https://github.com/atilaneves/dpp DPP]).<br />
However, for many projects the majority of the source code is now written in D and the reverse step is needed: an automatic way to generate C and C++ headers from a D project.<br />
This would be very valuable for D as it could motivate inter-language projects that typically go C++-fist-with-a-D-binding to work the other way.<br />
<br />
Starting points:<br />
* [https://forum.dlang.org/post/mailman.7146.1551050711.29801.digitalmars-d@puremagic.com NG-Thread: "Make DMD emit C++ .h files same as .di files"]<br />
* [https://github.com/dlang/dmd/pull/8591 Existing specialized work for the DMD codebase]<br />
* [https://gitlab.com/mihails.strasuns/dtoh Existing WIP work for generating C headers]<br />
* [https://github.com/thewilsonator/dtoh Existing WIP work for generating C++ headers, using DMD as a library]<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Language Server Protocol for D ===<br />
----<br />
<br />
The [https://microsoft.github.io/language-server-protocol Language Server Protocol] (LSP) defines the protocol used between an editor or IDE and a language server that provides language features like auto complete, go to definition, find all references etc. Adding features like auto complete, go to definition, or documentation on hover for a programming language takes significant effort. Traditionally this work had to be repeated for each development tool, as each tool provides different APIs for implementing the same feature (see the list of [[Editors]] and [[IDEs]]). Additionally as the existing tools only use `libdparse` (used in [https://github.com/d-language-server/dls DLS] and [https://github.com/dlang-community/DCD DCD]), they lack the ability to perform semantic analysis on the AST and can't evaluate `mixin`'s nor D's very powerful Compile-Time Function Evaluation (CTFE).<br />
A Language Server is meant to provide the language-specific smarts and communicate with development tools over a protocol that enables inter-process communication.<br />
The idea behind the Language Server Protocol (LSP) is to standardize the protocol for how such servers and development tools communicate. This way, single D Language Server can be re-used in multiple development tools, which in turn can support multiple languages with minimal effort.<br />
<br />
Recent development in the DMD compiler [https://dlang.org/blog/2017/08/01/a-dub-case-study-compiling-dmd-as-a-library made it available as a DUB library]. This mean that the compiler itself can be re-used and third-party tools don't have to re-implement e.g. D's complex CTFE. This project is about using the DMD compiler as a library to implement a Language Server for D.<br />
<br />
Proposed Project Mentors: Jacob Carlborg, Sebastian Wilzbach<br />
<br />
How to start:<br />
* [https://github.com/dlang/dmd/blob/master/test/dub_package/frontend.d Simple example] of using DMD as a library<br />
* [https://github.com/jacob-carlborg/dlp More complex use cases]<br />
<br />
=== Mir Project ===<br />
----<br />
<br />
The Mir project is developing numerical libraries for the upcoming numeric packages of<br />
the Dlang standard library. The are numerous projects an interested student could pursue:<br />
<br />
* University project. Your GSoC project can be combined with your scientific research.<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://julialang.org Julia] integration<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://www.numpy.org NumPy] integration<br />
* General purpose BetterC libraries<br />
** I/O betterC Dlang library<br />
** Async betterC Dlang library<br />
** String and format betterC library<br />
* mir-cpuid <br />
** ARM support<br />
** Advanced OS specific support<br />
* mir-glas<br />
** BLAS Level 2 subprograms<br />
** One BLAS Level 3 subprogram. It is OK to do only one! But it must be faster then OpenBLAS, and not slower then Intel MKL.<br />
** Multithreading support for BLAS Level 2<br />
** Multithreading support for BLAS Level 3<br />
<br />
You can get more details on projects related to Mir [https://github.com/libmir/mir/wiki/GSoC-2019 here].<br />
<br />
Its Good To Know:<br />
<br />
To work on the Mir you should be proficient with one of:<br />
<br />
* C<br />
* C++<br />
* LLVM<br />
* Fortran<br />
* Experience with D is not essential.<br />
<br />
To work on the Mir project requires a responsible and self-motivated student.<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
<br />
=== LDC (LLVM-based D compiler) ===<br />
----<br />
<br />
The LDC project provides a portable D programming language compiler with modern optimization and code generation capabilities.<br />
The ever-improving feature set of LLVM opens up many opportunities with D.<br />
A few ideas for a potential GSoC project are:<br />
<br />
* exploiting immutability of variables (notably of structs such as string slices)<br />
* devirtualization<br />
* improve debuginfo<br />
* ASan with GC and multithreading<br />
* function multiversioning<br />
<br />
You might also want to browse the [https://github.com/ldc-developers/ldc/issues LDC's issue tracker] for more ideas.<br />
<br />
Proposed Project Mentors: TBA (LDC dev team)<br />
<br />
=== iOS support in LDC ===<br />
----<br />
<br />
Mobile is becoming, or rather is already, the biggest software platform. While LDC already supports the Android platform there's no official support for iOS. The project would consist of adding support for the iOS platform to the LDC compiler, the D runtime library and the D standard library. The goal would be to get support for this platform upstreamed to the LDC main project.<br />
<br />
A lot of existing work has been done but has never been completed or upstreamed: https://github.com/smolt/ldc-iphone-dev.<br />
<br />
Proposed Project Mentors: TBA (LDC dev team)<br />
<br />
=== Baremetal D runtime ===<br />
----<br />
<br />
Many features in the standard library are implemented by using the C runtime. Reusing the rock-solid work of generations of programmers makes a lot of sense as just outputting via `printf` can be very [https://github.molgen.mpg.de/git-mirror/glibc/blob/20003c49884422da7ffbc459cdeee768a6fee07b/stdio-common/vfprintf.c complex]. However, for embedded environments a programmer often only has a tiny amount of storage available or might not even have a C runtime available for his target.<br />
The idea of this project is to implement the most basic parts of the runtime natively in D, s.t. bare metals programmers can just compile for their target. Implementing features natively in D also means that other targets like [https://wiki.dlang.org/Generating_WebAssembly_with_LDC Web Assembly] will automatically be able to use them too. Another advantage of implementing these basic building blocks in D is that one can take advantage of D's Compile-Time Function Evaluation (CTFE) and optimize the methods even further at compile-time.<br />
<br />
Project focus:<br />
- Implement `memcpy`, `memcmp` and similar in D (with similar performance to C)<br />
- Implement `malloc` and similar in D (with similar performance to C)<br />
<br />
Starting points:<br />
* [https://theartofmachinery.com/2017/02/28/bare_metal_d.html D for Bare Metal Programming (tutorial series]<br />
* [https://github.com/JinShil/stm32f42_discovery_demo Simple demonstration of using D to bare-metal program an STM32F29I Discovery board]<br />
* [https://github.com/JinShil/memcpyD memcpyD]<br />
* [https://wiki.dlang.org/Programming_in_D_tutorial_on_Embedded_Linux_ARM_devices Programming in D tutorial on Embedded Linux ARM devices]<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== GDC (GCC-based D compiler) ===<br />
----<br />
<br />
The GDC compiles uses GCC as a backend to utilize this powerful backend.<br />
Recently, GDC [https://www.phoronix.com/scan.php?page=news_item&px=GCC-9-Merges-D-Language has been accepted as GCC frontend] and will be part of the GCC9 release.<br />
However, GDC still has lots of tasks that the potential students could work on.<br />
<br />
One idea would be to improve GDC's support for betterC by adding a compiler interface to allow using a modular runtime. Right now when GDC uses some feature (TypeInfo, asserts, unittests), it just emits a call to an `extern(C)` function. A much better approach would be to have a defined D API (e.g. `rt.assert.onAssertFailure(...)`). The compiler can then check if it finds `rt.assert.onFailure`. If not, the compiler can the simply disable that feature and provide nice error messages. This could be done for TypeInfo, Exceptions, Asserts, Switch errors, unit test support, etc. In the end, the vision would be to be able to ship a compiler completely without runtime. This compiler should be able to produce bare bones code without any further configuration. Then add a dependency to `drt:core` in the dub configuration to get class support, `dr:exception` for exceptions, etc. The compiler could then automatically detect availability of these features. (Of course manually adding -I paths would work in exactly the same way).<br />
<br />
For more ideas, interested students are encouraged to browse [https://bugzilla.gdcproject.org/describecomponents.cgi GDC's issue list] or getting [https://wiki.dlang.org/GDC in touch with the GDC development team].<br />
<br />
Proposed Project Mentors: TBA (GDC devteam)<br />
<br />
=== C++ interops ===<br />
----<br />
<br />
There are many experiments in transparently interfacing D with C++, notably:<br />
<br />
* [https://github.com/atilaneves/dpp dpp] by Atila Neves, that parses and translates headers on the fly<br />
* [https://wiki.dlang.org/Calypso Calypso] by Elie Morisse that bridges the two languages at the AST level.<br />
* [https://github.com/jacob-carlborg/dstep DStep] by Jacob Carlborg, automatically generates bindings for C and Objective-C code. The task would be to add support for C++.<br />
<br />
There is also a lot of work in bringing STL types to the DRuntime (see https://github.com/dlang/druntime/pull/2310).<br />
<br />
D would greatly benefit by seamlessly integrating the C++ ecosystem. There are many ways to accomplish this goal and it should be discussed with the community.<br />
Andrei already commented on the importance of a tool like Calypso in this thread:<br />
https://forum.dlang.org/post/m9s4cd$2s1v$1@digitalmars.com<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Persistent Data Structures ===<br />
----<br />
<br />
There is an ongoing effort to reduce the reliance of Phobos on the GC but the GC is not going anywhere given that it has many advantages over manual memory management.<br />
The community would greatly benefit from a wide range of functional programming techniques that have their roots in the usage of immutable and persistent data structures that heavily rely on the GC.<br />
Persistent Data Structures are heavily used in [http://docs.scala-lang.org/overviews/collections/overview.html Scala] and [http://clojure.org/reference/data_structures Clojure] and they allow the programmer to reason about interactivity, sharing and parallelism.<br />
<br />
The focus of this project would be to create a varying range of persistent data structures (sets, vectors, maps, strings, trees, lists, etc...) that respects the range interface and the semantics of Phobos.<br />
<br />
Related Work:<br />
<br />
* https://www.cs.cmu.edu/~rwh/theses/okasaki.pdf <br />
* https://www.worldcat.org/title/rrb-trees-efficient-immutable-vectors/oclc/820379112<br />
* https://www.youtube.com/watch?v=7BFF50BHPPo<br />
* https://www.infoq.com/presentations/Value-Values<br />
* https://github.com/arximboldi/immer<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== std.benchmark ===<br />
----<br />
<br />
Ideally every function in Phobos should have its own benchmark suite which is run for every PR to check for performance improvements or regressions.<br />
* Additionally support for the new big O annotation [https://github.com/dlang/phobos/pull/4965 here] would be nice. <br />
* Existing work: [https://github.com/dlang/phobos/pull/794 here], and [https://github.com/dlang/phobos/pull/3695 here], and [https://github.com/atilaneves/unit-threaded/tree/master/source/unit_threaded/randomized here (QuickText-like testing)]. <br />
<br />
Proposed Project Mentors: Sebastian Wilzbach<br />
<br />
=== Jupyter notebook D kernel ===<br />
----<br />
<br />
The Jupyter Notebook is an open-source web application that allows you to create and share documents that contain live code, equations, visualizations and narrative text. Uses include: data cleaning and transformation, numerical simulation, statistical modeling, data visualization, machine learning, and much more.<br />
Jupyter notebooks are extremely popular among data scientist as they allow interactive progress and exploring a solution step by step.<br />
With a bit of work, a statically compiled language can be used in an interactive notebook e.g. [Cling https://blog.jupyter.org/interactive-workflows-for-c-with-jupyter-fe9b54227d92] and Go with<br />
[https://github.com/gopherdata/gophernotes gophernotes].<br />
Apart from being useful to data scientist, a Jupyter D kernel would allow an intuitive exploration of the language for newcomers and people starting with new libraries.<br />
<br />
Existing works:<br />
- [https://github.com/dlang-community/drepl drepl] - simple REPL for D<br />
- [https://github.com/DlangScience/PydMagic PydMagic] - allows to write PyD extension in a notebook.<br />
<br />
Proposed Project Mentor: Sebastian Wilzbach<br />
<br />
<br />
=== Tabular data container (data frames) ===<br />
----<br />
<br />
Pandas, R and Julia have made [https://github.com/mobileink/data.frame/wiki/What-is-a-Data-Frame%3F data frames] very popular.<br />
As D is getting more interest from data scientist (e.g. [https://github.com/eBay/tsv-utils eBay] or [http://tech.adroll.com/blog/data/2014/11/17/d-is-for-data-science.html AdRoll]) it would be very beneficial to use one language for the entire data analysis pipeline - especially considering that D (in contrast to popular languages like Python, R or Julia) - is compiled to native machine code and gets optimized by the sophisticated LLVM backend.<br />
<br />
Minimum requirements:<br />
<br />
* conversion to and from CSV<br />
* multi-indexing<br />
* column binary operations, e.g. `column1 * column2`<br />
* group-by on an arbitrary number of columns<br />
* column/group aggregations<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
=== Graphics library for resource constrained embedded systems ===<br />
----<br />
<br />
Create a 2D rasterizer, rich drawing primitives, and 2D graphics library suitable for resource constrained embedded systems (e.g. ARM Cortex-M) to be used in industrial controls, home appliances, medical devices, consumer electronics, and IoT just to name a few. The end goal would be something similar to [https://www.segger.com/products/user-interface/emwin Segger's emWin]. The library would be used to drive LDCs similar to https://www.adafruit.com/product/3396<br />
Requirements:<br />
<br />
* Hardware agnostic; should simply render to a frame buffer<br />
* No dependencies (No Phobos, no C standard library, and no official D runtime).<br />
* Consider using -betterC, but a custom minimal D runtime is also a viable option<br />
<br />
Related work:<br />
<br />
* https://github.com/TurkeyMan/color<br />
* https://bitbucket.org/timosi/minlibd<br />
* https://github.com/JinShil/stm32f42_discovery_demo<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
<br />
=== Functional Reactive Programming ===<br />
----<br />
<br />
Functional reactive programming (FRP) is a programming paradigm for reactive programming (asynchronous dataflow programming) using the building blocks of functional programming (e.g. map, reduce, filter).<br />
The best-known FRP API is the [http://reactivex.io ReactiveX API] whose implementation in D this project would focus.<br />
Note that this project is closely related to the std.eventloop project.<br />
<br />
Proposed Project Mentors: Petar Kirov<br />
<br />
=== BetterC runtime ===<br />
----<br />
<br />
[https://dlang.org/blog/2017/08/23/d-as-a-better-c BetterC] is a subset of D which limits the feature set of D, s.t. it's even easier to migrate from C as no Garbage Collection (GC) is used anymore.<br />
While, this feature is popular for some projects, `-betterC` today means still means a severe restriction in the amount of D features available (see the [https://dlang.org/spec/betterc.html BetterC specification]).<br />
This project is about making more parts of the D runtime betterC-compatible. For example, classes could be allocated with reference-counting instead of using the GC. <br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Java Native Interface (JNI) library ===<br />
----<br />
<br />
D's features allow to write cut down the boilerplate of wrapper drastically.<br />
See the recently published [https://dlang.org/blog/2017/05/31/project-highlight-excel-d excel-d] for a comparison between the C++ implementation for registering a function in Excel and the D way.<br />
Similarly a solid JNI library would open up new many new use cases and allow the Java community to profit even easier from D's features.<br />
<br />
Previous work: [https://github.com/Monnoroch/DJni DJni], [https://github.com/jamesmahler/djvm djvm]<br />
Proposed Project Mentor: TBA<br />
<br />
=== ORM mapping ===<br />
----<br />
<br />
SQLAlchemy is an object-relational mapper which provides "a full suite of well known enterprise-level persistence patterns, designed for efficient and high-performing database access, adapted into a simple and Pythonic domain language".<br />
While there has been some attempts in implementing an ORM in D - none of these got close to the simplicity and usability of SQLAlchemy (see [[Database Libraries]]).<br />
However, with D's CTFE queries could - like std.format's strings - already be checked at compile-time and optimizations could be be applied to the parser and serializer.<br />
<br />
This project would be based on the [http://dconf.org/2016/talks/smith.html proposed std.database abstraction] and focus on creating a general-purpose ORM on top of it.<br />
<br />
See also: Martin Nowak's DConf16 talk about [http://dconf.org/2016/talks/nowak.html Object-Relational Mapper] <br />
<br />
Existing work:<br />
* [https://github.com/huntlabs/hunt-entity hunt-entity]<br />
<br />
Proposed Project Mentor: TBA<br />
<br />
=== std.serialization ===<br />
----<br />
<br />
D has numerous serialization frameworks. From `std.json` to `std.csv` over [https://github.com/dcarp/protobuf-d protobuf] to [https://github.com/vibe-d/vibe.d Vibe.d's] own serialization framework.<br />
The goal of this project is to implement a flexible (de)serialization framework that can be used as a standardized building block for various serialization related things.<br />
One important goal would be to define how a user-specified type has to work in order to make it serializable, as well as to allow the end-user (e.g. a user of std.json) to change the serialization of third-party types that cannot themselves be modified (i.e. let them define their own policies).<br />
<br />
Starting points:<br />
<br />
* [http://vibed.org/api/vibe.data.serialization Vibe.d's serialization framework]<br />
* [https://github.com/jacob-carlborg/orange Orange framework]<br />
<br />
Proposed Project Mentor: Jacob Carlborg<br />
<br />
=== Propose your own project ===<br />
----<br />
<br />
Do you have your own vision for improving D's success? That's great!<br />
Are you convinced that your project helps to advance open source technology related to the D programming language?<br />
Then simply get in touch with D's GSoC org admin (social (at) dlang (dot) org) and potential mentors for your project.<br />
<br />
If you are searching for inspiration, you might want to have a look at the [[DIPs| list of D Improvement Proposals (DIPs)]], the [[Vision/2018H1|high-level vision for this semester]] or the [[Wish_list|wish list]].<br />
<br />
== Ideas From Previous Years ==<br />
<br />
These GSoC idea pages from the past years which might provide more inspiration for proposing your own idea:<br />
<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2018 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2017 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2016_Ideas GSoC 2016 Ideas] (accepted, 4 slots)<br />
* [http://wiki.dlang.org/GSOC_2015_Ideas GSoC 2015 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2014_Ideas GSoC 2014 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2013_Ideas GSoC 2013 Ideas] (not accepted)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2012_Ideas GSoC 2012 Ideas] (accepted, 3 slots)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2011_Ideas GSoC 2011 Ideas]<br />
<br />
You may also want to have a look at [https://wiki.dlang.org/SAOC_2018_ideas the Symmetry Autumn of Code ideas page].<br />
<br />
== Tips for students ==<br />
<br />
Please see the "gsoc" articles at our [https://dlang.org/blog/category/gsoc/ official blog] which contain experience reports from students of previous years.<br />
<br />
Daniel Pocock has [http://danielpocock.com/getting-selected-for-google-summer-of-code-2015 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.<br />
<br />
== Tips for Mentors ==<br />
<br />
If you are interested in mentoring, please check out the [http://en.flossmanuals.net/GSoCMentoring/ organization administrator and mentor] manual for more information.<br />
<br />
[[Category:GSOC]]</div>Greenifyhttps://wiki.dlang.org/?title=GSOC_2019_Ideas&diff=9570GSOC 2019 Ideas2019-03-03T04:35:20Z<p>Greenify: /* GDC (GCC-based D compiler) */ add GDC devteam</p>
<hr />
<div>This is the D Language Foundation's Google Summer of Code 2019 page.<br />
<br />
If you are interested in working on a D project as part of GSoC 2019, as either a student or mentor, please contact the GSoC admins at social@dlang.org. Include "GSoC 2019" in the email subject line.<br />
<br />
<br />
== Timeline ==<br />
The timeline for GSoC 2019 [https://developers.google.com/open-source/gsoc/timeline can be found here].<br />
<br />
== Ideas ==<br />
<br />
The D ecosystem is always in need of improvement through the revision of existing projects and the creation of new ones. The core projects like the([http://dlang.org/phobos/index.html standard library]) and the compilers ([[Compilers]]) are always in need of attention. Other important areas include GUI support, integration with other languages, improving and enhancing the tooling, IDE and editor support, and more.<br />
<br />
Please add your project ideas to the list below, being as descriptive as you can in the summaries. Students interested in participating can use the ideas listed here as jumping off points, so the more information you provide, the easier it will be for them to get started. If your idea is particularly complex or nuanced, consider leaving contact information so that interested parties may follow up.<br />
<br />
=== DUB: D's package manager ===<br />
----<br />
<br />
[https://github.com/dlang/dub DUB] - D's package manager - is one of the central infrastructure tools in the D world as a convenient build and package management tool for the D community.<br />
With D gaining more and more popularity, it's also a key tool to guarantee D's further adoption.<br />
Thus there are many great ideas to improve DUB:<br />
<br />
* [https://github.com/dlang/dub/wiki/DEP6 git support]<br />
* [https://github.com/dlang/dub/wiki/DEP2 separate compilation and caching]<br />
* [https://github.com/dlang/dub/wiki/DEP3 extensibility through DUB]<br />
* [https://github.com/dlang/dub/wiki/DEP4 control flow directives]<br />
* [https://github.com/dlang/dub/wiki/DEP5 build system support for C/C++]<br />
* support dub install for distributions<br />
* support building a {snap, Debian, Arch, ...} package out of DUB package<br />
<br />
Any of these listed DUB Enhancement Proposals (DEPs) could form the basis of a GSoC Project.<br />
<br />
'''Update:''' A very detailed list of ideas for improving Dub can be found in this [https://forum.dlang.org/post/eftttpylxanvxjhoigqu@forum.dlang.org Forum thread].<br />
<br />
Proposed Project Mentors: Sönke Ludwig, Sebastian Wilzbach<br />
<br />
=== Header generation for C/C++ ===<br />
----<br />
<br />
With the ever-improving integration between DMD and C/C++, quite a bit of tooling has been developed to generate D header files from C or C++ projects (e.g. [https://github.com/jacob-carlborg/dstep DStep] or [https://github.com/atilaneves/dpp DPP]).<br />
However, for many projects the majority of the source code is now written in D and the reverse step is needed: an automatic way to generate C and C++ headers from a D project.<br />
This would be very valuable for D as it could motivate inter-language projects that typically go C++-fist-with-a-D-binding to work the other way.<br />
<br />
Starting points:<br />
* [https://forum.dlang.org/post/mailman.7146.1551050711.29801.digitalmars-d@puremagic.com NG-Thread: "Make DMD emit C++ .h files same as .di files"]<br />
* [https://github.com/dlang/dmd/pull/8591 Existing specialized work for the DMD codebase]<br />
* [https://gitlab.com/mihails.strasuns/dtoh Existing WIP work for generating C headers]<br />
* [https://github.com/thewilsonator/dtoh Existing WIP work for generating C++ headers, using DMD as a library]<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Language Server Protocol for D ===<br />
----<br />
<br />
The [https://microsoft.github.io/language-server-protocol Language Server Protocol] (LSP) defines the protocol used between an editor or IDE and a language server that provides language features like auto complete, go to definition, find all references etc. Adding features like auto complete, go to definition, or documentation on hover for a programming language takes significant effort. Traditionally this work had to be repeated for each development tool, as each tool provides different APIs for implementing the same feature (see the list of [[Editors]] and [[IDEs]]). Additionally as the existing tools only use `libdparse` (used in [https://github.com/d-language-server/dls DLS] and [https://github.com/dlang-community/DCD DCD]), they lack the ability to perform semantic analysis on the AST and can't evaluate `mixin`'s nor D's very powerful Compile-Time Function Evaluation (CTFE).<br />
A Language Server is meant to provide the language-specific smarts and communicate with development tools over a protocol that enables inter-process communication.<br />
The idea behind the Language Server Protocol (LSP) is to standardize the protocol for how such servers and development tools communicate. This way, single D Language Server can be re-used in multiple development tools, which in turn can support multiple languages with minimal effort.<br />
<br />
Recent development in the DMD compiler [https://dlang.org/blog/2017/08/01/a-dub-case-study-compiling-dmd-as-a-library made it available as a DUB library]. This mean that the compiler itself can be re-used and third-party tools don't have to re-implement e.g. D's complex CTFE. This project is about using the DMD compiler as a library to implement a Language Server for D.<br />
<br />
Proposed Project Mentors: Jacob Carlborg, Sebastian Wilzbach<br />
<br />
How to start:<br />
* [https://github.com/dlang/dmd/blob/master/test/dub_package/frontend.d Simple example] of using DMD as a library<br />
* [https://github.com/jacob-carlborg/dlp More complex use cases]<br />
<br />
=== Mir Project ===<br />
----<br />
<br />
The Mir project is developing numerical libraries for the upcoming numeric packages of<br />
the Dlang standard library. The are numerous projects an interested student could pursue:<br />
<br />
* University project. Your GSoC project can be combined with your scientific research.<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://julialang.org Julia] integration<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://www.numpy.org NumPy] integration<br />
* General purpose BetterC libraries<br />
** I/O betterC Dlang library<br />
** Async betterC Dlang library<br />
** String and format betterC library<br />
* mir-cpuid <br />
** ARM support<br />
** Advanced OS specific support<br />
* mir-glas<br />
** BLAS Level 2 subprograms<br />
** One BLAS Level 3 subprogram. It is OK to do only one! But it must be faster then OpenBLAS, and not slower then Intel MKL.<br />
** Multithreading support for BLAS Level 2<br />
** Multithreading support for BLAS Level 3<br />
<br />
You can get more details on projects related to Mir [https://github.com/libmir/mir/wiki/GSoC-2019 here].<br />
<br />
Its Good To Know:<br />
<br />
To work on the Mir you should be proficient with one of:<br />
<br />
* C<br />
* C++<br />
* LLVM<br />
* Fortran<br />
* Experience with D is not essential.<br />
<br />
To work on the Mir project requires a responsible and self-motivated student.<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
<br />
=== LDC (LLVM-based D compiler) ===<br />
----<br />
<br />
The LDC project provides a portable D programming language compiler with modern optimization and code generation capabilities.<br />
The ever-improving feature set of LLVM opens up many opportunities with D.<br />
A few ideas for a potential GSoC project are:<br />
<br />
* exploiting immutability of variables (notably of structs such as string slices)<br />
* devirtualization<br />
* improve debuginfo<br />
* ASan with GC and multithreading<br />
* function multiversioning<br />
<br />
You might also want to browse the [https://github.com/ldc-developers/ldc/issues LDC's issue tracker] for more ideas.<br />
<br />
Proposed Project Mentors: TBA (LDC dev team)<br />
<br />
=== iOS support in LDC ===<br />
----<br />
<br />
Mobile is becoming, or rather is already, the biggest software platform. While LDC already supports the Android platform there's no official support for iOS. The project would consist of adding support for the iOS platform to the LDC compiler, the D runtime library and the D standard library. The goal would be to get support for this platform upstreamed to the LDC main project.<br />
<br />
A lot of existing work has been done but has never been completed or upstreamed: https://github.com/smolt/ldc-iphone-dev.<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Baremetal D runtime ===<br />
----<br />
<br />
Many features in the standard library are implemented by using the C runtime. Reusing the rock-solid work of generations of programmers makes a lot of sense as just outputting via `printf` can be very [https://github.molgen.mpg.de/git-mirror/glibc/blob/20003c49884422da7ffbc459cdeee768a6fee07b/stdio-common/vfprintf.c complex]. However, for embedded environments a programmer often only has a tiny amount of storage available or might not even have a C runtime available for his target.<br />
The idea of this project is to implement the most basic parts of the runtime natively in D, s.t. bare metals programmers can just compile for their target. Implementing features natively in D also means that other targets like [https://wiki.dlang.org/Generating_WebAssembly_with_LDC Web Assembly] will automatically be able to use them too. Another advantage of implementing these basic building blocks in D is that one can take advantage of D's Compile-Time Function Evaluation (CTFE) and optimize the methods even further at compile-time.<br />
<br />
Project focus:<br />
- Implement `memcpy`, `memcmp` and similar in D (with similar performance to C)<br />
- Implement `malloc` and similar in D (with similar performance to C)<br />
<br />
Starting points:<br />
* [https://theartofmachinery.com/2017/02/28/bare_metal_d.html D for Bare Metal Programming (tutorial series]<br />
* [https://github.com/JinShil/stm32f42_discovery_demo Simple demonstration of using D to bare-metal program an STM32F29I Discovery board]<br />
* [https://github.com/JinShil/memcpyD memcpyD]<br />
* [https://wiki.dlang.org/Programming_in_D_tutorial_on_Embedded_Linux_ARM_devices Programming in D tutorial on Embedded Linux ARM devices]<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== GDC (GCC-based D compiler) ===<br />
----<br />
<br />
The GDC compiles uses GCC as a backend to utilize this powerful backend.<br />
Recently, GDC [https://www.phoronix.com/scan.php?page=news_item&px=GCC-9-Merges-D-Language has been accepted as GCC frontend] and will be part of the GCC9 release.<br />
However, GDC still has lots of tasks that the potential students could work on.<br />
<br />
One idea would be to improve GDC's support for betterC by adding a compiler interface to allow using a modular runtime. Right now when GDC uses some feature (TypeInfo, asserts, unittests), it just emits a call to an `extern(C)` function. A much better approach would be to have a defined D API (e.g. `rt.assert.onAssertFailure(...)`). The compiler can then check if it finds `rt.assert.onFailure`. If not, the compiler can the simply disable that feature and provide nice error messages. This could be done for TypeInfo, Exceptions, Asserts, Switch errors, unit test support, etc. In the end, the vision would be to be able to ship a compiler completely without runtime. This compiler should be able to produce bare bones code without any further configuration. Then add a dependency to `drt:core` in the dub configuration to get class support, `dr:exception` for exceptions, etc. The compiler could then automatically detect availability of these features. (Of course manually adding -I paths would work in exactly the same way).<br />
<br />
For more ideas, interested students are encouraged to browse [https://bugzilla.gdcproject.org/describecomponents.cgi GDC's issue list] or getting [https://wiki.dlang.org/GDC in touch with the GDC development team].<br />
<br />
Proposed Project Mentors: TBA (GDC devteam)<br />
<br />
=== C++ interops ===<br />
----<br />
<br />
There are many experiments in transparently interfacing D with C++, notably:<br />
<br />
* [https://github.com/atilaneves/dpp dpp] by Atila Neves, that parses and translates headers on the fly<br />
* [https://wiki.dlang.org/Calypso Calypso] by Elie Morisse that bridges the two languages at the AST level.<br />
* [https://github.com/jacob-carlborg/dstep DStep] by Jacob Carlborg, automatically generates bindings for C and Objective-C code. The task would be to add support for C++.<br />
<br />
There is also a lot of work in bringing STL types to the DRuntime (see https://github.com/dlang/druntime/pull/2310).<br />
<br />
D would greatly benefit by seamlessly integrating the C++ ecosystem. There are many ways to accomplish this goal and it should be discussed with the community.<br />
Andrei already commented on the importance of a tool like Calypso in this thread:<br />
https://forum.dlang.org/post/m9s4cd$2s1v$1@digitalmars.com<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Persistent Data Structures ===<br />
----<br />
<br />
There is an ongoing effort to reduce the reliance of Phobos on the GC but the GC is not going anywhere given that it has many advantages over manual memory management.<br />
The community would greatly benefit from a wide range of functional programming techniques that have their roots in the usage of immutable and persistent data structures that heavily rely on the GC.<br />
Persistent Data Structures are heavily used in [http://docs.scala-lang.org/overviews/collections/overview.html Scala] and [http://clojure.org/reference/data_structures Clojure] and they allow the programmer to reason about interactivity, sharing and parallelism.<br />
<br />
The focus of this project would be to create a varying range of persistent data structures (sets, vectors, maps, strings, trees, lists, etc...) that respects the range interface and the semantics of Phobos.<br />
<br />
Related Work:<br />
<br />
* https://www.cs.cmu.edu/~rwh/theses/okasaki.pdf <br />
* https://www.worldcat.org/title/rrb-trees-efficient-immutable-vectors/oclc/820379112<br />
* https://www.youtube.com/watch?v=7BFF50BHPPo<br />
* https://www.infoq.com/presentations/Value-Values<br />
* https://github.com/arximboldi/immer<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== std.benchmark ===<br />
----<br />
<br />
Ideally every function in Phobos should have its own benchmark suite which is run for every PR to check for performance improvements or regressions.<br />
* Additionally support for the new big O annotation [https://github.com/dlang/phobos/pull/4965 here] would be nice. <br />
* Existing work: [https://github.com/dlang/phobos/pull/794 here], and [https://github.com/dlang/phobos/pull/3695 here], and [https://github.com/atilaneves/unit-threaded/tree/master/source/unit_threaded/randomized here (QuickText-like testing)]. <br />
<br />
Proposed Project Mentors: Sebastian Wilzbach<br />
<br />
=== Jupyter notebook D kernel ===<br />
----<br />
<br />
The Jupyter Notebook is an open-source web application that allows you to create and share documents that contain live code, equations, visualizations and narrative text. Uses include: data cleaning and transformation, numerical simulation, statistical modeling, data visualization, machine learning, and much more.<br />
Jupyter notebooks are extremely popular among data scientist as they allow interactive progress and exploring a solution step by step.<br />
With a bit of work, a statically compiled language can be used in an interactive notebook e.g. [Cling https://blog.jupyter.org/interactive-workflows-for-c-with-jupyter-fe9b54227d92] and Go with<br />
[https://github.com/gopherdata/gophernotes gophernotes].<br />
Apart from being useful to data scientist, a Jupyter D kernel would allow an intuitive exploration of the language for newcomers and people starting with new libraries.<br />
<br />
Existing works:<br />
- [https://github.com/dlang-community/drepl drepl] - simple REPL for D<br />
- [https://github.com/DlangScience/PydMagic PydMagic] - allows to write PyD extension in a notebook.<br />
<br />
Proposed Project Mentor: Sebastian Wilzbach<br />
<br />
<br />
=== Tabular data container (data frames) ===<br />
----<br />
<br />
Pandas, R and Julia have made [https://github.com/mobileink/data.frame/wiki/What-is-a-Data-Frame%3F data frames] very popular.<br />
As D is getting more interest from data scientist (e.g. [https://github.com/eBay/tsv-utils eBay] or [http://tech.adroll.com/blog/data/2014/11/17/d-is-for-data-science.html AdRoll]) it would be very beneficial to use one language for the entire data analysis pipeline - especially considering that D (in contrast to popular languages like Python, R or Julia) - is compiled to native machine code and gets optimized by the sophisticated LLVM backend.<br />
<br />
Minimum requirements:<br />
<br />
* conversion to and from CSV<br />
* multi-indexing<br />
* column binary operations, e.g. `column1 * column2`<br />
* group-by on an arbitrary number of columns<br />
* column/group aggregations<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
=== Graphics library for resource constrained embedded systems ===<br />
----<br />
<br />
Create a 2D rasterizer, rich drawing primitives, and 2D graphics library suitable for resource constrained embedded systems (e.g. ARM Cortex-M) to be used in industrial controls, home appliances, medical devices, consumer electronics, and IoT just to name a few. The end goal would be something similar to [https://www.segger.com/products/user-interface/emwin Segger's emWin]. The library would be used to drive LDCs similar to https://www.adafruit.com/product/3396<br />
Requirements:<br />
<br />
* Hardware agnostic; should simply render to a frame buffer<br />
* No dependencies (No Phobos, no C standard library, and no official D runtime).<br />
* Consider using -betterC, but a custom minimal D runtime is also a viable option<br />
<br />
Related work:<br />
<br />
* https://github.com/TurkeyMan/color<br />
* https://bitbucket.org/timosi/minlibd<br />
* https://github.com/JinShil/stm32f42_discovery_demo<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
<br />
=== Functional Reactive Programming ===<br />
----<br />
<br />
Functional reactive programming (FRP) is a programming paradigm for reactive programming (asynchronous dataflow programming) using the building blocks of functional programming (e.g. map, reduce, filter).<br />
The best-known FRP API is the [http://reactivex.io ReactiveX API] whose implementation in D this project would focus.<br />
Note that this project is closely related to the std.eventloop project.<br />
<br />
Proposed Project Mentors: Petar Kirov<br />
<br />
=== BetterC runtime ===<br />
----<br />
<br />
[https://dlang.org/blog/2017/08/23/d-as-a-better-c BetterC] is a subset of D which limits the feature set of D, s.t. it's even easier to migrate from C as no Garbage Collection (GC) is used anymore.<br />
While, this feature is popular for some projects, `-betterC` today means still means a severe restriction in the amount of D features available (see the [https://dlang.org/spec/betterc.html BetterC specification]).<br />
This project is about making more parts of the D runtime betterC-compatible. For example, classes could be allocated with reference-counting instead of using the GC. <br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Java Native Interface (JNI) library ===<br />
----<br />
<br />
D's features allow to write cut down the boilerplate of wrapper drastically.<br />
See the recently published [https://dlang.org/blog/2017/05/31/project-highlight-excel-d excel-d] for a comparison between the C++ implementation for registering a function in Excel and the D way.<br />
Similarly a solid JNI library would open up new many new use cases and allow the Java community to profit even easier from D's features.<br />
<br />
Previous work: [https://github.com/Monnoroch/DJni DJni], [https://github.com/jamesmahler/djvm djvm]<br />
Proposed Project Mentor: TBA<br />
<br />
=== ORM mapping ===<br />
----<br />
<br />
SQLAlchemy is an object-relational mapper which provides "a full suite of well known enterprise-level persistence patterns, designed for efficient and high-performing database access, adapted into a simple and Pythonic domain language".<br />
While there has been some attempts in implementing an ORM in D - none of these got close to the simplicity and usability of SQLAlchemy (see [[Database Libraries]]).<br />
However, with D's CTFE queries could - like std.format's strings - already be checked at compile-time and optimizations could be be applied to the parser and serializer.<br />
<br />
This project would be based on the [http://dconf.org/2016/talks/smith.html proposed std.database abstraction] and focus on creating a general-purpose ORM on top of it.<br />
<br />
See also: Martin Nowak's DConf16 talk about [http://dconf.org/2016/talks/nowak.html Object-Relational Mapper] <br />
<br />
Existing work:<br />
* [https://github.com/huntlabs/hunt-entity hunt-entity]<br />
<br />
Proposed Project Mentor: TBA<br />
<br />
=== std.serialization ===<br />
----<br />
<br />
D has numerous serialization frameworks. From `std.json` to `std.csv` over [https://github.com/dcarp/protobuf-d protobuf] to [https://github.com/vibe-d/vibe.d Vibe.d's] own serialization framework.<br />
The goal of this project is to implement a flexible (de)serialization framework that can be used as a standardized building block for various serialization related things.<br />
One important goal would be to define how a user-specified type has to work in order to make it serializable, as well as to allow the end-user (e.g. a user of std.json) to change the serialization of third-party types that cannot themselves be modified (i.e. let them define their own policies).<br />
<br />
Starting points:<br />
<br />
* [http://vibed.org/api/vibe.data.serialization Vibe.d's serialization framework]<br />
* [https://github.com/jacob-carlborg/orange Orange framework]<br />
<br />
Proposed Project Mentor: Jacob Carlborg<br />
<br />
=== Propose your own project ===<br />
----<br />
<br />
Do you have your own vision for improving D's success? That's great!<br />
Are you convinced that your project helps to advance open source technology related to the D programming language?<br />
Then simply get in touch with D's GSoC org admin (social (at) dlang (dot) org) and potential mentors for your project.<br />
<br />
If you are searching for inspiration, you might want to have a look at the [[DIPs| list of D Improvement Proposals (DIPs)]], the [[Vision/2018H1|high-level vision for this semester]] or the [[Wish_list|wish list]].<br />
<br />
<br />
== Ideas From Previous Years ==<br />
<br />
These GSoC idea pages from the past years which might provide more inspiration for proposing your own idea:<br />
<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2018 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2017 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2016_Ideas GSoC 2016 Ideas] (accepted, 4 slots)<br />
* [http://wiki.dlang.org/GSOC_2015_Ideas GSoC 2015 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2014_Ideas GSoC 2014 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2013_Ideas GSoC 2013 Ideas] (not accepted)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2012_Ideas GSoC 2012 Ideas] (accepted, 3 slots)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2011_Ideas GSoC 2011 Ideas]<br />
<br />
You may also want to have a look at [https://wiki.dlang.org/SAOC_2018_ideas the Symmetry Autumn of Code ideas page].<br />
<br />
== Tips for students ==<br />
<br />
Please see the "gsoc" articles at our [https://dlang.org/blog/category/gsoc/ official blog] which contain experience reports from students of previous years.<br />
<br />
Daniel Pocock has [http://danielpocock.com/getting-selected-for-google-summer-of-code-2015 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.<br />
<br />
<br />
== Tips for Mentors ==<br />
<br />
If you are interested in mentoring, please check out the [http://en.flossmanuals.net/GSoCMentoring/ organization administrator and mentor] manual for more information.<br />
<br />
[[Category:GSOC]]</div>Greenifyhttps://wiki.dlang.org/?title=GSOC_2019_Ideas&diff=9569GSOC 2019 Ideas2019-03-03T04:35:03Z<p>Greenify: /* C++ interops */ Removed whitespace</p>
<hr />
<div>This is the D Language Foundation's Google Summer of Code 2019 page.<br />
<br />
If you are interested in working on a D project as part of GSoC 2019, as either a student or mentor, please contact the GSoC admins at social@dlang.org. Include "GSoC 2019" in the email subject line.<br />
<br />
<br />
== Timeline ==<br />
The timeline for GSoC 2019 [https://developers.google.com/open-source/gsoc/timeline can be found here].<br />
<br />
== Ideas ==<br />
<br />
The D ecosystem is always in need of improvement through the revision of existing projects and the creation of new ones. The core projects like the([http://dlang.org/phobos/index.html standard library]) and the compilers ([[Compilers]]) are always in need of attention. Other important areas include GUI support, integration with other languages, improving and enhancing the tooling, IDE and editor support, and more.<br />
<br />
Please add your project ideas to the list below, being as descriptive as you can in the summaries. Students interested in participating can use the ideas listed here as jumping off points, so the more information you provide, the easier it will be for them to get started. If your idea is particularly complex or nuanced, consider leaving contact information so that interested parties may follow up.<br />
<br />
=== DUB: D's package manager ===<br />
----<br />
<br />
[https://github.com/dlang/dub DUB] - D's package manager - is one of the central infrastructure tools in the D world as a convenient build and package management tool for the D community.<br />
With D gaining more and more popularity, it's also a key tool to guarantee D's further adoption.<br />
Thus there are many great ideas to improve DUB:<br />
<br />
* [https://github.com/dlang/dub/wiki/DEP6 git support]<br />
* [https://github.com/dlang/dub/wiki/DEP2 separate compilation and caching]<br />
* [https://github.com/dlang/dub/wiki/DEP3 extensibility through DUB]<br />
* [https://github.com/dlang/dub/wiki/DEP4 control flow directives]<br />
* [https://github.com/dlang/dub/wiki/DEP5 build system support for C/C++]<br />
* support dub install for distributions<br />
* support building a {snap, Debian, Arch, ...} package out of DUB package<br />
<br />
Any of these listed DUB Enhancement Proposals (DEPs) could form the basis of a GSoC Project.<br />
<br />
'''Update:''' A very detailed list of ideas for improving Dub can be found in this [https://forum.dlang.org/post/eftttpylxanvxjhoigqu@forum.dlang.org Forum thread].<br />
<br />
Proposed Project Mentors: Sönke Ludwig, Sebastian Wilzbach<br />
<br />
=== Header generation for C/C++ ===<br />
----<br />
<br />
With the ever-improving integration between DMD and C/C++, quite a bit of tooling has been developed to generate D header files from C or C++ projects (e.g. [https://github.com/jacob-carlborg/dstep DStep] or [https://github.com/atilaneves/dpp DPP]).<br />
However, for many projects the majority of the source code is now written in D and the reverse step is needed: an automatic way to generate C and C++ headers from a D project.<br />
This would be very valuable for D as it could motivate inter-language projects that typically go C++-fist-with-a-D-binding to work the other way.<br />
<br />
Starting points:<br />
* [https://forum.dlang.org/post/mailman.7146.1551050711.29801.digitalmars-d@puremagic.com NG-Thread: "Make DMD emit C++ .h files same as .di files"]<br />
* [https://github.com/dlang/dmd/pull/8591 Existing specialized work for the DMD codebase]<br />
* [https://gitlab.com/mihails.strasuns/dtoh Existing WIP work for generating C headers]<br />
* [https://github.com/thewilsonator/dtoh Existing WIP work for generating C++ headers, using DMD as a library]<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Language Server Protocol for D ===<br />
----<br />
<br />
The [https://microsoft.github.io/language-server-protocol Language Server Protocol] (LSP) defines the protocol used between an editor or IDE and a language server that provides language features like auto complete, go to definition, find all references etc. Adding features like auto complete, go to definition, or documentation on hover for a programming language takes significant effort. Traditionally this work had to be repeated for each development tool, as each tool provides different APIs for implementing the same feature (see the list of [[Editors]] and [[IDEs]]). Additionally as the existing tools only use `libdparse` (used in [https://github.com/d-language-server/dls DLS] and [https://github.com/dlang-community/DCD DCD]), they lack the ability to perform semantic analysis on the AST and can't evaluate `mixin`'s nor D's very powerful Compile-Time Function Evaluation (CTFE).<br />
A Language Server is meant to provide the language-specific smarts and communicate with development tools over a protocol that enables inter-process communication.<br />
The idea behind the Language Server Protocol (LSP) is to standardize the protocol for how such servers and development tools communicate. This way, single D Language Server can be re-used in multiple development tools, which in turn can support multiple languages with minimal effort.<br />
<br />
Recent development in the DMD compiler [https://dlang.org/blog/2017/08/01/a-dub-case-study-compiling-dmd-as-a-library made it available as a DUB library]. This mean that the compiler itself can be re-used and third-party tools don't have to re-implement e.g. D's complex CTFE. This project is about using the DMD compiler as a library to implement a Language Server for D.<br />
<br />
Proposed Project Mentors: Jacob Carlborg, Sebastian Wilzbach<br />
<br />
How to start:<br />
* [https://github.com/dlang/dmd/blob/master/test/dub_package/frontend.d Simple example] of using DMD as a library<br />
* [https://github.com/jacob-carlborg/dlp More complex use cases]<br />
<br />
=== Mir Project ===<br />
----<br />
<br />
The Mir project is developing numerical libraries for the upcoming numeric packages of<br />
the Dlang standard library. The are numerous projects an interested student could pursue:<br />
<br />
* University project. Your GSoC project can be combined with your scientific research.<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://julialang.org Julia] integration<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://www.numpy.org NumPy] integration<br />
* General purpose BetterC libraries<br />
** I/O betterC Dlang library<br />
** Async betterC Dlang library<br />
** String and format betterC library<br />
* mir-cpuid <br />
** ARM support<br />
** Advanced OS specific support<br />
* mir-glas<br />
** BLAS Level 2 subprograms<br />
** One BLAS Level 3 subprogram. It is OK to do only one! But it must be faster then OpenBLAS, and not slower then Intel MKL.<br />
** Multithreading support for BLAS Level 2<br />
** Multithreading support for BLAS Level 3<br />
<br />
You can get more details on projects related to Mir [https://github.com/libmir/mir/wiki/GSoC-2019 here].<br />
<br />
Its Good To Know:<br />
<br />
To work on the Mir you should be proficient with one of:<br />
<br />
* C<br />
* C++<br />
* LLVM<br />
* Fortran<br />
* Experience with D is not essential.<br />
<br />
To work on the Mir project requires a responsible and self-motivated student.<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
<br />
=== LDC (LLVM-based D compiler) ===<br />
----<br />
<br />
The LDC project provides a portable D programming language compiler with modern optimization and code generation capabilities.<br />
The ever-improving feature set of LLVM opens up many opportunities with D.<br />
A few ideas for a potential GSoC project are:<br />
<br />
* exploiting immutability of variables (notably of structs such as string slices)<br />
* devirtualization<br />
* improve debuginfo<br />
* ASan with GC and multithreading<br />
* function multiversioning<br />
<br />
You might also want to browse the [https://github.com/ldc-developers/ldc/issues LDC's issue tracker] for more ideas.<br />
<br />
Proposed Project Mentors: TBA (LDC dev team)<br />
<br />
=== iOS support in LDC ===<br />
----<br />
<br />
Mobile is becoming, or rather is already, the biggest software platform. While LDC already supports the Android platform there's no official support for iOS. The project would consist of adding support for the iOS platform to the LDC compiler, the D runtime library and the D standard library. The goal would be to get support for this platform upstreamed to the LDC main project.<br />
<br />
A lot of existing work has been done but has never been completed or upstreamed: https://github.com/smolt/ldc-iphone-dev.<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Baremetal D runtime ===<br />
----<br />
<br />
Many features in the standard library are implemented by using the C runtime. Reusing the rock-solid work of generations of programmers makes a lot of sense as just outputting via `printf` can be very [https://github.molgen.mpg.de/git-mirror/glibc/blob/20003c49884422da7ffbc459cdeee768a6fee07b/stdio-common/vfprintf.c complex]. However, for embedded environments a programmer often only has a tiny amount of storage available or might not even have a C runtime available for his target.<br />
The idea of this project is to implement the most basic parts of the runtime natively in D, s.t. bare metals programmers can just compile for their target. Implementing features natively in D also means that other targets like [https://wiki.dlang.org/Generating_WebAssembly_with_LDC Web Assembly] will automatically be able to use them too. Another advantage of implementing these basic building blocks in D is that one can take advantage of D's Compile-Time Function Evaluation (CTFE) and optimize the methods even further at compile-time.<br />
<br />
Project focus:<br />
- Implement `memcpy`, `memcmp` and similar in D (with similar performance to C)<br />
- Implement `malloc` and similar in D (with similar performance to C)<br />
<br />
Starting points:<br />
* [https://theartofmachinery.com/2017/02/28/bare_metal_d.html D for Bare Metal Programming (tutorial series]<br />
* [https://github.com/JinShil/stm32f42_discovery_demo Simple demonstration of using D to bare-metal program an STM32F29I Discovery board]<br />
* [https://github.com/JinShil/memcpyD memcpyD]<br />
* [https://wiki.dlang.org/Programming_in_D_tutorial_on_Embedded_Linux_ARM_devices Programming in D tutorial on Embedded Linux ARM devices]<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== GDC (GCC-based D compiler) ===<br />
----<br />
<br />
The GDC compiles uses GCC as a backend to utilize this powerful backend.<br />
Recently, GDC [https://www.phoronix.com/scan.php?page=news_item&px=GCC-9-Merges-D-Language has been accepted as GCC frontend] and will be part of the GCC9 release.<br />
However, GDC still has lots of tasks that the potential students could work on.<br />
<br />
One idea would be to improve GDC's support for betterC by adding a compiler interface to allow using a modular runtime. Right now when GDC uses some feature (TypeInfo, asserts, unittests), it just emits a call to an `extern(C)` function. A much better approach would be to have a defined D API (e.g. `rt.assert.onAssertFailure(...)`). The compiler can then check if it finds `rt.assert.onFailure`. If not, the compiler can the simply disable that feature and provide nice error messages. This could be done for TypeInfo, Exceptions, Asserts, Switch errors, unit test support, etc. In the end, the vision would be to be able to ship a compiler completely without runtime. This compiler should be able to produce bare bones code without any further configuration. Then add a dependency to `drt:core` in the dub configuration to get class support, `dr:exception` for exceptions, etc. The compiler could then automatically detect availability of these features. (Of course manually adding -I paths would work in exactly the same way).<br />
<br />
For more ideas, interested students are encouraged to browse [https://bugzilla.gdcproject.org/describecomponents.cgi GDC's issue list] or getting [https://wiki.dlang.org/GDC in touch with the GDC development team].<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== C++ interops ===<br />
----<br />
<br />
There are many experiments in transparently interfacing D with C++, notably:<br />
<br />
* [https://github.com/atilaneves/dpp dpp] by Atila Neves, that parses and translates headers on the fly<br />
* [https://wiki.dlang.org/Calypso Calypso] by Elie Morisse that bridges the two languages at the AST level.<br />
* [https://github.com/jacob-carlborg/dstep DStep] by Jacob Carlborg, automatically generates bindings for C and Objective-C code. The task would be to add support for C++.<br />
<br />
There is also a lot of work in bringing STL types to the DRuntime (see https://github.com/dlang/druntime/pull/2310).<br />
<br />
D would greatly benefit by seamlessly integrating the C++ ecosystem. There are many ways to accomplish this goal and it should be discussed with the community.<br />
Andrei already commented on the importance of a tool like Calypso in this thread:<br />
https://forum.dlang.org/post/m9s4cd$2s1v$1@digitalmars.com<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Persistent Data Structures ===<br />
----<br />
<br />
There is an ongoing effort to reduce the reliance of Phobos on the GC but the GC is not going anywhere given that it has many advantages over manual memory management.<br />
The community would greatly benefit from a wide range of functional programming techniques that have their roots in the usage of immutable and persistent data structures that heavily rely on the GC.<br />
Persistent Data Structures are heavily used in [http://docs.scala-lang.org/overviews/collections/overview.html Scala] and [http://clojure.org/reference/data_structures Clojure] and they allow the programmer to reason about interactivity, sharing and parallelism.<br />
<br />
The focus of this project would be to create a varying range of persistent data structures (sets, vectors, maps, strings, trees, lists, etc...) that respects the range interface and the semantics of Phobos.<br />
<br />
Related Work:<br />
<br />
* https://www.cs.cmu.edu/~rwh/theses/okasaki.pdf <br />
* https://www.worldcat.org/title/rrb-trees-efficient-immutable-vectors/oclc/820379112<br />
* https://www.youtube.com/watch?v=7BFF50BHPPo<br />
* https://www.infoq.com/presentations/Value-Values<br />
* https://github.com/arximboldi/immer<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== std.benchmark ===<br />
----<br />
<br />
Ideally every function in Phobos should have its own benchmark suite which is run for every PR to check for performance improvements or regressions.<br />
* Additionally support for the new big O annotation [https://github.com/dlang/phobos/pull/4965 here] would be nice. <br />
* Existing work: [https://github.com/dlang/phobos/pull/794 here], and [https://github.com/dlang/phobos/pull/3695 here], and [https://github.com/atilaneves/unit-threaded/tree/master/source/unit_threaded/randomized here (QuickText-like testing)]. <br />
<br />
Proposed Project Mentors: Sebastian Wilzbach<br />
<br />
=== Jupyter notebook D kernel ===<br />
----<br />
<br />
The Jupyter Notebook is an open-source web application that allows you to create and share documents that contain live code, equations, visualizations and narrative text. Uses include: data cleaning and transformation, numerical simulation, statistical modeling, data visualization, machine learning, and much more.<br />
Jupyter notebooks are extremely popular among data scientist as they allow interactive progress and exploring a solution step by step.<br />
With a bit of work, a statically compiled language can be used in an interactive notebook e.g. [Cling https://blog.jupyter.org/interactive-workflows-for-c-with-jupyter-fe9b54227d92] and Go with<br />
[https://github.com/gopherdata/gophernotes gophernotes].<br />
Apart from being useful to data scientist, a Jupyter D kernel would allow an intuitive exploration of the language for newcomers and people starting with new libraries.<br />
<br />
Existing works:<br />
- [https://github.com/dlang-community/drepl drepl] - simple REPL for D<br />
- [https://github.com/DlangScience/PydMagic PydMagic] - allows to write PyD extension in a notebook.<br />
<br />
Proposed Project Mentor: Sebastian Wilzbach<br />
<br />
<br />
=== Tabular data container (data frames) ===<br />
----<br />
<br />
Pandas, R and Julia have made [https://github.com/mobileink/data.frame/wiki/What-is-a-Data-Frame%3F data frames] very popular.<br />
As D is getting more interest from data scientist (e.g. [https://github.com/eBay/tsv-utils eBay] or [http://tech.adroll.com/blog/data/2014/11/17/d-is-for-data-science.html AdRoll]) it would be very beneficial to use one language for the entire data analysis pipeline - especially considering that D (in contrast to popular languages like Python, R or Julia) - is compiled to native machine code and gets optimized by the sophisticated LLVM backend.<br />
<br />
Minimum requirements:<br />
<br />
* conversion to and from CSV<br />
* multi-indexing<br />
* column binary operations, e.g. `column1 * column2`<br />
* group-by on an arbitrary number of columns<br />
* column/group aggregations<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
=== Graphics library for resource constrained embedded systems ===<br />
----<br />
<br />
Create a 2D rasterizer, rich drawing primitives, and 2D graphics library suitable for resource constrained embedded systems (e.g. ARM Cortex-M) to be used in industrial controls, home appliances, medical devices, consumer electronics, and IoT just to name a few. The end goal would be something similar to [https://www.segger.com/products/user-interface/emwin Segger's emWin]. The library would be used to drive LDCs similar to https://www.adafruit.com/product/3396<br />
Requirements:<br />
<br />
* Hardware agnostic; should simply render to a frame buffer<br />
* No dependencies (No Phobos, no C standard library, and no official D runtime).<br />
* Consider using -betterC, but a custom minimal D runtime is also a viable option<br />
<br />
Related work:<br />
<br />
* https://github.com/TurkeyMan/color<br />
* https://bitbucket.org/timosi/minlibd<br />
* https://github.com/JinShil/stm32f42_discovery_demo<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
<br />
=== Functional Reactive Programming ===<br />
----<br />
<br />
Functional reactive programming (FRP) is a programming paradigm for reactive programming (asynchronous dataflow programming) using the building blocks of functional programming (e.g. map, reduce, filter).<br />
The best-known FRP API is the [http://reactivex.io ReactiveX API] whose implementation in D this project would focus.<br />
Note that this project is closely related to the std.eventloop project.<br />
<br />
Proposed Project Mentors: Petar Kirov<br />
<br />
=== BetterC runtime ===<br />
----<br />
<br />
[https://dlang.org/blog/2017/08/23/d-as-a-better-c BetterC] is a subset of D which limits the feature set of D, s.t. it's even easier to migrate from C as no Garbage Collection (GC) is used anymore.<br />
While, this feature is popular for some projects, `-betterC` today means still means a severe restriction in the amount of D features available (see the [https://dlang.org/spec/betterc.html BetterC specification]).<br />
This project is about making more parts of the D runtime betterC-compatible. For example, classes could be allocated with reference-counting instead of using the GC. <br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Java Native Interface (JNI) library ===<br />
----<br />
<br />
D's features allow to write cut down the boilerplate of wrapper drastically.<br />
See the recently published [https://dlang.org/blog/2017/05/31/project-highlight-excel-d excel-d] for a comparison between the C++ implementation for registering a function in Excel and the D way.<br />
Similarly a solid JNI library would open up new many new use cases and allow the Java community to profit even easier from D's features.<br />
<br />
Previous work: [https://github.com/Monnoroch/DJni DJni], [https://github.com/jamesmahler/djvm djvm]<br />
Proposed Project Mentor: TBA<br />
<br />
=== ORM mapping ===<br />
----<br />
<br />
SQLAlchemy is an object-relational mapper which provides "a full suite of well known enterprise-level persistence patterns, designed for efficient and high-performing database access, adapted into a simple and Pythonic domain language".<br />
While there has been some attempts in implementing an ORM in D - none of these got close to the simplicity and usability of SQLAlchemy (see [[Database Libraries]]).<br />
However, with D's CTFE queries could - like std.format's strings - already be checked at compile-time and optimizations could be be applied to the parser and serializer.<br />
<br />
This project would be based on the [http://dconf.org/2016/talks/smith.html proposed std.database abstraction] and focus on creating a general-purpose ORM on top of it.<br />
<br />
See also: Martin Nowak's DConf16 talk about [http://dconf.org/2016/talks/nowak.html Object-Relational Mapper] <br />
<br />
Existing work:<br />
* [https://github.com/huntlabs/hunt-entity hunt-entity]<br />
<br />
Proposed Project Mentor: TBA<br />
<br />
=== std.serialization ===<br />
----<br />
<br />
D has numerous serialization frameworks. From `std.json` to `std.csv` over [https://github.com/dcarp/protobuf-d protobuf] to [https://github.com/vibe-d/vibe.d Vibe.d's] own serialization framework.<br />
The goal of this project is to implement a flexible (de)serialization framework that can be used as a standardized building block for various serialization related things.<br />
One important goal would be to define how a user-specified type has to work in order to make it serializable, as well as to allow the end-user (e.g. a user of std.json) to change the serialization of third-party types that cannot themselves be modified (i.e. let them define their own policies).<br />
<br />
Starting points:<br />
<br />
* [http://vibed.org/api/vibe.data.serialization Vibe.d's serialization framework]<br />
* [https://github.com/jacob-carlborg/orange Orange framework]<br />
<br />
Proposed Project Mentor: Jacob Carlborg<br />
<br />
=== Propose your own project ===<br />
----<br />
<br />
Do you have your own vision for improving D's success? That's great!<br />
Are you convinced that your project helps to advance open source technology related to the D programming language?<br />
Then simply get in touch with D's GSoC org admin (social (at) dlang (dot) org) and potential mentors for your project.<br />
<br />
If you are searching for inspiration, you might want to have a look at the [[DIPs| list of D Improvement Proposals (DIPs)]], the [[Vision/2018H1|high-level vision for this semester]] or the [[Wish_list|wish list]].<br />
<br />
<br />
== Ideas From Previous Years ==<br />
<br />
These GSoC idea pages from the past years which might provide more inspiration for proposing your own idea:<br />
<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2018 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2017 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2016_Ideas GSoC 2016 Ideas] (accepted, 4 slots)<br />
* [http://wiki.dlang.org/GSOC_2015_Ideas GSoC 2015 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2014_Ideas GSoC 2014 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2013_Ideas GSoC 2013 Ideas] (not accepted)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2012_Ideas GSoC 2012 Ideas] (accepted, 3 slots)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2011_Ideas GSoC 2011 Ideas]<br />
<br />
You may also want to have a look at [https://wiki.dlang.org/SAOC_2018_ideas the Symmetry Autumn of Code ideas page].<br />
<br />
== Tips for students ==<br />
<br />
Please see the "gsoc" articles at our [https://dlang.org/blog/category/gsoc/ official blog] which contain experience reports from students of previous years.<br />
<br />
Daniel Pocock has [http://danielpocock.com/getting-selected-for-google-summer-of-code-2015 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.<br />
<br />
<br />
== Tips for Mentors ==<br />
<br />
If you are interested in mentoring, please check out the [http://en.flossmanuals.net/GSoCMentoring/ organization administrator and mentor] manual for more information.<br />
<br />
[[Category:GSOC]]</div>Greenifyhttps://wiki.dlang.org/?title=GSOC_2019_Ideas&diff=9568GSOC 2019 Ideas2019-03-03T04:34:43Z<p>Greenify: /* Baremetal D runtime */ remove whitespace</p>
<hr />
<div>This is the D Language Foundation's Google Summer of Code 2019 page.<br />
<br />
If you are interested in working on a D project as part of GSoC 2019, as either a student or mentor, please contact the GSoC admins at social@dlang.org. Include "GSoC 2019" in the email subject line.<br />
<br />
<br />
== Timeline ==<br />
The timeline for GSoC 2019 [https://developers.google.com/open-source/gsoc/timeline can be found here].<br />
<br />
== Ideas ==<br />
<br />
The D ecosystem is always in need of improvement through the revision of existing projects and the creation of new ones. The core projects like the([http://dlang.org/phobos/index.html standard library]) and the compilers ([[Compilers]]) are always in need of attention. Other important areas include GUI support, integration with other languages, improving and enhancing the tooling, IDE and editor support, and more.<br />
<br />
Please add your project ideas to the list below, being as descriptive as you can in the summaries. Students interested in participating can use the ideas listed here as jumping off points, so the more information you provide, the easier it will be for them to get started. If your idea is particularly complex or nuanced, consider leaving contact information so that interested parties may follow up.<br />
<br />
=== DUB: D's package manager ===<br />
----<br />
<br />
[https://github.com/dlang/dub DUB] - D's package manager - is one of the central infrastructure tools in the D world as a convenient build and package management tool for the D community.<br />
With D gaining more and more popularity, it's also a key tool to guarantee D's further adoption.<br />
Thus there are many great ideas to improve DUB:<br />
<br />
* [https://github.com/dlang/dub/wiki/DEP6 git support]<br />
* [https://github.com/dlang/dub/wiki/DEP2 separate compilation and caching]<br />
* [https://github.com/dlang/dub/wiki/DEP3 extensibility through DUB]<br />
* [https://github.com/dlang/dub/wiki/DEP4 control flow directives]<br />
* [https://github.com/dlang/dub/wiki/DEP5 build system support for C/C++]<br />
* support dub install for distributions<br />
* support building a {snap, Debian, Arch, ...} package out of DUB package<br />
<br />
Any of these listed DUB Enhancement Proposals (DEPs) could form the basis of a GSoC Project.<br />
<br />
'''Update:''' A very detailed list of ideas for improving Dub can be found in this [https://forum.dlang.org/post/eftttpylxanvxjhoigqu@forum.dlang.org Forum thread].<br />
<br />
Proposed Project Mentors: Sönke Ludwig, Sebastian Wilzbach<br />
<br />
=== Header generation for C/C++ ===<br />
----<br />
<br />
With the ever-improving integration between DMD and C/C++, quite a bit of tooling has been developed to generate D header files from C or C++ projects (e.g. [https://github.com/jacob-carlborg/dstep DStep] or [https://github.com/atilaneves/dpp DPP]).<br />
However, for many projects the majority of the source code is now written in D and the reverse step is needed: an automatic way to generate C and C++ headers from a D project.<br />
This would be very valuable for D as it could motivate inter-language projects that typically go C++-fist-with-a-D-binding to work the other way.<br />
<br />
Starting points:<br />
* [https://forum.dlang.org/post/mailman.7146.1551050711.29801.digitalmars-d@puremagic.com NG-Thread: "Make DMD emit C++ .h files same as .di files"]<br />
* [https://github.com/dlang/dmd/pull/8591 Existing specialized work for the DMD codebase]<br />
* [https://gitlab.com/mihails.strasuns/dtoh Existing WIP work for generating C headers]<br />
* [https://github.com/thewilsonator/dtoh Existing WIP work for generating C++ headers, using DMD as a library]<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Language Server Protocol for D ===<br />
----<br />
<br />
The [https://microsoft.github.io/language-server-protocol Language Server Protocol] (LSP) defines the protocol used between an editor or IDE and a language server that provides language features like auto complete, go to definition, find all references etc. Adding features like auto complete, go to definition, or documentation on hover for a programming language takes significant effort. Traditionally this work had to be repeated for each development tool, as each tool provides different APIs for implementing the same feature (see the list of [[Editors]] and [[IDEs]]). Additionally as the existing tools only use `libdparse` (used in [https://github.com/d-language-server/dls DLS] and [https://github.com/dlang-community/DCD DCD]), they lack the ability to perform semantic analysis on the AST and can't evaluate `mixin`'s nor D's very powerful Compile-Time Function Evaluation (CTFE).<br />
A Language Server is meant to provide the language-specific smarts and communicate with development tools over a protocol that enables inter-process communication.<br />
The idea behind the Language Server Protocol (LSP) is to standardize the protocol for how such servers and development tools communicate. This way, single D Language Server can be re-used in multiple development tools, which in turn can support multiple languages with minimal effort.<br />
<br />
Recent development in the DMD compiler [https://dlang.org/blog/2017/08/01/a-dub-case-study-compiling-dmd-as-a-library made it available as a DUB library]. This mean that the compiler itself can be re-used and third-party tools don't have to re-implement e.g. D's complex CTFE. This project is about using the DMD compiler as a library to implement a Language Server for D.<br />
<br />
Proposed Project Mentors: Jacob Carlborg, Sebastian Wilzbach<br />
<br />
How to start:<br />
* [https://github.com/dlang/dmd/blob/master/test/dub_package/frontend.d Simple example] of using DMD as a library<br />
* [https://github.com/jacob-carlborg/dlp More complex use cases]<br />
<br />
=== Mir Project ===<br />
----<br />
<br />
The Mir project is developing numerical libraries for the upcoming numeric packages of<br />
the Dlang standard library. The are numerous projects an interested student could pursue:<br />
<br />
* University project. Your GSoC project can be combined with your scientific research.<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://julialang.org Julia] integration<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://www.numpy.org NumPy] integration<br />
* General purpose BetterC libraries<br />
** I/O betterC Dlang library<br />
** Async betterC Dlang library<br />
** String and format betterC library<br />
* mir-cpuid <br />
** ARM support<br />
** Advanced OS specific support<br />
* mir-glas<br />
** BLAS Level 2 subprograms<br />
** One BLAS Level 3 subprogram. It is OK to do only one! But it must be faster then OpenBLAS, and not slower then Intel MKL.<br />
** Multithreading support for BLAS Level 2<br />
** Multithreading support for BLAS Level 3<br />
<br />
You can get more details on projects related to Mir [https://github.com/libmir/mir/wiki/GSoC-2019 here].<br />
<br />
Its Good To Know:<br />
<br />
To work on the Mir you should be proficient with one of:<br />
<br />
* C<br />
* C++<br />
* LLVM<br />
* Fortran<br />
* Experience with D is not essential.<br />
<br />
To work on the Mir project requires a responsible and self-motivated student.<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
<br />
=== LDC (LLVM-based D compiler) ===<br />
----<br />
<br />
The LDC project provides a portable D programming language compiler with modern optimization and code generation capabilities.<br />
The ever-improving feature set of LLVM opens up many opportunities with D.<br />
A few ideas for a potential GSoC project are:<br />
<br />
* exploiting immutability of variables (notably of structs such as string slices)<br />
* devirtualization<br />
* improve debuginfo<br />
* ASan with GC and multithreading<br />
* function multiversioning<br />
<br />
You might also want to browse the [https://github.com/ldc-developers/ldc/issues LDC's issue tracker] for more ideas.<br />
<br />
Proposed Project Mentors: TBA (LDC dev team)<br />
<br />
=== iOS support in LDC ===<br />
----<br />
<br />
Mobile is becoming, or rather is already, the biggest software platform. While LDC already supports the Android platform there's no official support for iOS. The project would consist of adding support for the iOS platform to the LDC compiler, the D runtime library and the D standard library. The goal would be to get support for this platform upstreamed to the LDC main project.<br />
<br />
A lot of existing work has been done but has never been completed or upstreamed: https://github.com/smolt/ldc-iphone-dev.<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Baremetal D runtime ===<br />
----<br />
<br />
Many features in the standard library are implemented by using the C runtime. Reusing the rock-solid work of generations of programmers makes a lot of sense as just outputting via `printf` can be very [https://github.molgen.mpg.de/git-mirror/glibc/blob/20003c49884422da7ffbc459cdeee768a6fee07b/stdio-common/vfprintf.c complex]. However, for embedded environments a programmer often only has a tiny amount of storage available or might not even have a C runtime available for his target.<br />
The idea of this project is to implement the most basic parts of the runtime natively in D, s.t. bare metals programmers can just compile for their target. Implementing features natively in D also means that other targets like [https://wiki.dlang.org/Generating_WebAssembly_with_LDC Web Assembly] will automatically be able to use them too. Another advantage of implementing these basic building blocks in D is that one can take advantage of D's Compile-Time Function Evaluation (CTFE) and optimize the methods even further at compile-time.<br />
<br />
Project focus:<br />
- Implement `memcpy`, `memcmp` and similar in D (with similar performance to C)<br />
- Implement `malloc` and similar in D (with similar performance to C)<br />
<br />
Starting points:<br />
* [https://theartofmachinery.com/2017/02/28/bare_metal_d.html D for Bare Metal Programming (tutorial series]<br />
* [https://github.com/JinShil/stm32f42_discovery_demo Simple demonstration of using D to bare-metal program an STM32F29I Discovery board]<br />
* [https://github.com/JinShil/memcpyD memcpyD]<br />
* [https://wiki.dlang.org/Programming_in_D_tutorial_on_Embedded_Linux_ARM_devices Programming in D tutorial on Embedded Linux ARM devices]<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== GDC (GCC-based D compiler) ===<br />
----<br />
<br />
The GDC compiles uses GCC as a backend to utilize this powerful backend.<br />
Recently, GDC [https://www.phoronix.com/scan.php?page=news_item&px=GCC-9-Merges-D-Language has been accepted as GCC frontend] and will be part of the GCC9 release.<br />
However, GDC still has lots of tasks that the potential students could work on.<br />
<br />
One idea would be to improve GDC's support for betterC by adding a compiler interface to allow using a modular runtime. Right now when GDC uses some feature (TypeInfo, asserts, unittests), it just emits a call to an `extern(C)` function. A much better approach would be to have a defined D API (e.g. `rt.assert.onAssertFailure(...)`). The compiler can then check if it finds `rt.assert.onFailure`. If not, the compiler can the simply disable that feature and provide nice error messages. This could be done for TypeInfo, Exceptions, Asserts, Switch errors, unit test support, etc. In the end, the vision would be to be able to ship a compiler completely without runtime. This compiler should be able to produce bare bones code without any further configuration. Then add a dependency to `drt:core` in the dub configuration to get class support, `dr:exception` for exceptions, etc. The compiler could then automatically detect availability of these features. (Of course manually adding -I paths would work in exactly the same way).<br />
<br />
For more ideas, interested students are encouraged to browse [https://bugzilla.gdcproject.org/describecomponents.cgi GDC's issue list] or getting [https://wiki.dlang.org/GDC in touch with the GDC development team].<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== C++ interops ===<br />
----<br />
<br />
There are many experiments in transparently interfacing D with C++, notably:<br />
<br />
* [https://github.com/atilaneves/dpp dpp] by Atila Neves, that parses and translates headers on the fly<br />
* [https://wiki.dlang.org/Calypso Calypso] by Elie Morisse that bridges the two languages at the AST level.<br />
* [https://github.com/jacob-carlborg/dstep DStep] by Jacob Carlborg, automatically generates bindings for C and Objective-C code. The task would be to add support for C++.<br />
<br />
There is also a lot of work in bringing STL types to the DRuntime (see https://github.com/dlang/druntime/pull/2310).<br />
<br />
D would greatly benefit by seamlessly integrating the C++ ecosystem. There are many ways to accomplish this goal and it should be discussed with the community.<br />
Andrei already commented on the importance of a tool like Calypso in this thread:<br />
https://forum.dlang.org/post/m9s4cd$2s1v$1@digitalmars.com<br />
<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Persistent Data Structures ===<br />
----<br />
<br />
There is an ongoing effort to reduce the reliance of Phobos on the GC but the GC is not going anywhere given that it has many advantages over manual memory management.<br />
The community would greatly benefit from a wide range of functional programming techniques that have their roots in the usage of immutable and persistent data structures that heavily rely on the GC.<br />
Persistent Data Structures are heavily used in [http://docs.scala-lang.org/overviews/collections/overview.html Scala] and [http://clojure.org/reference/data_structures Clojure] and they allow the programmer to reason about interactivity, sharing and parallelism.<br />
<br />
The focus of this project would be to create a varying range of persistent data structures (sets, vectors, maps, strings, trees, lists, etc...) that respects the range interface and the semantics of Phobos.<br />
<br />
Related Work:<br />
<br />
* https://www.cs.cmu.edu/~rwh/theses/okasaki.pdf <br />
* https://www.worldcat.org/title/rrb-trees-efficient-immutable-vectors/oclc/820379112<br />
* https://www.youtube.com/watch?v=7BFF50BHPPo<br />
* https://www.infoq.com/presentations/Value-Values<br />
* https://github.com/arximboldi/immer<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== std.benchmark ===<br />
----<br />
<br />
Ideally every function in Phobos should have its own benchmark suite which is run for every PR to check for performance improvements or regressions.<br />
* Additionally support for the new big O annotation [https://github.com/dlang/phobos/pull/4965 here] would be nice. <br />
* Existing work: [https://github.com/dlang/phobos/pull/794 here], and [https://github.com/dlang/phobos/pull/3695 here], and [https://github.com/atilaneves/unit-threaded/tree/master/source/unit_threaded/randomized here (QuickText-like testing)]. <br />
<br />
Proposed Project Mentors: Sebastian Wilzbach<br />
<br />
=== Jupyter notebook D kernel ===<br />
----<br />
<br />
The Jupyter Notebook is an open-source web application that allows you to create and share documents that contain live code, equations, visualizations and narrative text. Uses include: data cleaning and transformation, numerical simulation, statistical modeling, data visualization, machine learning, and much more.<br />
Jupyter notebooks are extremely popular among data scientist as they allow interactive progress and exploring a solution step by step.<br />
With a bit of work, a statically compiled language can be used in an interactive notebook e.g. [Cling https://blog.jupyter.org/interactive-workflows-for-c-with-jupyter-fe9b54227d92] and Go with<br />
[https://github.com/gopherdata/gophernotes gophernotes].<br />
Apart from being useful to data scientist, a Jupyter D kernel would allow an intuitive exploration of the language for newcomers and people starting with new libraries.<br />
<br />
Existing works:<br />
- [https://github.com/dlang-community/drepl drepl] - simple REPL for D<br />
- [https://github.com/DlangScience/PydMagic PydMagic] - allows to write PyD extension in a notebook.<br />
<br />
Proposed Project Mentor: Sebastian Wilzbach<br />
<br />
<br />
=== Tabular data container (data frames) ===<br />
----<br />
<br />
Pandas, R and Julia have made [https://github.com/mobileink/data.frame/wiki/What-is-a-Data-Frame%3F data frames] very popular.<br />
As D is getting more interest from data scientist (e.g. [https://github.com/eBay/tsv-utils eBay] or [http://tech.adroll.com/blog/data/2014/11/17/d-is-for-data-science.html AdRoll]) it would be very beneficial to use one language for the entire data analysis pipeline - especially considering that D (in contrast to popular languages like Python, R or Julia) - is compiled to native machine code and gets optimized by the sophisticated LLVM backend.<br />
<br />
Minimum requirements:<br />
<br />
* conversion to and from CSV<br />
* multi-indexing<br />
* column binary operations, e.g. `column1 * column2`<br />
* group-by on an arbitrary number of columns<br />
* column/group aggregations<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
=== Graphics library for resource constrained embedded systems ===<br />
----<br />
<br />
Create a 2D rasterizer, rich drawing primitives, and 2D graphics library suitable for resource constrained embedded systems (e.g. ARM Cortex-M) to be used in industrial controls, home appliances, medical devices, consumer electronics, and IoT just to name a few. The end goal would be something similar to [https://www.segger.com/products/user-interface/emwin Segger's emWin]. The library would be used to drive LDCs similar to https://www.adafruit.com/product/3396<br />
Requirements:<br />
<br />
* Hardware agnostic; should simply render to a frame buffer<br />
* No dependencies (No Phobos, no C standard library, and no official D runtime).<br />
* Consider using -betterC, but a custom minimal D runtime is also a viable option<br />
<br />
Related work:<br />
<br />
* https://github.com/TurkeyMan/color<br />
* https://bitbucket.org/timosi/minlibd<br />
* https://github.com/JinShil/stm32f42_discovery_demo<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
<br />
=== Functional Reactive Programming ===<br />
----<br />
<br />
Functional reactive programming (FRP) is a programming paradigm for reactive programming (asynchronous dataflow programming) using the building blocks of functional programming (e.g. map, reduce, filter).<br />
The best-known FRP API is the [http://reactivex.io ReactiveX API] whose implementation in D this project would focus.<br />
Note that this project is closely related to the std.eventloop project.<br />
<br />
Proposed Project Mentors: Petar Kirov<br />
<br />
=== BetterC runtime ===<br />
----<br />
<br />
[https://dlang.org/blog/2017/08/23/d-as-a-better-c BetterC] is a subset of D which limits the feature set of D, s.t. it's even easier to migrate from C as no Garbage Collection (GC) is used anymore.<br />
While, this feature is popular for some projects, `-betterC` today means still means a severe restriction in the amount of D features available (see the [https://dlang.org/spec/betterc.html BetterC specification]).<br />
This project is about making more parts of the D runtime betterC-compatible. For example, classes could be allocated with reference-counting instead of using the GC. <br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Java Native Interface (JNI) library ===<br />
----<br />
<br />
D's features allow to write cut down the boilerplate of wrapper drastically.<br />
See the recently published [https://dlang.org/blog/2017/05/31/project-highlight-excel-d excel-d] for a comparison between the C++ implementation for registering a function in Excel and the D way.<br />
Similarly a solid JNI library would open up new many new use cases and allow the Java community to profit even easier from D's features.<br />
<br />
Previous work: [https://github.com/Monnoroch/DJni DJni], [https://github.com/jamesmahler/djvm djvm]<br />
Proposed Project Mentor: TBA<br />
<br />
=== ORM mapping ===<br />
----<br />
<br />
SQLAlchemy is an object-relational mapper which provides "a full suite of well known enterprise-level persistence patterns, designed for efficient and high-performing database access, adapted into a simple and Pythonic domain language".<br />
While there has been some attempts in implementing an ORM in D - none of these got close to the simplicity and usability of SQLAlchemy (see [[Database Libraries]]).<br />
However, with D's CTFE queries could - like std.format's strings - already be checked at compile-time and optimizations could be be applied to the parser and serializer.<br />
<br />
This project would be based on the [http://dconf.org/2016/talks/smith.html proposed std.database abstraction] and focus on creating a general-purpose ORM on top of it.<br />
<br />
See also: Martin Nowak's DConf16 talk about [http://dconf.org/2016/talks/nowak.html Object-Relational Mapper] <br />
<br />
Existing work:<br />
* [https://github.com/huntlabs/hunt-entity hunt-entity]<br />
<br />
Proposed Project Mentor: TBA<br />
<br />
=== std.serialization ===<br />
----<br />
<br />
D has numerous serialization frameworks. From `std.json` to `std.csv` over [https://github.com/dcarp/protobuf-d protobuf] to [https://github.com/vibe-d/vibe.d Vibe.d's] own serialization framework.<br />
The goal of this project is to implement a flexible (de)serialization framework that can be used as a standardized building block for various serialization related things.<br />
One important goal would be to define how a user-specified type has to work in order to make it serializable, as well as to allow the end-user (e.g. a user of std.json) to change the serialization of third-party types that cannot themselves be modified (i.e. let them define their own policies).<br />
<br />
Starting points:<br />
<br />
* [http://vibed.org/api/vibe.data.serialization Vibe.d's serialization framework]<br />
* [https://github.com/jacob-carlborg/orange Orange framework]<br />
<br />
Proposed Project Mentor: Jacob Carlborg<br />
<br />
=== Propose your own project ===<br />
----<br />
<br />
Do you have your own vision for improving D's success? That's great!<br />
Are you convinced that your project helps to advance open source technology related to the D programming language?<br />
Then simply get in touch with D's GSoC org admin (social (at) dlang (dot) org) and potential mentors for your project.<br />
<br />
If you are searching for inspiration, you might want to have a look at the [[DIPs| list of D Improvement Proposals (DIPs)]], the [[Vision/2018H1|high-level vision for this semester]] or the [[Wish_list|wish list]].<br />
<br />
<br />
== Ideas From Previous Years ==<br />
<br />
These GSoC idea pages from the past years which might provide more inspiration for proposing your own idea:<br />
<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2018 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2017 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2016_Ideas GSoC 2016 Ideas] (accepted, 4 slots)<br />
* [http://wiki.dlang.org/GSOC_2015_Ideas GSoC 2015 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2014_Ideas GSoC 2014 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2013_Ideas GSoC 2013 Ideas] (not accepted)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2012_Ideas GSoC 2012 Ideas] (accepted, 3 slots)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2011_Ideas GSoC 2011 Ideas]<br />
<br />
You may also want to have a look at [https://wiki.dlang.org/SAOC_2018_ideas the Symmetry Autumn of Code ideas page].<br />
<br />
== Tips for students ==<br />
<br />
Please see the "gsoc" articles at our [https://dlang.org/blog/category/gsoc/ official blog] which contain experience reports from students of previous years.<br />
<br />
Daniel Pocock has [http://danielpocock.com/getting-selected-for-google-summer-of-code-2015 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.<br />
<br />
<br />
== Tips for Mentors ==<br />
<br />
If you are interested in mentoring, please check out the [http://en.flossmanuals.net/GSoCMentoring/ organization administrator and mentor] manual for more information.<br />
<br />
[[Category:GSOC]]</div>Greenifyhttps://wiki.dlang.org/?title=GSOC_2019_Ideas&diff=9567GSOC 2019 Ideas2019-03-03T04:34:14Z<p>Greenify: /* LDC (LLVM-based D compiler) */ add LDC dev team as mentors</p>
<hr />
<div>This is the D Language Foundation's Google Summer of Code 2019 page.<br />
<br />
If you are interested in working on a D project as part of GSoC 2019, as either a student or mentor, please contact the GSoC admins at social@dlang.org. Include "GSoC 2019" in the email subject line.<br />
<br />
<br />
== Timeline ==<br />
The timeline for GSoC 2019 [https://developers.google.com/open-source/gsoc/timeline can be found here].<br />
<br />
== Ideas ==<br />
<br />
The D ecosystem is always in need of improvement through the revision of existing projects and the creation of new ones. The core projects like the([http://dlang.org/phobos/index.html standard library]) and the compilers ([[Compilers]]) are always in need of attention. Other important areas include GUI support, integration with other languages, improving and enhancing the tooling, IDE and editor support, and more.<br />
<br />
Please add your project ideas to the list below, being as descriptive as you can in the summaries. Students interested in participating can use the ideas listed here as jumping off points, so the more information you provide, the easier it will be for them to get started. If your idea is particularly complex or nuanced, consider leaving contact information so that interested parties may follow up.<br />
<br />
=== DUB: D's package manager ===<br />
----<br />
<br />
[https://github.com/dlang/dub DUB] - D's package manager - is one of the central infrastructure tools in the D world as a convenient build and package management tool for the D community.<br />
With D gaining more and more popularity, it's also a key tool to guarantee D's further adoption.<br />
Thus there are many great ideas to improve DUB:<br />
<br />
* [https://github.com/dlang/dub/wiki/DEP6 git support]<br />
* [https://github.com/dlang/dub/wiki/DEP2 separate compilation and caching]<br />
* [https://github.com/dlang/dub/wiki/DEP3 extensibility through DUB]<br />
* [https://github.com/dlang/dub/wiki/DEP4 control flow directives]<br />
* [https://github.com/dlang/dub/wiki/DEP5 build system support for C/C++]<br />
* support dub install for distributions<br />
* support building a {snap, Debian, Arch, ...} package out of DUB package<br />
<br />
Any of these listed DUB Enhancement Proposals (DEPs) could form the basis of a GSoC Project.<br />
<br />
'''Update:''' A very detailed list of ideas for improving Dub can be found in this [https://forum.dlang.org/post/eftttpylxanvxjhoigqu@forum.dlang.org Forum thread].<br />
<br />
Proposed Project Mentors: Sönke Ludwig, Sebastian Wilzbach<br />
<br />
=== Header generation for C/C++ ===<br />
----<br />
<br />
With the ever-improving integration between DMD and C/C++, quite a bit of tooling has been developed to generate D header files from C or C++ projects (e.g. [https://github.com/jacob-carlborg/dstep DStep] or [https://github.com/atilaneves/dpp DPP]).<br />
However, for many projects the majority of the source code is now written in D and the reverse step is needed: an automatic way to generate C and C++ headers from a D project.<br />
This would be very valuable for D as it could motivate inter-language projects that typically go C++-fist-with-a-D-binding to work the other way.<br />
<br />
Starting points:<br />
* [https://forum.dlang.org/post/mailman.7146.1551050711.29801.digitalmars-d@puremagic.com NG-Thread: "Make DMD emit C++ .h files same as .di files"]<br />
* [https://github.com/dlang/dmd/pull/8591 Existing specialized work for the DMD codebase]<br />
* [https://gitlab.com/mihails.strasuns/dtoh Existing WIP work for generating C headers]<br />
* [https://github.com/thewilsonator/dtoh Existing WIP work for generating C++ headers, using DMD as a library]<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Language Server Protocol for D ===<br />
----<br />
<br />
The [https://microsoft.github.io/language-server-protocol Language Server Protocol] (LSP) defines the protocol used between an editor or IDE and a language server that provides language features like auto complete, go to definition, find all references etc. Adding features like auto complete, go to definition, or documentation on hover for a programming language takes significant effort. Traditionally this work had to be repeated for each development tool, as each tool provides different APIs for implementing the same feature (see the list of [[Editors]] and [[IDEs]]). Additionally as the existing tools only use `libdparse` (used in [https://github.com/d-language-server/dls DLS] and [https://github.com/dlang-community/DCD DCD]), they lack the ability to perform semantic analysis on the AST and can't evaluate `mixin`'s nor D's very powerful Compile-Time Function Evaluation (CTFE).<br />
A Language Server is meant to provide the language-specific smarts and communicate with development tools over a protocol that enables inter-process communication.<br />
The idea behind the Language Server Protocol (LSP) is to standardize the protocol for how such servers and development tools communicate. This way, single D Language Server can be re-used in multiple development tools, which in turn can support multiple languages with minimal effort.<br />
<br />
Recent development in the DMD compiler [https://dlang.org/blog/2017/08/01/a-dub-case-study-compiling-dmd-as-a-library made it available as a DUB library]. This mean that the compiler itself can be re-used and third-party tools don't have to re-implement e.g. D's complex CTFE. This project is about using the DMD compiler as a library to implement a Language Server for D.<br />
<br />
Proposed Project Mentors: Jacob Carlborg, Sebastian Wilzbach<br />
<br />
How to start:<br />
* [https://github.com/dlang/dmd/blob/master/test/dub_package/frontend.d Simple example] of using DMD as a library<br />
* [https://github.com/jacob-carlborg/dlp More complex use cases]<br />
<br />
=== Mir Project ===<br />
----<br />
<br />
The Mir project is developing numerical libraries for the upcoming numeric packages of<br />
the Dlang standard library. The are numerous projects an interested student could pursue:<br />
<br />
* University project. Your GSoC project can be combined with your scientific research.<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://julialang.org Julia] integration<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://www.numpy.org NumPy] integration<br />
* General purpose BetterC libraries<br />
** I/O betterC Dlang library<br />
** Async betterC Dlang library<br />
** String and format betterC library<br />
* mir-cpuid <br />
** ARM support<br />
** Advanced OS specific support<br />
* mir-glas<br />
** BLAS Level 2 subprograms<br />
** One BLAS Level 3 subprogram. It is OK to do only one! But it must be faster then OpenBLAS, and not slower then Intel MKL.<br />
** Multithreading support for BLAS Level 2<br />
** Multithreading support for BLAS Level 3<br />
<br />
You can get more details on projects related to Mir [https://github.com/libmir/mir/wiki/GSoC-2019 here].<br />
<br />
Its Good To Know:<br />
<br />
To work on the Mir you should be proficient with one of:<br />
<br />
* C<br />
* C++<br />
* LLVM<br />
* Fortran<br />
* Experience with D is not essential.<br />
<br />
To work on the Mir project requires a responsible and self-motivated student.<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
<br />
=== LDC (LLVM-based D compiler) ===<br />
----<br />
<br />
The LDC project provides a portable D programming language compiler with modern optimization and code generation capabilities.<br />
The ever-improving feature set of LLVM opens up many opportunities with D.<br />
A few ideas for a potential GSoC project are:<br />
<br />
* exploiting immutability of variables (notably of structs such as string slices)<br />
* devirtualization<br />
* improve debuginfo<br />
* ASan with GC and multithreading<br />
* function multiversioning<br />
<br />
You might also want to browse the [https://github.com/ldc-developers/ldc/issues LDC's issue tracker] for more ideas.<br />
<br />
Proposed Project Mentors: TBA (LDC dev team)<br />
<br />
=== iOS support in LDC ===<br />
----<br />
<br />
Mobile is becoming, or rather is already, the biggest software platform. While LDC already supports the Android platform there's no official support for iOS. The project would consist of adding support for the iOS platform to the LDC compiler, the D runtime library and the D standard library. The goal would be to get support for this platform upstreamed to the LDC main project.<br />
<br />
A lot of existing work has been done but has never been completed or upstreamed: https://github.com/smolt/ldc-iphone-dev.<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Baremetal D runtime ===<br />
----<br />
<br />
Many features in the standard library are implemented by using the C runtime. Reusing the rock-solid work of generations of programmers makes a lot of sense as just outputting via `printf` can be very [https://github.molgen.mpg.de/git-mirror/glibc/blob/20003c49884422da7ffbc459cdeee768a6fee07b/stdio-common/vfprintf.c complex]. However, for embedded environments a programmer often only has a tiny amount of storage available or might not even have a C runtime available for his target.<br />
The idea of this project is to implement the most basic parts of the runtime natively in D, s.t. bare metals programmers can just compile for their target. Implementing features natively in D also means that other targets like [https://wiki.dlang.org/Generating_WebAssembly_with_LDC Web Assembly] will automatically be able to use them too. Another advantage of implementing these basic building blocks in D is that one can take advantage of D's Compile-Time Function Evaluation (CTFE) and optimize the methods even further at compile-time.<br />
<br />
Project focus:<br />
- Implement `memcpy`, `memcmp` and similar in D (with similar performance to C)<br />
- Implement `malloc` and similar in D (with similar performance to C)<br />
<br />
Starting points:<br />
* [https://theartofmachinery.com/2017/02/28/bare_metal_d.html D for Bare Metal Programming (tutorial series]<br />
* [https://github.com/JinShil/stm32f42_discovery_demo Simple demonstration of using D to bare-metal program an STM32F29I Discovery board]<br />
* [https://github.com/JinShil/memcpyD memcpyD]<br />
* [https://wiki.dlang.org/Programming_in_D_tutorial_on_Embedded_Linux_ARM_devices Programming in D tutorial on Embedded Linux ARM devices]<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
<br />
=== GDC (GCC-based D compiler) ===<br />
----<br />
<br />
The GDC compiles uses GCC as a backend to utilize this powerful backend.<br />
Recently, GDC [https://www.phoronix.com/scan.php?page=news_item&px=GCC-9-Merges-D-Language has been accepted as GCC frontend] and will be part of the GCC9 release.<br />
However, GDC still has lots of tasks that the potential students could work on.<br />
<br />
One idea would be to improve GDC's support for betterC by adding a compiler interface to allow using a modular runtime. Right now when GDC uses some feature (TypeInfo, asserts, unittests), it just emits a call to an `extern(C)` function. A much better approach would be to have a defined D API (e.g. `rt.assert.onAssertFailure(...)`). The compiler can then check if it finds `rt.assert.onFailure`. If not, the compiler can the simply disable that feature and provide nice error messages. This could be done for TypeInfo, Exceptions, Asserts, Switch errors, unit test support, etc. In the end, the vision would be to be able to ship a compiler completely without runtime. This compiler should be able to produce bare bones code without any further configuration. Then add a dependency to `drt:core` in the dub configuration to get class support, `dr:exception` for exceptions, etc. The compiler could then automatically detect availability of these features. (Of course manually adding -I paths would work in exactly the same way).<br />
<br />
For more ideas, interested students are encouraged to browse [https://bugzilla.gdcproject.org/describecomponents.cgi GDC's issue list] or getting [https://wiki.dlang.org/GDC in touch with the GDC development team].<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== C++ interops ===<br />
----<br />
<br />
There are many experiments in transparently interfacing D with C++, notably:<br />
<br />
* [https://github.com/atilaneves/dpp dpp] by Atila Neves, that parses and translates headers on the fly<br />
* [https://wiki.dlang.org/Calypso Calypso] by Elie Morisse that bridges the two languages at the AST level.<br />
* [https://github.com/jacob-carlborg/dstep DStep] by Jacob Carlborg, automatically generates bindings for C and Objective-C code. The task would be to add support for C++.<br />
<br />
There is also a lot of work in bringing STL types to the DRuntime (see https://github.com/dlang/druntime/pull/2310).<br />
<br />
D would greatly benefit by seamlessly integrating the C++ ecosystem. There are many ways to accomplish this goal and it should be discussed with the community.<br />
Andrei already commented on the importance of a tool like Calypso in this thread:<br />
https://forum.dlang.org/post/m9s4cd$2s1v$1@digitalmars.com<br />
<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Persistent Data Structures ===<br />
----<br />
<br />
There is an ongoing effort to reduce the reliance of Phobos on the GC but the GC is not going anywhere given that it has many advantages over manual memory management.<br />
The community would greatly benefit from a wide range of functional programming techniques that have their roots in the usage of immutable and persistent data structures that heavily rely on the GC.<br />
Persistent Data Structures are heavily used in [http://docs.scala-lang.org/overviews/collections/overview.html Scala] and [http://clojure.org/reference/data_structures Clojure] and they allow the programmer to reason about interactivity, sharing and parallelism.<br />
<br />
The focus of this project would be to create a varying range of persistent data structures (sets, vectors, maps, strings, trees, lists, etc...) that respects the range interface and the semantics of Phobos.<br />
<br />
Related Work:<br />
<br />
* https://www.cs.cmu.edu/~rwh/theses/okasaki.pdf <br />
* https://www.worldcat.org/title/rrb-trees-efficient-immutable-vectors/oclc/820379112<br />
* https://www.youtube.com/watch?v=7BFF50BHPPo<br />
* https://www.infoq.com/presentations/Value-Values<br />
* https://github.com/arximboldi/immer<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== std.benchmark ===<br />
----<br />
<br />
Ideally every function in Phobos should have its own benchmark suite which is run for every PR to check for performance improvements or regressions.<br />
* Additionally support for the new big O annotation [https://github.com/dlang/phobos/pull/4965 here] would be nice. <br />
* Existing work: [https://github.com/dlang/phobos/pull/794 here], and [https://github.com/dlang/phobos/pull/3695 here], and [https://github.com/atilaneves/unit-threaded/tree/master/source/unit_threaded/randomized here (QuickText-like testing)]. <br />
<br />
Proposed Project Mentors: Sebastian Wilzbach<br />
<br />
=== Jupyter notebook D kernel ===<br />
----<br />
<br />
The Jupyter Notebook is an open-source web application that allows you to create and share documents that contain live code, equations, visualizations and narrative text. Uses include: data cleaning and transformation, numerical simulation, statistical modeling, data visualization, machine learning, and much more.<br />
Jupyter notebooks are extremely popular among data scientist as they allow interactive progress and exploring a solution step by step.<br />
With a bit of work, a statically compiled language can be used in an interactive notebook e.g. [Cling https://blog.jupyter.org/interactive-workflows-for-c-with-jupyter-fe9b54227d92] and Go with<br />
[https://github.com/gopherdata/gophernotes gophernotes].<br />
Apart from being useful to data scientist, a Jupyter D kernel would allow an intuitive exploration of the language for newcomers and people starting with new libraries.<br />
<br />
Existing works:<br />
- [https://github.com/dlang-community/drepl drepl] - simple REPL for D<br />
- [https://github.com/DlangScience/PydMagic PydMagic] - allows to write PyD extension in a notebook.<br />
<br />
Proposed Project Mentor: Sebastian Wilzbach<br />
<br />
<br />
=== Tabular data container (data frames) ===<br />
----<br />
<br />
Pandas, R and Julia have made [https://github.com/mobileink/data.frame/wiki/What-is-a-Data-Frame%3F data frames] very popular.<br />
As D is getting more interest from data scientist (e.g. [https://github.com/eBay/tsv-utils eBay] or [http://tech.adroll.com/blog/data/2014/11/17/d-is-for-data-science.html AdRoll]) it would be very beneficial to use one language for the entire data analysis pipeline - especially considering that D (in contrast to popular languages like Python, R or Julia) - is compiled to native machine code and gets optimized by the sophisticated LLVM backend.<br />
<br />
Minimum requirements:<br />
<br />
* conversion to and from CSV<br />
* multi-indexing<br />
* column binary operations, e.g. `column1 * column2`<br />
* group-by on an arbitrary number of columns<br />
* column/group aggregations<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
=== Graphics library for resource constrained embedded systems ===<br />
----<br />
<br />
Create a 2D rasterizer, rich drawing primitives, and 2D graphics library suitable for resource constrained embedded systems (e.g. ARM Cortex-M) to be used in industrial controls, home appliances, medical devices, consumer electronics, and IoT just to name a few. The end goal would be something similar to [https://www.segger.com/products/user-interface/emwin Segger's emWin]. The library would be used to drive LDCs similar to https://www.adafruit.com/product/3396<br />
Requirements:<br />
<br />
* Hardware agnostic; should simply render to a frame buffer<br />
* No dependencies (No Phobos, no C standard library, and no official D runtime).<br />
* Consider using -betterC, but a custom minimal D runtime is also a viable option<br />
<br />
Related work:<br />
<br />
* https://github.com/TurkeyMan/color<br />
* https://bitbucket.org/timosi/minlibd<br />
* https://github.com/JinShil/stm32f42_discovery_demo<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
<br />
=== Functional Reactive Programming ===<br />
----<br />
<br />
Functional reactive programming (FRP) is a programming paradigm for reactive programming (asynchronous dataflow programming) using the building blocks of functional programming (e.g. map, reduce, filter).<br />
The best-known FRP API is the [http://reactivex.io ReactiveX API] whose implementation in D this project would focus.<br />
Note that this project is closely related to the std.eventloop project.<br />
<br />
Proposed Project Mentors: Petar Kirov<br />
<br />
=== BetterC runtime ===<br />
----<br />
<br />
[https://dlang.org/blog/2017/08/23/d-as-a-better-c BetterC] is a subset of D which limits the feature set of D, s.t. it's even easier to migrate from C as no Garbage Collection (GC) is used anymore.<br />
While, this feature is popular for some projects, `-betterC` today means still means a severe restriction in the amount of D features available (see the [https://dlang.org/spec/betterc.html BetterC specification]).<br />
This project is about making more parts of the D runtime betterC-compatible. For example, classes could be allocated with reference-counting instead of using the GC. <br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Java Native Interface (JNI) library ===<br />
----<br />
<br />
D's features allow to write cut down the boilerplate of wrapper drastically.<br />
See the recently published [https://dlang.org/blog/2017/05/31/project-highlight-excel-d excel-d] for a comparison between the C++ implementation for registering a function in Excel and the D way.<br />
Similarly a solid JNI library would open up new many new use cases and allow the Java community to profit even easier from D's features.<br />
<br />
Previous work: [https://github.com/Monnoroch/DJni DJni], [https://github.com/jamesmahler/djvm djvm]<br />
Proposed Project Mentor: TBA<br />
<br />
=== ORM mapping ===<br />
----<br />
<br />
SQLAlchemy is an object-relational mapper which provides "a full suite of well known enterprise-level persistence patterns, designed for efficient and high-performing database access, adapted into a simple and Pythonic domain language".<br />
While there has been some attempts in implementing an ORM in D - none of these got close to the simplicity and usability of SQLAlchemy (see [[Database Libraries]]).<br />
However, with D's CTFE queries could - like std.format's strings - already be checked at compile-time and optimizations could be be applied to the parser and serializer.<br />
<br />
This project would be based on the [http://dconf.org/2016/talks/smith.html proposed std.database abstraction] and focus on creating a general-purpose ORM on top of it.<br />
<br />
See also: Martin Nowak's DConf16 talk about [http://dconf.org/2016/talks/nowak.html Object-Relational Mapper] <br />
<br />
Existing work:<br />
* [https://github.com/huntlabs/hunt-entity hunt-entity]<br />
<br />
Proposed Project Mentor: TBA<br />
<br />
=== std.serialization ===<br />
----<br />
<br />
D has numerous serialization frameworks. From `std.json` to `std.csv` over [https://github.com/dcarp/protobuf-d protobuf] to [https://github.com/vibe-d/vibe.d Vibe.d's] own serialization framework.<br />
The goal of this project is to implement a flexible (de)serialization framework that can be used as a standardized building block for various serialization related things.<br />
One important goal would be to define how a user-specified type has to work in order to make it serializable, as well as to allow the end-user (e.g. a user of std.json) to change the serialization of third-party types that cannot themselves be modified (i.e. let them define their own policies).<br />
<br />
Starting points:<br />
<br />
* [http://vibed.org/api/vibe.data.serialization Vibe.d's serialization framework]<br />
* [https://github.com/jacob-carlborg/orange Orange framework]<br />
<br />
Proposed Project Mentor: Jacob Carlborg<br />
<br />
=== Propose your own project ===<br />
----<br />
<br />
Do you have your own vision for improving D's success? That's great!<br />
Are you convinced that your project helps to advance open source technology related to the D programming language?<br />
Then simply get in touch with D's GSoC org admin (social (at) dlang (dot) org) and potential mentors for your project.<br />
<br />
If you are searching for inspiration, you might want to have a look at the [[DIPs| list of D Improvement Proposals (DIPs)]], the [[Vision/2018H1|high-level vision for this semester]] or the [[Wish_list|wish list]].<br />
<br />
<br />
== Ideas From Previous Years ==<br />
<br />
These GSoC idea pages from the past years which might provide more inspiration for proposing your own idea:<br />
<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2018 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2017 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2016_Ideas GSoC 2016 Ideas] (accepted, 4 slots)<br />
* [http://wiki.dlang.org/GSOC_2015_Ideas GSoC 2015 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2014_Ideas GSoC 2014 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2013_Ideas GSoC 2013 Ideas] (not accepted)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2012_Ideas GSoC 2012 Ideas] (accepted, 3 slots)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2011_Ideas GSoC 2011 Ideas]<br />
<br />
You may also want to have a look at [https://wiki.dlang.org/SAOC_2018_ideas the Symmetry Autumn of Code ideas page].<br />
<br />
== Tips for students ==<br />
<br />
Please see the "gsoc" articles at our [https://dlang.org/blog/category/gsoc/ official blog] which contain experience reports from students of previous years.<br />
<br />
Daniel Pocock has [http://danielpocock.com/getting-selected-for-google-summer-of-code-2015 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.<br />
<br />
<br />
== Tips for Mentors ==<br />
<br />
If you are interested in mentoring, please check out the [http://en.flossmanuals.net/GSoCMentoring/ organization administrator and mentor] manual for more information.<br />
<br />
[[Category:GSOC]]</div>Greenifyhttps://wiki.dlang.org/?title=GSOC_2019_Ideas&diff=9566GSOC 2019 Ideas2019-03-03T04:32:46Z<p>Greenify: /* Header generation for C/C++ */ Fix links</p>
<hr />
<div>This is the D Language Foundation's Google Summer of Code 2019 page.<br />
<br />
If you are interested in working on a D project as part of GSoC 2019, as either a student or mentor, please contact the GSoC admins at social@dlang.org. Include "GSoC 2019" in the email subject line.<br />
<br />
<br />
== Timeline ==<br />
The timeline for GSoC 2019 [https://developers.google.com/open-source/gsoc/timeline can be found here].<br />
<br />
== Ideas ==<br />
<br />
The D ecosystem is always in need of improvement through the revision of existing projects and the creation of new ones. The core projects like the([http://dlang.org/phobos/index.html standard library]) and the compilers ([[Compilers]]) are always in need of attention. Other important areas include GUI support, integration with other languages, improving and enhancing the tooling, IDE and editor support, and more.<br />
<br />
Please add your project ideas to the list below, being as descriptive as you can in the summaries. Students interested in participating can use the ideas listed here as jumping off points, so the more information you provide, the easier it will be for them to get started. If your idea is particularly complex or nuanced, consider leaving contact information so that interested parties may follow up.<br />
<br />
=== DUB: D's package manager ===<br />
----<br />
<br />
[https://github.com/dlang/dub DUB] - D's package manager - is one of the central infrastructure tools in the D world as a convenient build and package management tool for the D community.<br />
With D gaining more and more popularity, it's also a key tool to guarantee D's further adoption.<br />
Thus there are many great ideas to improve DUB:<br />
<br />
* [https://github.com/dlang/dub/wiki/DEP6 git support]<br />
* [https://github.com/dlang/dub/wiki/DEP2 separate compilation and caching]<br />
* [https://github.com/dlang/dub/wiki/DEP3 extensibility through DUB]<br />
* [https://github.com/dlang/dub/wiki/DEP4 control flow directives]<br />
* [https://github.com/dlang/dub/wiki/DEP5 build system support for C/C++]<br />
* support dub install for distributions<br />
* support building a {snap, Debian, Arch, ...} package out of DUB package<br />
<br />
Any of these listed DUB Enhancement Proposals (DEPs) could form the basis of a GSoC Project.<br />
<br />
'''Update:''' A very detailed list of ideas for improving Dub can be found in this [https://forum.dlang.org/post/eftttpylxanvxjhoigqu@forum.dlang.org Forum thread].<br />
<br />
Proposed Project Mentors: Sönke Ludwig, Sebastian Wilzbach<br />
<br />
=== Header generation for C/C++ ===<br />
----<br />
<br />
With the ever-improving integration between DMD and C/C++, quite a bit of tooling has been developed to generate D header files from C or C++ projects (e.g. [https://github.com/jacob-carlborg/dstep DStep] or [https://github.com/atilaneves/dpp DPP]).<br />
However, for many projects the majority of the source code is now written in D and the reverse step is needed: an automatic way to generate C and C++ headers from a D project.<br />
This would be very valuable for D as it could motivate inter-language projects that typically go C++-fist-with-a-D-binding to work the other way.<br />
<br />
Starting points:<br />
* [https://forum.dlang.org/post/mailman.7146.1551050711.29801.digitalmars-d@puremagic.com NG-Thread: "Make DMD emit C++ .h files same as .di files"]<br />
* [https://github.com/dlang/dmd/pull/8591 Existing specialized work for the DMD codebase]<br />
* [https://gitlab.com/mihails.strasuns/dtoh Existing WIP work for generating C headers]<br />
* [https://github.com/thewilsonator/dtoh Existing WIP work for generating C++ headers, using DMD as a library]<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Language Server Protocol for D ===<br />
----<br />
<br />
The [https://microsoft.github.io/language-server-protocol Language Server Protocol] (LSP) defines the protocol used between an editor or IDE and a language server that provides language features like auto complete, go to definition, find all references etc. Adding features like auto complete, go to definition, or documentation on hover for a programming language takes significant effort. Traditionally this work had to be repeated for each development tool, as each tool provides different APIs for implementing the same feature (see the list of [[Editors]] and [[IDEs]]). Additionally as the existing tools only use `libdparse` (used in [https://github.com/d-language-server/dls DLS] and [https://github.com/dlang-community/DCD DCD]), they lack the ability to perform semantic analysis on the AST and can't evaluate `mixin`'s nor D's very powerful Compile-Time Function Evaluation (CTFE).<br />
A Language Server is meant to provide the language-specific smarts and communicate with development tools over a protocol that enables inter-process communication.<br />
The idea behind the Language Server Protocol (LSP) is to standardize the protocol for how such servers and development tools communicate. This way, single D Language Server can be re-used in multiple development tools, which in turn can support multiple languages with minimal effort.<br />
<br />
Recent development in the DMD compiler [https://dlang.org/blog/2017/08/01/a-dub-case-study-compiling-dmd-as-a-library made it available as a DUB library]. This mean that the compiler itself can be re-used and third-party tools don't have to re-implement e.g. D's complex CTFE. This project is about using the DMD compiler as a library to implement a Language Server for D.<br />
<br />
Proposed Project Mentors: Jacob Carlborg, Sebastian Wilzbach<br />
<br />
How to start:<br />
* [https://github.com/dlang/dmd/blob/master/test/dub_package/frontend.d Simple example] of using DMD as a library<br />
* [https://github.com/jacob-carlborg/dlp More complex use cases]<br />
<br />
=== Mir Project ===<br />
----<br />
<br />
The Mir project is developing numerical libraries for the upcoming numeric packages of<br />
the Dlang standard library. The are numerous projects an interested student could pursue:<br />
<br />
* University project. Your GSoC project can be combined with your scientific research.<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://julialang.org Julia] integration<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://www.numpy.org NumPy] integration<br />
* General purpose BetterC libraries<br />
** I/O betterC Dlang library<br />
** Async betterC Dlang library<br />
** String and format betterC library<br />
* mir-cpuid <br />
** ARM support<br />
** Advanced OS specific support<br />
* mir-glas<br />
** BLAS Level 2 subprograms<br />
** One BLAS Level 3 subprogram. It is OK to do only one! But it must be faster then OpenBLAS, and not slower then Intel MKL.<br />
** Multithreading support for BLAS Level 2<br />
** Multithreading support for BLAS Level 3<br />
<br />
You can get more details on projects related to Mir [https://github.com/libmir/mir/wiki/GSoC-2019 here].<br />
<br />
Its Good To Know:<br />
<br />
To work on the Mir you should be proficient with one of:<br />
<br />
* C<br />
* C++<br />
* LLVM<br />
* Fortran<br />
* Experience with D is not essential.<br />
<br />
To work on the Mir project requires a responsible and self-motivated student.<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
<br />
=== LDC (LLVM-based D compiler) ===<br />
----<br />
<br />
The LDC project provides a portable D programming language compiler with modern optimization and code generation capabilities.<br />
The ever-improving feature set of LLVM opens up many opportunities with D.<br />
A few ideas for a potential GSoC project are:<br />
<br />
* exploiting immutability of variables (notably of structs such as string slices)<br />
* devirtualization<br />
* improve debuginfo<br />
* ASan with GC and multithreading<br />
* function multiversioning<br />
<br />
You might also want to browse the [https://github.com/ldc-developers/ldc/issues LDC's issue tracker] for more ideas.<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== iOS support in LDC ===<br />
----<br />
<br />
Mobile is becoming, or rather is already, the biggest software platform. While LDC already supports the Android platform there's no official support for iOS. The project would consist of adding support for the iOS platform to the LDC compiler, the D runtime library and the D standard library. The goal would be to get support for this platform upstreamed to the LDC main project.<br />
<br />
A lot of existing work has been done but has never been completed or upstreamed: https://github.com/smolt/ldc-iphone-dev.<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Baremetal D runtime ===<br />
----<br />
<br />
Many features in the standard library are implemented by using the C runtime. Reusing the rock-solid work of generations of programmers makes a lot of sense as just outputting via `printf` can be very [https://github.molgen.mpg.de/git-mirror/glibc/blob/20003c49884422da7ffbc459cdeee768a6fee07b/stdio-common/vfprintf.c complex]. However, for embedded environments a programmer often only has a tiny amount of storage available or might not even have a C runtime available for his target.<br />
The idea of this project is to implement the most basic parts of the runtime natively in D, s.t. bare metals programmers can just compile for their target. Implementing features natively in D also means that other targets like [https://wiki.dlang.org/Generating_WebAssembly_with_LDC Web Assembly] will automatically be able to use them too. Another advantage of implementing these basic building blocks in D is that one can take advantage of D's Compile-Time Function Evaluation (CTFE) and optimize the methods even further at compile-time.<br />
<br />
Project focus:<br />
- Implement `memcpy`, `memcmp` and similar in D (with similar performance to C)<br />
- Implement `malloc` and similar in D (with similar performance to C)<br />
<br />
Starting points:<br />
* [https://theartofmachinery.com/2017/02/28/bare_metal_d.html D for Bare Metal Programming (tutorial series]<br />
* [https://github.com/JinShil/stm32f42_discovery_demo Simple demonstration of using D to bare-metal program an STM32F29I Discovery board]<br />
* [https://github.com/JinShil/memcpyD memcpyD]<br />
* [https://wiki.dlang.org/Programming_in_D_tutorial_on_Embedded_Linux_ARM_devices Programming in D tutorial on Embedded Linux ARM devices]<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
<br />
=== GDC (GCC-based D compiler) ===<br />
----<br />
<br />
The GDC compiles uses GCC as a backend to utilize this powerful backend.<br />
Recently, GDC [https://www.phoronix.com/scan.php?page=news_item&px=GCC-9-Merges-D-Language has been accepted as GCC frontend] and will be part of the GCC9 release.<br />
However, GDC still has lots of tasks that the potential students could work on.<br />
<br />
One idea would be to improve GDC's support for betterC by adding a compiler interface to allow using a modular runtime. Right now when GDC uses some feature (TypeInfo, asserts, unittests), it just emits a call to an `extern(C)` function. A much better approach would be to have a defined D API (e.g. `rt.assert.onAssertFailure(...)`). The compiler can then check if it finds `rt.assert.onFailure`. If not, the compiler can the simply disable that feature and provide nice error messages. This could be done for TypeInfo, Exceptions, Asserts, Switch errors, unit test support, etc. In the end, the vision would be to be able to ship a compiler completely without runtime. This compiler should be able to produce bare bones code without any further configuration. Then add a dependency to `drt:core` in the dub configuration to get class support, `dr:exception` for exceptions, etc. The compiler could then automatically detect availability of these features. (Of course manually adding -I paths would work in exactly the same way).<br />
<br />
For more ideas, interested students are encouraged to browse [https://bugzilla.gdcproject.org/describecomponents.cgi GDC's issue list] or getting [https://wiki.dlang.org/GDC in touch with the GDC development team].<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== C++ interops ===<br />
----<br />
<br />
There are many experiments in transparently interfacing D with C++, notably:<br />
<br />
* [https://github.com/atilaneves/dpp dpp] by Atila Neves, that parses and translates headers on the fly<br />
* [https://wiki.dlang.org/Calypso Calypso] by Elie Morisse that bridges the two languages at the AST level.<br />
* [https://github.com/jacob-carlborg/dstep DStep] by Jacob Carlborg, automatically generates bindings for C and Objective-C code. The task would be to add support for C++.<br />
<br />
There is also a lot of work in bringing STL types to the DRuntime (see https://github.com/dlang/druntime/pull/2310).<br />
<br />
D would greatly benefit by seamlessly integrating the C++ ecosystem. There are many ways to accomplish this goal and it should be discussed with the community.<br />
Andrei already commented on the importance of a tool like Calypso in this thread:<br />
https://forum.dlang.org/post/m9s4cd$2s1v$1@digitalmars.com<br />
<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Persistent Data Structures ===<br />
----<br />
<br />
There is an ongoing effort to reduce the reliance of Phobos on the GC but the GC is not going anywhere given that it has many advantages over manual memory management.<br />
The community would greatly benefit from a wide range of functional programming techniques that have their roots in the usage of immutable and persistent data structures that heavily rely on the GC.<br />
Persistent Data Structures are heavily used in [http://docs.scala-lang.org/overviews/collections/overview.html Scala] and [http://clojure.org/reference/data_structures Clojure] and they allow the programmer to reason about interactivity, sharing and parallelism.<br />
<br />
The focus of this project would be to create a varying range of persistent data structures (sets, vectors, maps, strings, trees, lists, etc...) that respects the range interface and the semantics of Phobos.<br />
<br />
Related Work:<br />
<br />
* https://www.cs.cmu.edu/~rwh/theses/okasaki.pdf <br />
* https://www.worldcat.org/title/rrb-trees-efficient-immutable-vectors/oclc/820379112<br />
* https://www.youtube.com/watch?v=7BFF50BHPPo<br />
* https://www.infoq.com/presentations/Value-Values<br />
* https://github.com/arximboldi/immer<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== std.benchmark ===<br />
----<br />
<br />
Ideally every function in Phobos should have its own benchmark suite which is run for every PR to check for performance improvements or regressions.<br />
* Additionally support for the new big O annotation [https://github.com/dlang/phobos/pull/4965 here] would be nice. <br />
* Existing work: [https://github.com/dlang/phobos/pull/794 here], and [https://github.com/dlang/phobos/pull/3695 here], and [https://github.com/atilaneves/unit-threaded/tree/master/source/unit_threaded/randomized here (QuickText-like testing)]. <br />
<br />
Proposed Project Mentors: Sebastian Wilzbach<br />
<br />
=== Jupyter notebook D kernel ===<br />
----<br />
<br />
The Jupyter Notebook is an open-source web application that allows you to create and share documents that contain live code, equations, visualizations and narrative text. Uses include: data cleaning and transformation, numerical simulation, statistical modeling, data visualization, machine learning, and much more.<br />
Jupyter notebooks are extremely popular among data scientist as they allow interactive progress and exploring a solution step by step.<br />
With a bit of work, a statically compiled language can be used in an interactive notebook e.g. [Cling https://blog.jupyter.org/interactive-workflows-for-c-with-jupyter-fe9b54227d92] and Go with<br />
[https://github.com/gopherdata/gophernotes gophernotes].<br />
Apart from being useful to data scientist, a Jupyter D kernel would allow an intuitive exploration of the language for newcomers and people starting with new libraries.<br />
<br />
Existing works:<br />
- [https://github.com/dlang-community/drepl drepl] - simple REPL for D<br />
- [https://github.com/DlangScience/PydMagic PydMagic] - allows to write PyD extension in a notebook.<br />
<br />
Proposed Project Mentor: Sebastian Wilzbach<br />
<br />
<br />
=== Tabular data container (data frames) ===<br />
----<br />
<br />
Pandas, R and Julia have made [https://github.com/mobileink/data.frame/wiki/What-is-a-Data-Frame%3F data frames] very popular.<br />
As D is getting more interest from data scientist (e.g. [https://github.com/eBay/tsv-utils eBay] or [http://tech.adroll.com/blog/data/2014/11/17/d-is-for-data-science.html AdRoll]) it would be very beneficial to use one language for the entire data analysis pipeline - especially considering that D (in contrast to popular languages like Python, R or Julia) - is compiled to native machine code and gets optimized by the sophisticated LLVM backend.<br />
<br />
Minimum requirements:<br />
<br />
* conversion to and from CSV<br />
* multi-indexing<br />
* column binary operations, e.g. `column1 * column2`<br />
* group-by on an arbitrary number of columns<br />
* column/group aggregations<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
=== Graphics library for resource constrained embedded systems ===<br />
----<br />
<br />
Create a 2D rasterizer, rich drawing primitives, and 2D graphics library suitable for resource constrained embedded systems (e.g. ARM Cortex-M) to be used in industrial controls, home appliances, medical devices, consumer electronics, and IoT just to name a few. The end goal would be something similar to [https://www.segger.com/products/user-interface/emwin Segger's emWin]. The library would be used to drive LDCs similar to https://www.adafruit.com/product/3396<br />
Requirements:<br />
<br />
* Hardware agnostic; should simply render to a frame buffer<br />
* No dependencies (No Phobos, no C standard library, and no official D runtime).<br />
* Consider using -betterC, but a custom minimal D runtime is also a viable option<br />
<br />
Related work:<br />
<br />
* https://github.com/TurkeyMan/color<br />
* https://bitbucket.org/timosi/minlibd<br />
* https://github.com/JinShil/stm32f42_discovery_demo<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
<br />
=== Functional Reactive Programming ===<br />
----<br />
<br />
Functional reactive programming (FRP) is a programming paradigm for reactive programming (asynchronous dataflow programming) using the building blocks of functional programming (e.g. map, reduce, filter).<br />
The best-known FRP API is the [http://reactivex.io ReactiveX API] whose implementation in D this project would focus.<br />
Note that this project is closely related to the std.eventloop project.<br />
<br />
Proposed Project Mentors: Petar Kirov<br />
<br />
=== BetterC runtime ===<br />
----<br />
<br />
[https://dlang.org/blog/2017/08/23/d-as-a-better-c BetterC] is a subset of D which limits the feature set of D, s.t. it's even easier to migrate from C as no Garbage Collection (GC) is used anymore.<br />
While, this feature is popular for some projects, `-betterC` today means still means a severe restriction in the amount of D features available (see the [https://dlang.org/spec/betterc.html BetterC specification]).<br />
This project is about making more parts of the D runtime betterC-compatible. For example, classes could be allocated with reference-counting instead of using the GC. <br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Java Native Interface (JNI) library ===<br />
----<br />
<br />
D's features allow to write cut down the boilerplate of wrapper drastically.<br />
See the recently published [https://dlang.org/blog/2017/05/31/project-highlight-excel-d excel-d] for a comparison between the C++ implementation for registering a function in Excel and the D way.<br />
Similarly a solid JNI library would open up new many new use cases and allow the Java community to profit even easier from D's features.<br />
<br />
Previous work: [https://github.com/Monnoroch/DJni DJni], [https://github.com/jamesmahler/djvm djvm]<br />
Proposed Project Mentor: TBA<br />
<br />
=== ORM mapping ===<br />
----<br />
<br />
SQLAlchemy is an object-relational mapper which provides "a full suite of well known enterprise-level persistence patterns, designed for efficient and high-performing database access, adapted into a simple and Pythonic domain language".<br />
While there has been some attempts in implementing an ORM in D - none of these got close to the simplicity and usability of SQLAlchemy (see [[Database Libraries]]).<br />
However, with D's CTFE queries could - like std.format's strings - already be checked at compile-time and optimizations could be be applied to the parser and serializer.<br />
<br />
This project would be based on the [http://dconf.org/2016/talks/smith.html proposed std.database abstraction] and focus on creating a general-purpose ORM on top of it.<br />
<br />
See also: Martin Nowak's DConf16 talk about [http://dconf.org/2016/talks/nowak.html Object-Relational Mapper] <br />
<br />
Existing work:<br />
* [https://github.com/huntlabs/hunt-entity hunt-entity]<br />
<br />
Proposed Project Mentor: TBA<br />
<br />
=== std.serialization ===<br />
----<br />
<br />
D has numerous serialization frameworks. From `std.json` to `std.csv` over [https://github.com/dcarp/protobuf-d protobuf] to [https://github.com/vibe-d/vibe.d Vibe.d's] own serialization framework.<br />
The goal of this project is to implement a flexible (de)serialization framework that can be used as a standardized building block for various serialization related things.<br />
One important goal would be to define how a user-specified type has to work in order to make it serializable, as well as to allow the end-user (e.g. a user of std.json) to change the serialization of third-party types that cannot themselves be modified (i.e. let them define their own policies).<br />
<br />
Starting points:<br />
<br />
* [http://vibed.org/api/vibe.data.serialization Vibe.d's serialization framework]<br />
* [https://github.com/jacob-carlborg/orange Orange framework]<br />
<br />
Proposed Project Mentor: Jacob Carlborg<br />
<br />
=== Propose your own project ===<br />
----<br />
<br />
Do you have your own vision for improving D's success? That's great!<br />
Are you convinced that your project helps to advance open source technology related to the D programming language?<br />
Then simply get in touch with D's GSoC org admin (social (at) dlang (dot) org) and potential mentors for your project.<br />
<br />
If you are searching for inspiration, you might want to have a look at the [[DIPs| list of D Improvement Proposals (DIPs)]], the [[Vision/2018H1|high-level vision for this semester]] or the [[Wish_list|wish list]].<br />
<br />
<br />
== Ideas From Previous Years ==<br />
<br />
These GSoC idea pages from the past years which might provide more inspiration for proposing your own idea:<br />
<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2018 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2017 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2016_Ideas GSoC 2016 Ideas] (accepted, 4 slots)<br />
* [http://wiki.dlang.org/GSOC_2015_Ideas GSoC 2015 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2014_Ideas GSoC 2014 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2013_Ideas GSoC 2013 Ideas] (not accepted)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2012_Ideas GSoC 2012 Ideas] (accepted, 3 slots)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2011_Ideas GSoC 2011 Ideas]<br />
<br />
You may also want to have a look at [https://wiki.dlang.org/SAOC_2018_ideas the Symmetry Autumn of Code ideas page].<br />
<br />
== Tips for students ==<br />
<br />
Please see the "gsoc" articles at our [https://dlang.org/blog/category/gsoc/ official blog] which contain experience reports from students of previous years.<br />
<br />
Daniel Pocock has [http://danielpocock.com/getting-selected-for-google-summer-of-code-2015 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.<br />
<br />
<br />
== Tips for Mentors ==<br />
<br />
If you are interested in mentoring, please check out the [http://en.flossmanuals.net/GSoCMentoring/ organization administrator and mentor] manual for more information.<br />
<br />
[[Category:GSOC]]</div>Greenifyhttps://wiki.dlang.org/?title=GSOC_2019_Ideas&diff=9565GSOC 2019 Ideas2019-03-03T04:32:06Z<p>Greenify: Restructure project ideas</p>
<hr />
<div>This is the D Language Foundation's Google Summer of Code 2019 page.<br />
<br />
If you are interested in working on a D project as part of GSoC 2019, as either a student or mentor, please contact the GSoC admins at social@dlang.org. Include "GSoC 2019" in the email subject line.<br />
<br />
<br />
== Timeline ==<br />
The timeline for GSoC 2019 [https://developers.google.com/open-source/gsoc/timeline can be found here].<br />
<br />
== Ideas ==<br />
<br />
The D ecosystem is always in need of improvement through the revision of existing projects and the creation of new ones. The core projects like the([http://dlang.org/phobos/index.html standard library]) and the compilers ([[Compilers]]) are always in need of attention. Other important areas include GUI support, integration with other languages, improving and enhancing the tooling, IDE and editor support, and more.<br />
<br />
Please add your project ideas to the list below, being as descriptive as you can in the summaries. Students interested in participating can use the ideas listed here as jumping off points, so the more information you provide, the easier it will be for them to get started. If your idea is particularly complex or nuanced, consider leaving contact information so that interested parties may follow up.<br />
<br />
=== DUB: D's package manager ===<br />
----<br />
<br />
[https://github.com/dlang/dub DUB] - D's package manager - is one of the central infrastructure tools in the D world as a convenient build and package management tool for the D community.<br />
With D gaining more and more popularity, it's also a key tool to guarantee D's further adoption.<br />
Thus there are many great ideas to improve DUB:<br />
<br />
* [https://github.com/dlang/dub/wiki/DEP6 git support]<br />
* [https://github.com/dlang/dub/wiki/DEP2 separate compilation and caching]<br />
* [https://github.com/dlang/dub/wiki/DEP3 extensibility through DUB]<br />
* [https://github.com/dlang/dub/wiki/DEP4 control flow directives]<br />
* [https://github.com/dlang/dub/wiki/DEP5 build system support for C/C++]<br />
* support dub install for distributions<br />
* support building a {snap, Debian, Arch, ...} package out of DUB package<br />
<br />
Any of these listed DUB Enhancement Proposals (DEPs) could form the basis of a GSoC Project.<br />
<br />
'''Update:''' A very detailed list of ideas for improving Dub can be found in this [https://forum.dlang.org/post/eftttpylxanvxjhoigqu@forum.dlang.org Forum thread].<br />
<br />
Proposed Project Mentors: Sönke Ludwig, Sebastian Wilzbach<br />
<br />
=== Header generation for C/C++ ===<br />
----<br />
<br />
With the ever-improving integration between DMD and C/C++, quite a bit of tooling has been developed to generate D header files from C or C++ projects (e.g. [https://github.com/jacob-carlborg/dstep DStep] or [https://github.com/atilaneves/dpp DPP]).<br />
However, for many projects the majority of the source code is now written in D and the reverse step is needed: an automatic way to generate C and C++ headers from a D project.<br />
This would be very valuable for D as it could motivate inter-language projects that typically go C++-fist-with-a-D-binding to work the other way.<br />
<br />
Starting point:<br />
* [https://forum.dlang.org/post/mailman.7146.1551050711.29801.digitalmars-d@puremagic.com NG-Thread: "Make DMD emit C++ .h files same as .di files"]<br />
* [https://github.com/dlang/dmd/pull/8591 Existing specialized work for the DMD codebase)<br />
* [https://gitlab.com/mihails.strasuns/dtoh Existing WIP work for generating C headers)<br />
* [https://github.com/thewilsonator/dtoh Existing WIP work for generating C++ headers, using DMD as a library)<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Language Server Protocol for D ===<br />
----<br />
<br />
The [https://microsoft.github.io/language-server-protocol Language Server Protocol] (LSP) defines the protocol used between an editor or IDE and a language server that provides language features like auto complete, go to definition, find all references etc. Adding features like auto complete, go to definition, or documentation on hover for a programming language takes significant effort. Traditionally this work had to be repeated for each development tool, as each tool provides different APIs for implementing the same feature (see the list of [[Editors]] and [[IDEs]]). Additionally as the existing tools only use `libdparse` (used in [https://github.com/d-language-server/dls DLS] and [https://github.com/dlang-community/DCD DCD]), they lack the ability to perform semantic analysis on the AST and can't evaluate `mixin`'s nor D's very powerful Compile-Time Function Evaluation (CTFE).<br />
A Language Server is meant to provide the language-specific smarts and communicate with development tools over a protocol that enables inter-process communication.<br />
The idea behind the Language Server Protocol (LSP) is to standardize the protocol for how such servers and development tools communicate. This way, single D Language Server can be re-used in multiple development tools, which in turn can support multiple languages with minimal effort.<br />
<br />
Recent development in the DMD compiler [https://dlang.org/blog/2017/08/01/a-dub-case-study-compiling-dmd-as-a-library made it available as a DUB library]. This mean that the compiler itself can be re-used and third-party tools don't have to re-implement e.g. D's complex CTFE. This project is about using the DMD compiler as a library to implement a Language Server for D.<br />
<br />
Proposed Project Mentors: Jacob Carlborg, Sebastian Wilzbach<br />
<br />
How to start:<br />
* [https://github.com/dlang/dmd/blob/master/test/dub_package/frontend.d Simple example] of using DMD as a library<br />
* [https://github.com/jacob-carlborg/dlp More complex use cases]<br />
<br />
=== Mir Project ===<br />
----<br />
<br />
The Mir project is developing numerical libraries for the upcoming numeric packages of<br />
the Dlang standard library. The are numerous projects an interested student could pursue:<br />
<br />
* University project. Your GSoC project can be combined with your scientific research.<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://julialang.org Julia] integration<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://www.numpy.org NumPy] integration<br />
* General purpose BetterC libraries<br />
** I/O betterC Dlang library<br />
** Async betterC Dlang library<br />
** String and format betterC library<br />
* mir-cpuid <br />
** ARM support<br />
** Advanced OS specific support<br />
* mir-glas<br />
** BLAS Level 2 subprograms<br />
** One BLAS Level 3 subprogram. It is OK to do only one! But it must be faster then OpenBLAS, and not slower then Intel MKL.<br />
** Multithreading support for BLAS Level 2<br />
** Multithreading support for BLAS Level 3<br />
<br />
You can get more details on projects related to Mir [https://github.com/libmir/mir/wiki/GSoC-2019 here].<br />
<br />
Its Good To Know:<br />
<br />
To work on the Mir you should be proficient with one of:<br />
<br />
* C<br />
* C++<br />
* LLVM<br />
* Fortran<br />
* Experience with D is not essential.<br />
<br />
To work on the Mir project requires a responsible and self-motivated student.<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
<br />
=== LDC (LLVM-based D compiler) ===<br />
----<br />
<br />
The LDC project provides a portable D programming language compiler with modern optimization and code generation capabilities.<br />
The ever-improving feature set of LLVM opens up many opportunities with D.<br />
A few ideas for a potential GSoC project are:<br />
<br />
* exploiting immutability of variables (notably of structs such as string slices)<br />
* devirtualization<br />
* improve debuginfo<br />
* ASan with GC and multithreading<br />
* function multiversioning<br />
<br />
You might also want to browse the [https://github.com/ldc-developers/ldc/issues LDC's issue tracker] for more ideas.<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== iOS support in LDC ===<br />
----<br />
<br />
Mobile is becoming, or rather is already, the biggest software platform. While LDC already supports the Android platform there's no official support for iOS. The project would consist of adding support for the iOS platform to the LDC compiler, the D runtime library and the D standard library. The goal would be to get support for this platform upstreamed to the LDC main project.<br />
<br />
A lot of existing work has been done but has never been completed or upstreamed: https://github.com/smolt/ldc-iphone-dev.<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Baremetal D runtime ===<br />
----<br />
<br />
Many features in the standard library are implemented by using the C runtime. Reusing the rock-solid work of generations of programmers makes a lot of sense as just outputting via `printf` can be very [https://github.molgen.mpg.de/git-mirror/glibc/blob/20003c49884422da7ffbc459cdeee768a6fee07b/stdio-common/vfprintf.c complex]. However, for embedded environments a programmer often only has a tiny amount of storage available or might not even have a C runtime available for his target.<br />
The idea of this project is to implement the most basic parts of the runtime natively in D, s.t. bare metals programmers can just compile for their target. Implementing features natively in D also means that other targets like [https://wiki.dlang.org/Generating_WebAssembly_with_LDC Web Assembly] will automatically be able to use them too. Another advantage of implementing these basic building blocks in D is that one can take advantage of D's Compile-Time Function Evaluation (CTFE) and optimize the methods even further at compile-time.<br />
<br />
Project focus:<br />
- Implement `memcpy`, `memcmp` and similar in D (with similar performance to C)<br />
- Implement `malloc` and similar in D (with similar performance to C)<br />
<br />
Starting points:<br />
* [https://theartofmachinery.com/2017/02/28/bare_metal_d.html D for Bare Metal Programming (tutorial series]<br />
* [https://github.com/JinShil/stm32f42_discovery_demo Simple demonstration of using D to bare-metal program an STM32F29I Discovery board]<br />
* [https://github.com/JinShil/memcpyD memcpyD]<br />
* [https://wiki.dlang.org/Programming_in_D_tutorial_on_Embedded_Linux_ARM_devices Programming in D tutorial on Embedded Linux ARM devices]<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
<br />
=== GDC (GCC-based D compiler) ===<br />
----<br />
<br />
The GDC compiles uses GCC as a backend to utilize this powerful backend.<br />
Recently, GDC [https://www.phoronix.com/scan.php?page=news_item&px=GCC-9-Merges-D-Language has been accepted as GCC frontend] and will be part of the GCC9 release.<br />
However, GDC still has lots of tasks that the potential students could work on.<br />
<br />
One idea would be to improve GDC's support for betterC by adding a compiler interface to allow using a modular runtime. Right now when GDC uses some feature (TypeInfo, asserts, unittests), it just emits a call to an `extern(C)` function. A much better approach would be to have a defined D API (e.g. `rt.assert.onAssertFailure(...)`). The compiler can then check if it finds `rt.assert.onFailure`. If not, the compiler can the simply disable that feature and provide nice error messages. This could be done for TypeInfo, Exceptions, Asserts, Switch errors, unit test support, etc. In the end, the vision would be to be able to ship a compiler completely without runtime. This compiler should be able to produce bare bones code without any further configuration. Then add a dependency to `drt:core` in the dub configuration to get class support, `dr:exception` for exceptions, etc. The compiler could then automatically detect availability of these features. (Of course manually adding -I paths would work in exactly the same way).<br />
<br />
For more ideas, interested students are encouraged to browse [https://bugzilla.gdcproject.org/describecomponents.cgi GDC's issue list] or getting [https://wiki.dlang.org/GDC in touch with the GDC development team].<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== C++ interops ===<br />
----<br />
<br />
There are many experiments in transparently interfacing D with C++, notably:<br />
<br />
* [https://github.com/atilaneves/dpp dpp] by Atila Neves, that parses and translates headers on the fly<br />
* [https://wiki.dlang.org/Calypso Calypso] by Elie Morisse that bridges the two languages at the AST level.<br />
* [https://github.com/jacob-carlborg/dstep DStep] by Jacob Carlborg, automatically generates bindings for C and Objective-C code. The task would be to add support for C++.<br />
<br />
There is also a lot of work in bringing STL types to the DRuntime (see https://github.com/dlang/druntime/pull/2310).<br />
<br />
D would greatly benefit by seamlessly integrating the C++ ecosystem. There are many ways to accomplish this goal and it should be discussed with the community.<br />
Andrei already commented on the importance of a tool like Calypso in this thread:<br />
https://forum.dlang.org/post/m9s4cd$2s1v$1@digitalmars.com<br />
<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Persistent Data Structures ===<br />
----<br />
<br />
There is an ongoing effort to reduce the reliance of Phobos on the GC but the GC is not going anywhere given that it has many advantages over manual memory management.<br />
The community would greatly benefit from a wide range of functional programming techniques that have their roots in the usage of immutable and persistent data structures that heavily rely on the GC.<br />
Persistent Data Structures are heavily used in [http://docs.scala-lang.org/overviews/collections/overview.html Scala] and [http://clojure.org/reference/data_structures Clojure] and they allow the programmer to reason about interactivity, sharing and parallelism.<br />
<br />
The focus of this project would be to create a varying range of persistent data structures (sets, vectors, maps, strings, trees, lists, etc...) that respects the range interface and the semantics of Phobos.<br />
<br />
Related Work:<br />
<br />
* https://www.cs.cmu.edu/~rwh/theses/okasaki.pdf <br />
* https://www.worldcat.org/title/rrb-trees-efficient-immutable-vectors/oclc/820379112<br />
* https://www.youtube.com/watch?v=7BFF50BHPPo<br />
* https://www.infoq.com/presentations/Value-Values<br />
* https://github.com/arximboldi/immer<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== std.benchmark ===<br />
----<br />
<br />
Ideally every function in Phobos should have its own benchmark suite which is run for every PR to check for performance improvements or regressions.<br />
* Additionally support for the new big O annotation [https://github.com/dlang/phobos/pull/4965 here] would be nice. <br />
* Existing work: [https://github.com/dlang/phobos/pull/794 here], and [https://github.com/dlang/phobos/pull/3695 here], and [https://github.com/atilaneves/unit-threaded/tree/master/source/unit_threaded/randomized here (QuickText-like testing)]. <br />
<br />
Proposed Project Mentors: Sebastian Wilzbach<br />
<br />
=== Jupyter notebook D kernel ===<br />
----<br />
<br />
The Jupyter Notebook is an open-source web application that allows you to create and share documents that contain live code, equations, visualizations and narrative text. Uses include: data cleaning and transformation, numerical simulation, statistical modeling, data visualization, machine learning, and much more.<br />
Jupyter notebooks are extremely popular among data scientist as they allow interactive progress and exploring a solution step by step.<br />
With a bit of work, a statically compiled language can be used in an interactive notebook e.g. [Cling https://blog.jupyter.org/interactive-workflows-for-c-with-jupyter-fe9b54227d92] and Go with<br />
[https://github.com/gopherdata/gophernotes gophernotes].<br />
Apart from being useful to data scientist, a Jupyter D kernel would allow an intuitive exploration of the language for newcomers and people starting with new libraries.<br />
<br />
Existing works:<br />
- [https://github.com/dlang-community/drepl drepl] - simple REPL for D<br />
- [https://github.com/DlangScience/PydMagic PydMagic] - allows to write PyD extension in a notebook.<br />
<br />
Proposed Project Mentor: Sebastian Wilzbach<br />
<br />
<br />
=== Tabular data container (data frames) ===<br />
----<br />
<br />
Pandas, R and Julia have made [https://github.com/mobileink/data.frame/wiki/What-is-a-Data-Frame%3F data frames] very popular.<br />
As D is getting more interest from data scientist (e.g. [https://github.com/eBay/tsv-utils eBay] or [http://tech.adroll.com/blog/data/2014/11/17/d-is-for-data-science.html AdRoll]) it would be very beneficial to use one language for the entire data analysis pipeline - especially considering that D (in contrast to popular languages like Python, R or Julia) - is compiled to native machine code and gets optimized by the sophisticated LLVM backend.<br />
<br />
Minimum requirements:<br />
<br />
* conversion to and from CSV<br />
* multi-indexing<br />
* column binary operations, e.g. `column1 * column2`<br />
* group-by on an arbitrary number of columns<br />
* column/group aggregations<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
=== Graphics library for resource constrained embedded systems ===<br />
----<br />
<br />
Create a 2D rasterizer, rich drawing primitives, and 2D graphics library suitable for resource constrained embedded systems (e.g. ARM Cortex-M) to be used in industrial controls, home appliances, medical devices, consumer electronics, and IoT just to name a few. The end goal would be something similar to [https://www.segger.com/products/user-interface/emwin Segger's emWin]. The library would be used to drive LDCs similar to https://www.adafruit.com/product/3396<br />
Requirements:<br />
<br />
* Hardware agnostic; should simply render to a frame buffer<br />
* No dependencies (No Phobos, no C standard library, and no official D runtime).<br />
* Consider using -betterC, but a custom minimal D runtime is also a viable option<br />
<br />
Related work:<br />
<br />
* https://github.com/TurkeyMan/color<br />
* https://bitbucket.org/timosi/minlibd<br />
* https://github.com/JinShil/stm32f42_discovery_demo<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
<br />
=== Functional Reactive Programming ===<br />
----<br />
<br />
Functional reactive programming (FRP) is a programming paradigm for reactive programming (asynchronous dataflow programming) using the building blocks of functional programming (e.g. map, reduce, filter).<br />
The best-known FRP API is the [http://reactivex.io ReactiveX API] whose implementation in D this project would focus.<br />
Note that this project is closely related to the std.eventloop project.<br />
<br />
Proposed Project Mentors: Petar Kirov<br />
<br />
=== BetterC runtime ===<br />
----<br />
<br />
[https://dlang.org/blog/2017/08/23/d-as-a-better-c BetterC] is a subset of D which limits the feature set of D, s.t. it's even easier to migrate from C as no Garbage Collection (GC) is used anymore.<br />
While, this feature is popular for some projects, `-betterC` today means still means a severe restriction in the amount of D features available (see the [https://dlang.org/spec/betterc.html BetterC specification]).<br />
This project is about making more parts of the D runtime betterC-compatible. For example, classes could be allocated with reference-counting instead of using the GC. <br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Java Native Interface (JNI) library ===<br />
----<br />
<br />
D's features allow to write cut down the boilerplate of wrapper drastically.<br />
See the recently published [https://dlang.org/blog/2017/05/31/project-highlight-excel-d excel-d] for a comparison between the C++ implementation for registering a function in Excel and the D way.<br />
Similarly a solid JNI library would open up new many new use cases and allow the Java community to profit even easier from D's features.<br />
<br />
Previous work: [https://github.com/Monnoroch/DJni DJni], [https://github.com/jamesmahler/djvm djvm]<br />
Proposed Project Mentor: TBA<br />
<br />
=== ORM mapping ===<br />
----<br />
<br />
SQLAlchemy is an object-relational mapper which provides "a full suite of well known enterprise-level persistence patterns, designed for efficient and high-performing database access, adapted into a simple and Pythonic domain language".<br />
While there has been some attempts in implementing an ORM in D - none of these got close to the simplicity and usability of SQLAlchemy (see [[Database Libraries]]).<br />
However, with D's CTFE queries could - like std.format's strings - already be checked at compile-time and optimizations could be be applied to the parser and serializer.<br />
<br />
This project would be based on the [http://dconf.org/2016/talks/smith.html proposed std.database abstraction] and focus on creating a general-purpose ORM on top of it.<br />
<br />
See also: Martin Nowak's DConf16 talk about [http://dconf.org/2016/talks/nowak.html Object-Relational Mapper] <br />
<br />
Existing work:<br />
* [https://github.com/huntlabs/hunt-entity hunt-entity]<br />
<br />
Proposed Project Mentor: TBA<br />
<br />
=== std.serialization ===<br />
----<br />
<br />
D has numerous serialization frameworks. From `std.json` to `std.csv` over [https://github.com/dcarp/protobuf-d protobuf] to [https://github.com/vibe-d/vibe.d Vibe.d's] own serialization framework.<br />
The goal of this project is to implement a flexible (de)serialization framework that can be used as a standardized building block for various serialization related things.<br />
One important goal would be to define how a user-specified type has to work in order to make it serializable, as well as to allow the end-user (e.g. a user of std.json) to change the serialization of third-party types that cannot themselves be modified (i.e. let them define their own policies).<br />
<br />
Starting points:<br />
<br />
* [http://vibed.org/api/vibe.data.serialization Vibe.d's serialization framework]<br />
* [https://github.com/jacob-carlborg/orange Orange framework]<br />
<br />
Proposed Project Mentor: Jacob Carlborg<br />
<br />
=== Propose your own project ===<br />
----<br />
<br />
Do you have your own vision for improving D's success? That's great!<br />
Are you convinced that your project helps to advance open source technology related to the D programming language?<br />
Then simply get in touch with D's GSoC org admin (social (at) dlang (dot) org) and potential mentors for your project.<br />
<br />
If you are searching for inspiration, you might want to have a look at the [[DIPs| list of D Improvement Proposals (DIPs)]], the [[Vision/2018H1|high-level vision for this semester]] or the [[Wish_list|wish list]].<br />
<br />
<br />
== Ideas From Previous Years ==<br />
<br />
These GSoC idea pages from the past years which might provide more inspiration for proposing your own idea:<br />
<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2018 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2017 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2016_Ideas GSoC 2016 Ideas] (accepted, 4 slots)<br />
* [http://wiki.dlang.org/GSOC_2015_Ideas GSoC 2015 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2014_Ideas GSoC 2014 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2013_Ideas GSoC 2013 Ideas] (not accepted)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2012_Ideas GSoC 2012 Ideas] (accepted, 3 slots)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2011_Ideas GSoC 2011 Ideas]<br />
<br />
You may also want to have a look at [https://wiki.dlang.org/SAOC_2018_ideas the Symmetry Autumn of Code ideas page].<br />
<br />
== Tips for students ==<br />
<br />
Please see the "gsoc" articles at our [https://dlang.org/blog/category/gsoc/ official blog] which contain experience reports from students of previous years.<br />
<br />
Daniel Pocock has [http://danielpocock.com/getting-selected-for-google-summer-of-code-2015 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.<br />
<br />
<br />
== Tips for Mentors ==<br />
<br />
If you are interested in mentoring, please check out the [http://en.flossmanuals.net/GSoCMentoring/ organization administrator and mentor] manual for more information.<br />
<br />
[[Category:GSOC]]</div>Greenifyhttps://wiki.dlang.org/?title=GSOC_2019_Ideas&diff=9564GSOC 2019 Ideas2019-03-03T04:29:21Z<p>Greenify: /* DUB: D's package manager */</p>
<hr />
<div>This is the D Language Foundation's Google Summer of Code 2019 page.<br />
<br />
If you are interested in working on a D project as part of GSoC 2019, as either a student or mentor, please contact the GSoC admins at social@dlang.org. Include "GSoC 2019" in the email subject line.<br />
<br />
<br />
== Timeline ==<br />
The timeline for GSoC 2019 [https://developers.google.com/open-source/gsoc/timeline can be found here].<br />
<br />
== Ideas ==<br />
<br />
The D ecosystem is always in need of improvement through the revision of existing projects and the creation of new ones. The core projects like the([http://dlang.org/phobos/index.html standard library]) and the compilers ([[Compilers]]) are always in need of attention. Other important areas include GUI support, integration with other languages, improving and enhancing the tooling, IDE and editor support, and more.<br />
<br />
Please add your project ideas to the list below, being as descriptive as you can in the summaries. Students interested in participating can use the ideas listed here as jumping off points, so the more information you provide, the easier it will be for them to get started. If your idea is particularly complex or nuanced, consider leaving contact information so that interested parties may follow up.<br />
<br />
=== Graphics library for resource constrained embedded systems ===<br />
----<br />
<br />
Create a 2D rasterizer, rich drawing primitives, and 2D graphics library suitable for resource constrained embedded systems (e.g. ARM Cortex-M) to be used in industrial controls, home appliances, medical devices, consumer electronics, and IoT just to name a few. The end goal would be something similar to [https://www.segger.com/products/user-interface/emwin Segger's emWin]. The library would be used to drive LDCs similar to https://www.adafruit.com/product/3396<br />
Requirements:<br />
<br />
* Hardware agnostic; should simply render to a frame buffer<br />
* No dependencies (No Phobos, no C standard library, and no official D runtime).<br />
* Consider using -betterC, but a custom minimal D runtime is also a viable option<br />
<br />
Related work:<br />
<br />
* https://github.com/TurkeyMan/color<br />
* https://bitbucket.org/timosi/minlibd<br />
* https://github.com/JinShil/stm32f42_discovery_demo<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Tabular data container (data frames) ===<br />
----<br />
<br />
Pandas, R and Julia have made [https://github.com/mobileink/data.frame/wiki/What-is-a-Data-Frame%3F data frames] very popular.<br />
As D is getting more interest from data scientist (e.g. [https://github.com/eBay/tsv-utils eBay] or [http://tech.adroll.com/blog/data/2014/11/17/d-is-for-data-science.html AdRoll]) it would be very beneficial to use one language for the entire data analysis pipeline - especially considering that D (in contrast to popular languages like Python, R or Julia) - is compiled to native machine code and gets optimized by the sophisticated LLVM backend.<br />
<br />
Minimum requirements:<br />
<br />
* conversion to and from CSV<br />
* multi-indexing<br />
* column binary operations, e.g. `column1 * column2`<br />
* group-by on an arbitrary number of columns<br />
* column/group aggregations<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
=== C++ interops ===<br />
----<br />
<br />
There are many experiments in transparently interfacing D with C++, notably:<br />
<br />
* [https://github.com/atilaneves/dpp dpp] by Atila Neves, that parses and translates headers on the fly<br />
* [https://wiki.dlang.org/Calypso Calypso] by Elie Morisse that bridges the two languages at the AST level.<br />
* [https://github.com/jacob-carlborg/dstep DStep] by Jacob Carlborg, automatically generates bindings for C and Objective-C code. The task would be to add support for C++.<br />
<br />
There is also a lot of work in bringing STL types to the DRuntime (see https://github.com/dlang/druntime/pull/2310).<br />
<br />
D would greatly benefit by seamlessly integrating the C++ ecosystem. There are many ways to accomplish this goal and it should be discussed with the community.<br />
Andrei already commented on the importance of a tool like Calypso in this thread:<br />
https://forum.dlang.org/post/m9s4cd$2s1v$1@digitalmars.com<br />
<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Persistent Data Structures ===<br />
----<br />
<br />
There is an ongoing effort to reduce the reliance of Phobos on the GC but the GC is not going anywhere given that it has many advantages over manual memory management.<br />
The community would greatly benefit from a wide range of functional programming techniques that have their roots in the usage of immutable and persistent data structures that heavily rely on the GC.<br />
Persistent Data Structures are heavily used in [http://docs.scala-lang.org/overviews/collections/overview.html Scala] and [http://clojure.org/reference/data_structures Clojure] and they allow the programmer to reason about interactivity, sharing and parallelism.<br />
<br />
The focus of this project would be to create a varying range of persistent data structures (sets, vectors, maps, strings, trees, lists, etc...) that respects the range interface and the semantics of Phobos.<br />
<br />
Related Work:<br />
<br />
* https://www.cs.cmu.edu/~rwh/theses/okasaki.pdf <br />
* https://www.worldcat.org/title/rrb-trees-efficient-immutable-vectors/oclc/820379112<br />
* https://www.youtube.com/watch?v=7BFF50BHPPo<br />
* https://www.infoq.com/presentations/Value-Values<br />
* https://github.com/arximboldi/immer<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Language Server Protocol for D ===<br />
----<br />
<br />
The [https://microsoft.github.io/language-server-protocol Language Server Protocol] (LSP) defines the protocol used between an editor or IDE and a language server that provides language features like auto complete, go to definition, find all references etc. Adding features like auto complete, go to definition, or documentation on hover for a programming language takes significant effort. Traditionally this work had to be repeated for each development tool, as each tool provides different APIs for implementing the same feature (see the list of [[Editors]] and [[IDEs]]). Additionally as the existing tools only use `libdparse` (used in [https://github.com/d-language-server/dls DLS] and [https://github.com/dlang-community/DCD DCD]), they lack the ability to perform semantic analysis on the AST and can't evaluate `mixin`'s nor D's very powerful Compile-Time Function Evaluation (CTFE).<br />
A Language Server is meant to provide the language-specific smarts and communicate with development tools over a protocol that enables inter-process communication.<br />
The idea behind the Language Server Protocol (LSP) is to standardize the protocol for how such servers and development tools communicate. This way, single D Language Server can be re-used in multiple development tools, which in turn can support multiple languages with minimal effort.<br />
<br />
Recent development in the DMD compiler [https://dlang.org/blog/2017/08/01/a-dub-case-study-compiling-dmd-as-a-library made it available as a DUB library]. This mean that the compiler itself can be re-used and third-party tools don't have to re-implement e.g. D's complex CTFE. This project is about using the DMD compiler as a library to implement a Language Server for D.<br />
<br />
Proposed Project Mentors: Jacob Carlborg, Sebastian Wilzbach<br />
<br />
How to start:<br />
* [https://github.com/dlang/dmd/blob/master/test/dub_package/frontend.d Simple example] of using DMD as a library<br />
* [https://github.com/jacob-carlborg/dlp More complex use cases]<br />
<br />
=== Mir Project ===<br />
----<br />
<br />
The Mir project is developing numerical libraries for the upcoming numeric packages of<br />
the Dlang standard library. The are numerous projects an interested student could pursue:<br />
<br />
* University project. Your GSoC project can be combined with your scientific research.<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://julialang.org Julia] integration<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://www.numpy.org NumPy] integration<br />
* General purpose BetterC libraries<br />
** I/O betterC Dlang library<br />
** Async betterC Dlang library<br />
** String and format betterC library<br />
* mir-cpuid <br />
** ARM support<br />
** Advanced OS specific support<br />
* mir-glas<br />
** BLAS Level 2 subprograms<br />
** One BLAS Level 3 subprogram. It is OK to do only one! But it must be faster then OpenBLAS, and not slower then Intel MKL.<br />
** Multithreading support for BLAS Level 2<br />
** Multithreading support for BLAS Level 3<br />
<br />
You can get more details on projects related to Mir [https://github.com/libmir/mir/wiki/GSoC-2019 here].<br />
<br />
Its Good To Know:<br />
<br />
To work on the Mir you should be proficient with one of:<br />
<br />
* C<br />
* C++<br />
* LLVM<br />
* Fortran<br />
* Experience with D is not essential.<br />
<br />
To work on the Mir project requires a responsible and self-motivated student.<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
=== DUB: D's package manager ===<br />
----<br />
<br />
[https://github.com/dlang/dub DUB] - D's package manager - is one of the central infrastructure tools in the D world as a convenient build and package management tool for the D community.<br />
With D gaining more and more popularity, it's also a key tool to guarantee D's further adoption.<br />
Thus there are many great ideas to improve DUB:<br />
<br />
* [https://github.com/dlang/dub/wiki/DEP6 git support]<br />
* [https://github.com/dlang/dub/wiki/DEP2 separate compilation and caching]<br />
* [https://github.com/dlang/dub/wiki/DEP3 extensibility through DUB]<br />
* [https://github.com/dlang/dub/wiki/DEP4 control flow directives]<br />
* [https://github.com/dlang/dub/wiki/DEP5 build system support for C/C++]<br />
* support dub install for distributions<br />
* support building a {snap, Debian, Arch, ...} package out of DUB package<br />
<br />
Any of these listed DUB Enhancement Proposals (DEPs) could form the basis of a GSoC Project.<br />
<br />
'''Update:''' A very detailed list of ideas for improving Dub can be found in this [https://forum.dlang.org/post/eftttpylxanvxjhoigqu@forum.dlang.org Forum thread].<br />
<br />
Proposed Project Mentors: Sönke Ludwig, Sebastian Wilzbach<br />
<br />
=== LDC (LLVM-based D compiler) ===<br />
----<br />
<br />
The LDC project provides a portable D programming language compiler with modern optimization and code generation capabilities.<br />
The ever-improving feature set of LLVM opens up many opportunities with D.<br />
A few ideas for a potential GSoC project are:<br />
<br />
* exploiting immutability of variables (notably of structs such as string slices)<br />
* devirtualization<br />
* improve debuginfo<br />
* ASan with GC and multithreading<br />
* function multiversioning<br />
<br />
You might also want to browse the [https://github.com/ldc-developers/ldc/issues LDC's issue tracker] for more ideas.<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== iOS support in LDC ===<br />
----<br />
<br />
Mobile is becoming, or rather is already, the biggest software platform. While LDC already supports the Android platform there's no official support for iOS. The project would consist of adding support for the iOS platform to the LDC compiler, the D runtime library and the D standard library. The goal would be to get support for this platform upstreamed to the LDC main project.<br />
<br />
A lot of existing work has been done but has never been completed or upstreamed: https://github.com/smolt/ldc-iphone-dev.<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Baremetal D runtime ===<br />
----<br />
<br />
Many features in the standard library are implemented by using the C runtime. Reusing the rock-solid work of generations of programmers makes a lot of sense as just outputting via `printf` can be very [https://github.molgen.mpg.de/git-mirror/glibc/blob/20003c49884422da7ffbc459cdeee768a6fee07b/stdio-common/vfprintf.c complex]. However, for embedded environments a programmer often only has a tiny amount of storage available or might not even have a C runtime available for his target.<br />
The idea of this project is to implement the most basic parts of the runtime natively in D, s.t. bare metals programmers can just compile for their target. Implementing features natively in D also means that other targets like [https://wiki.dlang.org/Generating_WebAssembly_with_LDC Web Assembly] will automatically be able to use them too. Another advantage of implementing these basic building blocks in D is that one can take advantage of D's Compile-Time Function Evaluation (CTFE) and optimize the methods even further at compile-time.<br />
<br />
Project focus:<br />
- Implement `memcpy`, `memcmp` and similar in D (with similar performance to C)<br />
- Implement `malloc` and similar in D (with similar performance to C)<br />
<br />
Starting points:<br />
* [https://theartofmachinery.com/2017/02/28/bare_metal_d.html D for Bare Metal Programming (tutorial series]<br />
* [https://github.com/JinShil/stm32f42_discovery_demo Simple demonstration of using D to bare-metal program an STM32F29I Discovery board]<br />
* [https://github.com/JinShil/memcpyD memcpyD]<br />
* [https://wiki.dlang.org/Programming_in_D_tutorial_on_Embedded_Linux_ARM_devices Programming in D tutorial on Embedded Linux ARM devices]<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Header generation for C/C++ ===<br />
----<br />
<br />
With the ever-improving integration between DMD and C/C++, quite a bit of tooling has been developed to generate D header files from C or C++ projects (e.g. [https://github.com/jacob-carlborg/dstep DStep] or [https://github.com/atilaneves/dpp DPP]).<br />
However, for many projects the majority of the source code is now written in D and the reverse step is needed: an automatic way to generate C and C++ headers from a D project.<br />
This would be very valuable for D as it could motivate inter-language projects that typically go C++-fist-with-a-D-binding to work the other way.<br />
<br />
Starting point:<br />
* [https://forum.dlang.org/post/mailman.7146.1551050711.29801.digitalmars-d@puremagic.com NG-Thread: "Make DMD emit C++ .h files same as .di files"]<br />
* [https://github.com/dlang/dmd/pull/8591 Existing specialized work for the DMD codebase)<br />
* [https://gitlab.com/mihails.strasuns/dtoh Existing WIP work for generating C headers)<br />
* [https://github.com/thewilsonator/dtoh Existing WIP work for generating C++ headers, using DMD as a library)<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== GDC (GCC-based D compiler) ===<br />
----<br />
<br />
The GDC compiles uses GCC as a backend to utilize this powerful backend.<br />
Recently, GDC [https://www.phoronix.com/scan.php?page=news_item&px=GCC-9-Merges-D-Language has been accepted as GCC frontend] and will be part of the GCC9 release.<br />
However, GDC still has lots of tasks that the potential students could work on.<br />
<br />
One idea would be to improve GDC's support for betterC by adding a compiler interface to allow using a modular runtime. Right now when GDC uses some feature (TypeInfo, asserts, unittests), it just emits a call to an `extern(C)` function. A much better approach would be to have a defined D API (e.g. `rt.assert.onAssertFailure(...)`). The compiler can then check if it finds `rt.assert.onFailure`. If not, the compiler can the simply disable that feature and provide nice error messages. This could be done for TypeInfo, Exceptions, Asserts, Switch errors, unit test support, etc. In the end, the vision would be to be able to ship a compiler completely without runtime. This compiler should be able to produce bare bones code without any further configuration. Then add a dependency to `drt:core` in the dub configuration to get class support, `dr:exception` for exceptions, etc. The compiler could then automatically detect availability of these features. (Of course manually adding -I paths would work in exactly the same way).<br />
<br />
For more ideas, interested students are encouraged to browse [https://bugzilla.gdcproject.org/describecomponents.cgi GDC's issue list] or getting [https://wiki.dlang.org/GDC in touch with the GDC development team].<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== std.benchmark ===<br />
----<br />
<br />
Ideally every function in Phobos should have its own benchmark suite which is run for every PR to check for performance improvements or regressions.<br />
* Additionally support for the new big O annotation [https://github.com/dlang/phobos/pull/4965 here] would be nice. <br />
* Existing work: [https://github.com/dlang/phobos/pull/794 here], and [https://github.com/dlang/phobos/pull/3695 here], and [https://github.com/atilaneves/unit-threaded/tree/master/source/unit_threaded/randomized here (QuickText-like testing)]. <br />
<br />
Proposed Project Mentors: Sebastian Wilzbach<br />
<br />
=== Jupyter notebook D kernel ===<br />
----<br />
<br />
The Jupyter Notebook is an open-source web application that allows you to create and share documents that contain live code, equations, visualizations and narrative text. Uses include: data cleaning and transformation, numerical simulation, statistical modeling, data visualization, machine learning, and much more.<br />
Jupyter notebooks are extremely popular among data scientist as they allow interactive progress and exploring a solution step by step.<br />
With a bit of work, a statically compiled language can be used in an interactive notebook e.g. [Cling https://blog.jupyter.org/interactive-workflows-for-c-with-jupyter-fe9b54227d92] and Go with<br />
[https://github.com/gopherdata/gophernotes gophernotes].<br />
Apart from being useful to data scientist, a Jupyter D kernel would allow an intuitive exploration of the language for newcomers and people starting with new libraries.<br />
<br />
Existing works:<br />
- [https://github.com/dlang-community/drepl drepl] - simple REPL for D<br />
- [https://github.com/DlangScience/PydMagic PydMagic] - allows to write PyD extension in a notebook.<br />
<br />
Proposed Project Mentor: Sebastian Wilzbach<br />
<br />
=== Functional Reactive Programming ===<br />
----<br />
<br />
Functional reactive programming (FRP) is a programming paradigm for reactive programming (asynchronous dataflow programming) using the building blocks of functional programming (e.g. map, reduce, filter).<br />
The best-known FRP API is the [http://reactivex.io ReactiveX API] whose implementation in D this project would focus.<br />
Note that this project is closely related to the std.eventloop project.<br />
<br />
Proposed Project Mentors: Petar Kirov<br />
<br />
=== BetterC runtime ===<br />
----<br />
<br />
[https://dlang.org/blog/2017/08/23/d-as-a-better-c BetterC] is a subset of D which limits the feature set of D, s.t. it's even easier to migrate from C as no Garbage Collection (GC) is used anymore.<br />
While, this feature is popular for some projects, `-betterC` today means still means a severe restriction in the amount of D features available (see the [https://dlang.org/spec/betterc.html BetterC specification]).<br />
This project is about making more parts of the D runtime betterC-compatible. For example, classes could be allocated with reference-counting instead of using the GC. <br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Java Native Interface (JNI) library ===<br />
----<br />
<br />
D's features allow to write cut down the boilerplate of wrapper drastically.<br />
See the recently published [https://dlang.org/blog/2017/05/31/project-highlight-excel-d excel-d] for a comparison between the C++ implementation for registering a function in Excel and the D way.<br />
Similarly a solid JNI library would open up new many new use cases and allow the Java community to profit even easier from D's features.<br />
<br />
Previous work: [https://github.com/Monnoroch/DJni DJni], [https://github.com/jamesmahler/djvm djvm]<br />
Proposed Project Mentor: TBA<br />
<br />
=== ORM mapping ===<br />
----<br />
<br />
SQLAlchemy is an object-relational mapper which provides "a full suite of well known enterprise-level persistence patterns, designed for efficient and high-performing database access, adapted into a simple and Pythonic domain language".<br />
While there has been some attempts in implementing an ORM in D - none of these got close to the simplicity and usability of SQLAlchemy (see [[Database Libraries]]).<br />
However, with D's CTFE queries could - like std.format's strings - already be checked at compile-time and optimizations could be be applied to the parser and serializer.<br />
<br />
This project would be based on the [http://dconf.org/2016/talks/smith.html proposed std.database abstraction] and focus on creating a general-purpose ORM on top of it.<br />
<br />
See also: Martin Nowak's DConf16 talk about [http://dconf.org/2016/talks/nowak.html Object-Relational Mapper] <br />
<br />
Existing work:<br />
* [https://github.com/huntlabs/hunt-entity hunt-entity]<br />
<br />
Proposed Project Mentor: TBA<br />
<br />
=== std.serialization ===<br />
----<br />
<br />
D has numerous serialization frameworks. From `std.json` to `std.csv` over [https://github.com/dcarp/protobuf-d protobuf] to [https://github.com/vibe-d/vibe.d Vibe.d's] own serialization framework.<br />
The goal of this project is to implement a flexible (de)serialization framework that can be used as a standardized building block for various serialization related things.<br />
One important goal would be to define how a user-specified type has to work in order to make it serializable, as well as to allow the end-user (e.g. a user of std.json) to change the serialization of third-party types that cannot themselves be modified (i.e. let them define their own policies).<br />
<br />
Starting points:<br />
<br />
* [http://vibed.org/api/vibe.data.serialization Vibe.d's serialization framework]<br />
* [https://github.com/jacob-carlborg/orange Orange framework]<br />
<br />
Proposed Project Mentor: Jacob Carlborg<br />
<br />
=== Propose your own project ===<br />
----<br />
<br />
Do you have your own vision for improving D's success? That's great!<br />
Are you convinced that your project helps to advance open source technology related to the D programming language?<br />
Then simply get in touch with D's GSoC org admin (social (at) dlang (dot) org) and potential mentors for your project.<br />
<br />
If you are searching for inspiration, you might want to have a look at the [[DIPs| list of D Improvement Proposals (DIPs)]], the [[Vision/2018H1|high-level vision for this semester]] or the [[Wish_list|wish list]].<br />
<br />
<br />
== Ideas From Previous Years ==<br />
<br />
These GSoC idea pages from the past years which might provide more inspiration for proposing your own idea:<br />
<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2018 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2017 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2016_Ideas GSoC 2016 Ideas] (accepted, 4 slots)<br />
* [http://wiki.dlang.org/GSOC_2015_Ideas GSoC 2015 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2014_Ideas GSoC 2014 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2013_Ideas GSoC 2013 Ideas] (not accepted)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2012_Ideas GSoC 2012 Ideas] (accepted, 3 slots)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2011_Ideas GSoC 2011 Ideas]<br />
<br />
You may also want to have a look at [https://wiki.dlang.org/SAOC_2018_ideas the Symmetry Autumn of Code ideas page].<br />
<br />
== Tips for students ==<br />
<br />
Please see the "gsoc" articles at our [https://dlang.org/blog/category/gsoc/ official blog] which contain experience reports from students of previous years.<br />
<br />
Daniel Pocock has [http://danielpocock.com/getting-selected-for-google-summer-of-code-2015 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.<br />
<br />
<br />
== Tips for Mentors ==<br />
<br />
If you are interested in mentoring, please check out the [http://en.flossmanuals.net/GSoCMentoring/ organization administrator and mentor] manual for more information.<br />
<br />
[[Category:GSOC]]</div>Greenifyhttps://wiki.dlang.org/?title=Template:Latest_DMD_Version_Raw&diff=9563Template:Latest DMD Version Raw2019-03-03T04:26:24Z<p>Greenify: </p>
<hr />
<div>2.085.0</div>Greenifyhttps://wiki.dlang.org/?title=GSOC_2019_Ideas&diff=9562GSOC 2019 Ideas2019-02-28T16:40:35Z<p>Greenify: /* BetterC runtime */ fix style</p>
<hr />
<div>This is the D Language Foundation's Google Summer of Code 2019 page.<br />
<br />
If you are interested in working on a D project as part of GSoC 2019, as either a student or mentor, please contact the GSoC admins at social@dlang.org. Include "GSoC 2019" in the email subject line.<br />
<br />
<br />
== Timeline ==<br />
The timeline for GSoC 2019 [https://developers.google.com/open-source/gsoc/timeline can be found here].<br />
<br />
== Ideas ==<br />
<br />
The D ecosystem is always in need of improvement through the revision of existing projects and the creation of new ones. The core projects like the([http://dlang.org/phobos/index.html standard library]) and the compilers ([[Compilers]]) are always in need of attention. Other important areas include GUI support, integration with other languages, improving and enhancing the tooling, IDE and editor support, and more.<br />
<br />
Please add your project ideas to the list below, being as descriptive as you can in the summaries. Students interested in participating can use the ideas listed here as jumping off points, so the more information you provide, the easier it will be for them to get started. If your idea is particularly complex or nuanced, consider leaving contact information so that interested parties may follow up.<br />
<br />
=== Graphics library for resource constrained embedded systems ===<br />
----<br />
<br />
Create a 2D rasterizer, rich drawing primitives, and 2D graphics library suitable for resource constrained embedded systems (e.g. ARM Cortex-M) to be used in industrial controls, home appliances, medical devices, consumer electronics, and IoT just to name a few. The end goal would be something similar to [https://www.segger.com/products/user-interface/emwin Segger's emWin]. The library would be used to drive LDCs similar to https://www.adafruit.com/product/3396<br />
Requirements:<br />
<br />
* Hardware agnostic; should simply render to a frame buffer<br />
* No dependencies (No Phobos, no C standard library, and no official D runtime).<br />
* Consider using -betterC, but a custom minimal D runtime is also a viable option<br />
<br />
Related work:<br />
<br />
* https://github.com/TurkeyMan/color<br />
* https://bitbucket.org/timosi/minlibd<br />
* https://github.com/JinShil/stm32f42_discovery_demo<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Tabular data container (data frames) ===<br />
----<br />
<br />
Pandas, R and Julia have made [https://github.com/mobileink/data.frame/wiki/What-is-a-Data-Frame%3F data frames] very popular.<br />
As D is getting more interest from data scientist (e.g. [https://github.com/eBay/tsv-utils eBay] or [http://tech.adroll.com/blog/data/2014/11/17/d-is-for-data-science.html AdRoll]) it would be very beneficial to use one language for the entire data analysis pipeline - especially considering that D (in contrast to popular languages like Python, R or Julia) - is compiled to native machine code and gets optimized by the sophisticated LLVM backend.<br />
<br />
Minimum requirements:<br />
<br />
* conversion to and from CSV<br />
* multi-indexing<br />
* column binary operations, e.g. `column1 * column2`<br />
* group-by on an arbitrary number of columns<br />
* column/group aggregations<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
=== C++ interops ===<br />
----<br />
<br />
There are many experiments in transparently interfacing D with C++, notably:<br />
<br />
* [https://github.com/atilaneves/dpp dpp] by Atila Neves, that parses and translates headers on the fly<br />
* [https://wiki.dlang.org/Calypso Calypso] by Elie Morisse that bridges the two languages at the AST level.<br />
* [https://github.com/jacob-carlborg/dstep DStep] by Jacob Carlborg, automatically generates bindings for C and Objective-C code. The task would be to add support for C++.<br />
<br />
There is also a lot of work in bringing STL types to the DRuntime (see https://github.com/dlang/druntime/pull/2310).<br />
<br />
D would greatly benefit by seamlessly integrating the C++ ecosystem. There are many ways to accomplish this goal and it should be discussed with the community.<br />
Andrei already commented on the importance of a tool like Calypso in this thread:<br />
https://forum.dlang.org/post/m9s4cd$2s1v$1@digitalmars.com<br />
<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Persistent Data Structures ===<br />
----<br />
<br />
There is an ongoing effort to reduce the reliance of Phobos on the GC but the GC is not going anywhere given that it has many advantages over manual memory management.<br />
The community would greatly benefit from a wide range of functional programming techniques that have their roots in the usage of immutable and persistent data structures that heavily rely on the GC.<br />
Persistent Data Structures are heavily used in [http://docs.scala-lang.org/overviews/collections/overview.html Scala] and [http://clojure.org/reference/data_structures Clojure] and they allow the programmer to reason about interactivity, sharing and parallelism.<br />
<br />
The focus of this project would be to create a varying range of persistent data structures (sets, vectors, maps, strings, trees, lists, etc...) that respects the range interface and the semantics of Phobos.<br />
<br />
Related Work:<br />
<br />
* https://www.cs.cmu.edu/~rwh/theses/okasaki.pdf <br />
* https://www.worldcat.org/title/rrb-trees-efficient-immutable-vectors/oclc/820379112<br />
* https://www.youtube.com/watch?v=7BFF50BHPPo<br />
* https://www.infoq.com/presentations/Value-Values<br />
* https://github.com/arximboldi/immer<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Language Server Protocol for D ===<br />
----<br />
<br />
The [https://microsoft.github.io/language-server-protocol Language Server Protocol] (LSP) defines the protocol used between an editor or IDE and a language server that provides language features like auto complete, go to definition, find all references etc. Adding features like auto complete, go to definition, or documentation on hover for a programming language takes significant effort. Traditionally this work had to be repeated for each development tool, as each tool provides different APIs for implementing the same feature (see the list of [[Editors]] and [[IDEs]]). Additionally as the existing tools only use `libdparse` (used in [https://github.com/d-language-server/dls DLS] and [https://github.com/dlang-community/DCD DCD]), they lack the ability to perform semantic analysis on the AST and can't evaluate `mixin`'s nor D's very powerful Compile-Time Function Evaluation (CTFE).<br />
A Language Server is meant to provide the language-specific smarts and communicate with development tools over a protocol that enables inter-process communication.<br />
The idea behind the Language Server Protocol (LSP) is to standardize the protocol for how such servers and development tools communicate. This way, single D Language Server can be re-used in multiple development tools, which in turn can support multiple languages with minimal effort.<br />
<br />
Recent development in the DMD compiler [https://dlang.org/blog/2017/08/01/a-dub-case-study-compiling-dmd-as-a-library made it available as a DUB library]. This mean that the compiler itself can be re-used and third-party tools don't have to re-implement e.g. D's complex CTFE. This project is about using the DMD compiler as a library to implement a Language Server for D.<br />
<br />
Proposed Project Mentors: Jacob Carlborg, Sebastian Wilzbach<br />
<br />
How to start:<br />
* [https://github.com/dlang/dmd/blob/master/test/dub_package/frontend.d Simple example] of using DMD as a library<br />
* [https://github.com/jacob-carlborg/dlp More complex use cases]<br />
<br />
=== Mir Project ===<br />
----<br />
<br />
The Mir project is developing numerical libraries for the upcoming numeric packages of<br />
the Dlang standard library. The are numerous projects an interested student could pursue:<br />
<br />
* University project. Your GSoC project can be combined with your scientific research.<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://julialang.org Julia] integration<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://www.numpy.org NumPy] integration<br />
* General purpose BetterC libraries<br />
** I/O betterC Dlang library<br />
** Async betterC Dlang library<br />
** String and format betterC library<br />
* mir-cpuid <br />
** ARM support<br />
** Advanced OS specific support<br />
* mir-glas<br />
** BLAS Level 2 subprograms<br />
** One BLAS Level 3 subprogram. It is OK to do only one! But it must be faster then OpenBLAS, and not slower then Intel MKL.<br />
** Multithreading support for BLAS Level 2<br />
** Multithreading support for BLAS Level 3<br />
<br />
You can get more details on projects related to Mir [https://github.com/libmir/mir/wiki/GSoC-2019 here].<br />
<br />
Its Good To Know:<br />
<br />
To work on the Mir you should be proficient with one of:<br />
<br />
* C<br />
* C++<br />
* LLVM<br />
* Fortran<br />
* Experience with D is not essential.<br />
<br />
To work on the Mir project requires a responsible and self-motivated student.<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
=== DUB: D's package manager ===<br />
----<br />
<br />
[https://github.com/dlang/dub DUB] - D's package manager - is one of the central infrastructure tools in the D world as a convenient build and package management tool for the D community.<br />
With D gaining more and more popularity, it's also a key tool to guarantee D's further adoption.<br />
Thus there are many great ideas to improve DUB:<br />
<br />
* [https://github.com/dlang/dub/wiki/DEP6 git support]<br />
* [https://github.com/dlang/dub/wiki/DEP2 separate compilation and caching]<br />
* [https://github.com/dlang/dub/wiki/DEP3 extensibility through DUB]<br />
* [https://github.com/dlang/dub/wiki/DEP4 control flow directives]<br />
* [https://github.com/dlang/dub/wiki/DEP5 build system support for C/C++]<br />
* support dub install for distributions<br />
* support building a {snap, Debian, Arch, ...} package out of DUB package<br />
<br />
Any of these listed DUB Enhancement Proposals (DEPs) could form the basis of a GSoC Project.<br />
<br />
Proposed Project Mentors: Sönke Ludwig, Sebastian Wilzbach<br />
<br />
=== LDC (LLVM-based D compiler) ===<br />
----<br />
<br />
The LDC project provides a portable D programming language compiler with modern optimization and code generation capabilities.<br />
The ever-improving feature set of LLVM opens up many opportunities with D.<br />
A few ideas for a potential GSoC project are:<br />
<br />
* exploiting immutability of variables (notably of structs such as string slices)<br />
* devirtualization<br />
* improve debuginfo<br />
* ASan with GC and multithreading<br />
* function multiversioning<br />
<br />
You might also want to browse the [https://github.com/ldc-developers/ldc/issues LDC's issue tracker] for more ideas.<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== iOS support in LDC ===<br />
----<br />
<br />
Mobile is becoming, or rather is already, the biggest software platform. While LDC already supports the Android platform there's no official support for iOS. The project would consist of adding support for the iOS platform to the LDC compiler, the D runtime library and the D standard library. The goal would be to get support for this platform upstreamed to the LDC main project.<br />
<br />
A lot of existing work has been done but has never been completed or upstreamed: https://github.com/smolt/ldc-iphone-dev.<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Baremetal D runtime ===<br />
----<br />
<br />
Many features in the standard library are implemented by using the C runtime. Reusing the rock-solid work of generations of programmers makes a lot of sense as just outputting via `printf` can be very [https://github.molgen.mpg.de/git-mirror/glibc/blob/20003c49884422da7ffbc459cdeee768a6fee07b/stdio-common/vfprintf.c complex]. However, for embedded environments a programmer often only has a tiny amount of storage available or might not even have a C runtime available for his target.<br />
The idea of this project is to implement the most basic parts of the runtime natively in D, s.t. bare metals programmers can just compile for their target. Implementing features natively in D also means that other targets like [https://wiki.dlang.org/Generating_WebAssembly_with_LDC Web Assembly] will automatically be able to use them too. Another advantage of implementing these basic building blocks in D is that one can take advantage of D's Compile-Time Function Evaluation (CTFE) and optimize the methods even further at compile-time.<br />
<br />
Project focus:<br />
- Implement `memcpy`, `memcmp` and similar in D (with similar performance to C)<br />
- Implement `malloc` and similar in D (with similar performance to C)<br />
<br />
Starting points:<br />
* [https://theartofmachinery.com/2017/02/28/bare_metal_d.html D for Bare Metal Programming (tutorial series]<br />
* [https://github.com/JinShil/stm32f42_discovery_demo Simple demonstration of using D to bare-metal program an STM32F29I Discovery board]<br />
* [https://github.com/JinShil/memcpyD memcpyD]<br />
* [https://wiki.dlang.org/Programming_in_D_tutorial_on_Embedded_Linux_ARM_devices Programming in D tutorial on Embedded Linux ARM devices]<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Header generation for C/C++ ===<br />
----<br />
<br />
With the ever-improving integration between DMD and C/C++, quite a bit of tooling has been developed to generate D header files from C or C++ projects (e.g. [https://github.com/jacob-carlborg/dstep DStep] or [https://github.com/atilaneves/dpp DPP]).<br />
However, for many projects the majority of the source code is now written in D and the reverse step is needed: an automatic way to generate C and C++ headers from a D project.<br />
This would be very valuable for D as it could motivate inter-language projects that typically go C++-fist-with-a-D-binding to work the other way.<br />
<br />
Starting point:<br />
* [https://forum.dlang.org/post/mailman.7146.1551050711.29801.digitalmars-d@puremagic.com NG-Thread: "Make DMD emit C++ .h files same as .di files"]<br />
* [https://github.com/dlang/dmd/pull/8591 Existing specialized work for the DMD codebase)<br />
* [https://gitlab.com/mihails.strasuns/dtoh Existing WIP work for generating C headers)<br />
* [https://github.com/thewilsonator/dtoh Existing WIP work for generating C++ headers, using DMD as a library)<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== GDC (GCC-based D compiler) ===<br />
----<br />
<br />
The GDC compiles uses GCC as a backend to utilize this powerful backend.<br />
Recently, GDC [https://www.phoronix.com/scan.php?page=news_item&px=GCC-9-Merges-D-Language has been accepted as GCC frontend] and will be part of the GCC9 release.<br />
However, GDC still has lots of tasks that the potential students could work on.<br />
<br />
One idea would be to improve GDC's support for betterC by adding a compiler interface to allow using a modular runtime. Right now when GDC uses some feature (TypeInfo, asserts, unittests), it just emits a call to an `extern(C)` function. A much better approach would be to have a defined D API (e.g. `rt.assert.onAssertFailure(...)`). The compiler can then check if it finds `rt.assert.onFailure`. If not, the compiler can the simply disable that feature and provide nice error messages. This could be done for TypeInfo, Exceptions, Asserts, Switch errors, unit test support, etc. In the end, the vision would be to be able to ship a compiler completely without runtime. This compiler should be able to produce bare bones code without any further configuration. Then add a dependency to `drt:core` in the dub configuration to get class support, `dr:exception` for exceptions, etc. The compiler could then automatically detect availability of these features. (Of course manually adding -I paths would work in exactly the same way).<br />
<br />
For more ideas, interested students are encouraged to browse [https://bugzilla.gdcproject.org/describecomponents.cgi GDC's issue list] or getting [https://wiki.dlang.org/GDC in touch with the GDC development team].<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== std.benchmark ===<br />
----<br />
<br />
Ideally every function in Phobos should have its own benchmark suite which is run for every PR to check for performance improvements or regressions.<br />
* Additionally support for the new big O annotation [https://github.com/dlang/phobos/pull/4965 here] would be nice. <br />
* Existing work: [https://github.com/dlang/phobos/pull/794 here], and [https://github.com/dlang/phobos/pull/3695 here], and [https://github.com/atilaneves/unit-threaded/tree/master/source/unit_threaded/randomized here (QuickText-like testing)]. <br />
<br />
Proposed Project Mentors: Sebastian Wilzbach<br />
<br />
=== Jupyter notebook D kernel ===<br />
----<br />
<br />
The Jupyter Notebook is an open-source web application that allows you to create and share documents that contain live code, equations, visualizations and narrative text. Uses include: data cleaning and transformation, numerical simulation, statistical modeling, data visualization, machine learning, and much more.<br />
Jupyter notebooks are extremely popular among data scientist as they allow interactive progress and exploring a solution step by step.<br />
With a bit of work, a statically compiled language can be used in an interactive notebook e.g. [Cling https://blog.jupyter.org/interactive-workflows-for-c-with-jupyter-fe9b54227d92] and Go with<br />
[https://github.com/gopherdata/gophernotes gophernotes].<br />
Apart from being useful to data scientist, a Jupyter D kernel would allow an intuitive exploration of the language for newcomers and people starting with new libraries.<br />
<br />
Existing works:<br />
- [https://github.com/dlang-community/drepl drepl] - simple REPL for D<br />
- [https://github.com/DlangScience/PydMagic PydMagic] - allows to write PyD extension in a notebook.<br />
<br />
Proposed Project Mentor: Sebastian Wilzbach<br />
<br />
=== Functional Reactive Programming ===<br />
----<br />
<br />
Functional reactive programming (FRP) is a programming paradigm for reactive programming (asynchronous dataflow programming) using the building blocks of functional programming (e.g. map, reduce, filter).<br />
The best-known FRP API is the [http://reactivex.io ReactiveX API] whose implementation in D this project would focus.<br />
Note that this project is closely related to the std.eventloop project.<br />
<br />
Proposed Project Mentors: Petar Kirov<br />
<br />
=== BetterC runtime ===<br />
----<br />
<br />
[https://dlang.org/blog/2017/08/23/d-as-a-better-c BetterC] is a subset of D which limits the feature set of D, s.t. it's even easier to migrate from C as no Garbage Collection (GC) is used anymore.<br />
While, this feature is popular for some projects, `-betterC` today means still means a severe restriction in the amount of D features available (see the [https://dlang.org/spec/betterc.html BetterC specification]).<br />
This project is about making more parts of the D runtime betterC-compatible. For example, classes could be allocated with reference-counting instead of using the GC. <br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Java Native Interface (JNI) library ===<br />
----<br />
<br />
D's features allow to write cut down the boilerplate of wrapper drastically.<br />
See the recently published [https://dlang.org/blog/2017/05/31/project-highlight-excel-d excel-d] for a comparison between the C++ implementation for registering a function in Excel and the D way.<br />
Similarly a solid JNI library would open up new many new use cases and allow the Java community to profit even easier from D's features.<br />
<br />
Previous work: [https://github.com/Monnoroch/DJni DJni], [https://github.com/jamesmahler/djvm djvm]<br />
Proposed Project Mentor: TBA<br />
<br />
=== ORM mapping ===<br />
----<br />
<br />
SQLAlchemy is an object-relational mapper which provides "a full suite of well known enterprise-level persistence patterns, designed for efficient and high-performing database access, adapted into a simple and Pythonic domain language".<br />
While there has been some attempts in implementing an ORM in D - none of these got close to the simplicity and usability of SQLAlchemy (see [[Database Libraries]]).<br />
However, with D's CTFE queries could - like std.format's strings - already be checked at compile-time and optimizations could be be applied to the parser and serializer.<br />
<br />
This project would be based on the [http://dconf.org/2016/talks/smith.html proposed std.database abstraction] and focus on creating a general-purpose ORM on top of it.<br />
<br />
See also: Martin Nowak's DConf16 talk about [http://dconf.org/2016/talks/nowak.html Object-Relational Mapper] <br />
<br />
Existing work:<br />
* [https://github.com/huntlabs/hunt-entity hunt-entity]<br />
<br />
Proposed Project Mentor: TBA<br />
<br />
=== std.serialization ===<br />
----<br />
<br />
D has numerous serialization frameworks. From `std.json` to `std.csv` over [https://github.com/dcarp/protobuf-d protobuf] to [https://github.com/vibe-d/vibe.d Vibe.d's] own serialization framework.<br />
The goal of this project is to implement a flexible (de)serialization framework that can be used as a standardized building block for various serialization related things.<br />
One important goal would be to define how a user-specified type has to work in order to make it serializable, as well as to allow the end-user (e.g. a user of std.json) to change the serialization of third-party types that cannot themselves be modified (i.e. let them define their own policies).<br />
<br />
Starting points:<br />
<br />
* [http://vibed.org/api/vibe.data.serialization Vibe.d's serialization framework]<br />
* [https://github.com/jacob-carlborg/orange Orange framework]<br />
<br />
Proposed Project Mentor: Jacob Carlborg<br />
<br />
=== Propose your own project ===<br />
----<br />
<br />
Do you have your own vision for improving D's success? That's great!<br />
Are you convinced that your project helps to advance open source technology related to the D programming language?<br />
Then simply get in touch with D's GSoC org admin (social (at) dlang (dot) org) and potential mentors for your project.<br />
<br />
If you are searching for inspiration, you might want to have a look at the [[DIPs| list of D Improvement Proposals (DIPs)]], the [[Vision/2018H1|high-level vision for this semester]] or the [[Wish_list|wish list]].<br />
<br />
<br />
== Ideas From Previous Years ==<br />
<br />
These GSoC idea pages from the past years which might provide more inspiration for proposing your own idea:<br />
<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2018 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2017 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2016_Ideas GSoC 2016 Ideas] (accepted, 4 slots)<br />
* [http://wiki.dlang.org/GSOC_2015_Ideas GSoC 2015 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2014_Ideas GSoC 2014 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2013_Ideas GSoC 2013 Ideas] (not accepted)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2012_Ideas GSoC 2012 Ideas] (accepted, 3 slots)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2011_Ideas GSoC 2011 Ideas]<br />
<br />
You may also want to have a look at [https://wiki.dlang.org/SAOC_2018_ideas the Symmetry Autumn of Code ideas page].<br />
<br />
== Tips for students ==<br />
<br />
Please see the "gsoc" articles at our [https://dlang.org/blog/category/gsoc/ official blog] which contain experience reports from students of previous years.<br />
<br />
Daniel Pocock has [http://danielpocock.com/getting-selected-for-google-summer-of-code-2015 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.<br />
<br />
<br />
== Tips for Mentors ==<br />
<br />
If you are interested in mentoring, please check out the [http://en.flossmanuals.net/GSoCMentoring/ organization administrator and mentor] manual for more information.<br />
<br />
[[Category:GSOC]]</div>Greenifyhttps://wiki.dlang.org/?title=GSOC_2019_Ideas&diff=9561GSOC 2019 Ideas2019-02-28T16:37:11Z<p>Greenify: Added GDC</p>
<hr />
<div>This is the D Language Foundation's Google Summer of Code 2019 page.<br />
<br />
If you are interested in working on a D project as part of GSoC 2019, as either a student or mentor, please contact the GSoC admins at social@dlang.org. Include "GSoC 2019" in the email subject line.<br />
<br />
<br />
== Timeline ==<br />
The timeline for GSoC 2019 [https://developers.google.com/open-source/gsoc/timeline can be found here].<br />
<br />
== Ideas ==<br />
<br />
The D ecosystem is always in need of improvement through the revision of existing projects and the creation of new ones. The core projects like the([http://dlang.org/phobos/index.html standard library]) and the compilers ([[Compilers]]) are always in need of attention. Other important areas include GUI support, integration with other languages, improving and enhancing the tooling, IDE and editor support, and more.<br />
<br />
Please add your project ideas to the list below, being as descriptive as you can in the summaries. Students interested in participating can use the ideas listed here as jumping off points, so the more information you provide, the easier it will be for them to get started. If your idea is particularly complex or nuanced, consider leaving contact information so that interested parties may follow up.<br />
<br />
=== Graphics library for resource constrained embedded systems ===<br />
----<br />
<br />
Create a 2D rasterizer, rich drawing primitives, and 2D graphics library suitable for resource constrained embedded systems (e.g. ARM Cortex-M) to be used in industrial controls, home appliances, medical devices, consumer electronics, and IoT just to name a few. The end goal would be something similar to [https://www.segger.com/products/user-interface/emwin Segger's emWin]. The library would be used to drive LDCs similar to https://www.adafruit.com/product/3396<br />
Requirements:<br />
<br />
* Hardware agnostic; should simply render to a frame buffer<br />
* No dependencies (No Phobos, no C standard library, and no official D runtime).<br />
* Consider using -betterC, but a custom minimal D runtime is also a viable option<br />
<br />
Related work:<br />
<br />
* https://github.com/TurkeyMan/color<br />
* https://bitbucket.org/timosi/minlibd<br />
* https://github.com/JinShil/stm32f42_discovery_demo<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Tabular data container (data frames) ===<br />
----<br />
<br />
Pandas, R and Julia have made [https://github.com/mobileink/data.frame/wiki/What-is-a-Data-Frame%3F data frames] very popular.<br />
As D is getting more interest from data scientist (e.g. [https://github.com/eBay/tsv-utils eBay] or [http://tech.adroll.com/blog/data/2014/11/17/d-is-for-data-science.html AdRoll]) it would be very beneficial to use one language for the entire data analysis pipeline - especially considering that D (in contrast to popular languages like Python, R or Julia) - is compiled to native machine code and gets optimized by the sophisticated LLVM backend.<br />
<br />
Minimum requirements:<br />
<br />
* conversion to and from CSV<br />
* multi-indexing<br />
* column binary operations, e.g. `column1 * column2`<br />
* group-by on an arbitrary number of columns<br />
* column/group aggregations<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
=== C++ interops ===<br />
----<br />
<br />
There are many experiments in transparently interfacing D with C++, notably:<br />
<br />
* [https://github.com/atilaneves/dpp dpp] by Atila Neves, that parses and translates headers on the fly<br />
* [https://wiki.dlang.org/Calypso Calypso] by Elie Morisse that bridges the two languages at the AST level.<br />
* [https://github.com/jacob-carlborg/dstep DStep] by Jacob Carlborg, automatically generates bindings for C and Objective-C code. The task would be to add support for C++.<br />
<br />
There is also a lot of work in bringing STL types to the DRuntime (see https://github.com/dlang/druntime/pull/2310).<br />
<br />
D would greatly benefit by seamlessly integrating the C++ ecosystem. There are many ways to accomplish this goal and it should be discussed with the community.<br />
Andrei already commented on the importance of a tool like Calypso in this thread:<br />
https://forum.dlang.org/post/m9s4cd$2s1v$1@digitalmars.com<br />
<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Persistent Data Structures ===<br />
----<br />
<br />
There is an ongoing effort to reduce the reliance of Phobos on the GC but the GC is not going anywhere given that it has many advantages over manual memory management.<br />
The community would greatly benefit from a wide range of functional programming techniques that have their roots in the usage of immutable and persistent data structures that heavily rely on the GC.<br />
Persistent Data Structures are heavily used in [http://docs.scala-lang.org/overviews/collections/overview.html Scala] and [http://clojure.org/reference/data_structures Clojure] and they allow the programmer to reason about interactivity, sharing and parallelism.<br />
<br />
The focus of this project would be to create a varying range of persistent data structures (sets, vectors, maps, strings, trees, lists, etc...) that respects the range interface and the semantics of Phobos.<br />
<br />
Related Work:<br />
<br />
* https://www.cs.cmu.edu/~rwh/theses/okasaki.pdf <br />
* https://www.worldcat.org/title/rrb-trees-efficient-immutable-vectors/oclc/820379112<br />
* https://www.youtube.com/watch?v=7BFF50BHPPo<br />
* https://www.infoq.com/presentations/Value-Values<br />
* https://github.com/arximboldi/immer<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Language Server Protocol for D ===<br />
----<br />
<br />
The [https://microsoft.github.io/language-server-protocol Language Server Protocol] (LSP) defines the protocol used between an editor or IDE and a language server that provides language features like auto complete, go to definition, find all references etc. Adding features like auto complete, go to definition, or documentation on hover for a programming language takes significant effort. Traditionally this work had to be repeated for each development tool, as each tool provides different APIs for implementing the same feature (see the list of [[Editors]] and [[IDEs]]). Additionally as the existing tools only use `libdparse` (used in [https://github.com/d-language-server/dls DLS] and [https://github.com/dlang-community/DCD DCD]), they lack the ability to perform semantic analysis on the AST and can't evaluate `mixin`'s nor D's very powerful Compile-Time Function Evaluation (CTFE).<br />
A Language Server is meant to provide the language-specific smarts and communicate with development tools over a protocol that enables inter-process communication.<br />
The idea behind the Language Server Protocol (LSP) is to standardize the protocol for how such servers and development tools communicate. This way, single D Language Server can be re-used in multiple development tools, which in turn can support multiple languages with minimal effort.<br />
<br />
Recent development in the DMD compiler [https://dlang.org/blog/2017/08/01/a-dub-case-study-compiling-dmd-as-a-library made it available as a DUB library]. This mean that the compiler itself can be re-used and third-party tools don't have to re-implement e.g. D's complex CTFE. This project is about using the DMD compiler as a library to implement a Language Server for D.<br />
<br />
Proposed Project Mentors: Jacob Carlborg, Sebastian Wilzbach<br />
<br />
How to start:<br />
* [https://github.com/dlang/dmd/blob/master/test/dub_package/frontend.d Simple example] of using DMD as a library<br />
* [https://github.com/jacob-carlborg/dlp More complex use cases]<br />
<br />
=== Mir Project ===<br />
----<br />
<br />
The Mir project is developing numerical libraries for the upcoming numeric packages of<br />
the Dlang standard library. The are numerous projects an interested student could pursue:<br />
<br />
* University project. Your GSoC project can be combined with your scientific research.<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://julialang.org Julia] integration<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://www.numpy.org NumPy] integration<br />
* General purpose BetterC libraries<br />
** I/O betterC Dlang library<br />
** Async betterC Dlang library<br />
** String and format betterC library<br />
* mir-cpuid <br />
** ARM support<br />
** Advanced OS specific support<br />
* mir-glas<br />
** BLAS Level 2 subprograms<br />
** One BLAS Level 3 subprogram. It is OK to do only one! But it must be faster then OpenBLAS, and not slower then Intel MKL.<br />
** Multithreading support for BLAS Level 2<br />
** Multithreading support for BLAS Level 3<br />
<br />
You can get more details on projects related to Mir [https://github.com/libmir/mir/wiki/GSoC-2019 here].<br />
<br />
Its Good To Know:<br />
<br />
To work on the Mir you should be proficient with one of:<br />
<br />
* C<br />
* C++<br />
* LLVM<br />
* Fortran<br />
* Experience with D is not essential.<br />
<br />
To work on the Mir project requires a responsible and self-motivated student.<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
=== DUB: D's package manager ===<br />
----<br />
<br />
[https://github.com/dlang/dub DUB] - D's package manager - is one of the central infrastructure tools in the D world as a convenient build and package management tool for the D community.<br />
With D gaining more and more popularity, it's also a key tool to guarantee D's further adoption.<br />
Thus there are many great ideas to improve DUB:<br />
<br />
* [https://github.com/dlang/dub/wiki/DEP6 git support]<br />
* [https://github.com/dlang/dub/wiki/DEP2 separate compilation and caching]<br />
* [https://github.com/dlang/dub/wiki/DEP3 extensibility through DUB]<br />
* [https://github.com/dlang/dub/wiki/DEP4 control flow directives]<br />
* [https://github.com/dlang/dub/wiki/DEP5 build system support for C/C++]<br />
* support dub install for distributions<br />
* support building a {snap, Debian, Arch, ...} package out of DUB package<br />
<br />
Any of these listed DUB Enhancement Proposals (DEPs) could form the basis of a GSoC Project.<br />
<br />
Proposed Project Mentors: Sönke Ludwig, Sebastian Wilzbach<br />
<br />
=== LDC (LLVM-based D compiler) ===<br />
----<br />
<br />
The LDC project provides a portable D programming language compiler with modern optimization and code generation capabilities.<br />
The ever-improving feature set of LLVM opens up many opportunities with D.<br />
A few ideas for a potential GSoC project are:<br />
<br />
* exploiting immutability of variables (notably of structs such as string slices)<br />
* devirtualization<br />
* improve debuginfo<br />
* ASan with GC and multithreading<br />
* function multiversioning<br />
<br />
You might also want to browse the [https://github.com/ldc-developers/ldc/issues LDC's issue tracker] for more ideas.<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== iOS support in LDC ===<br />
----<br />
<br />
Mobile is becoming, or rather is already, the biggest software platform. While LDC already supports the Android platform there's no official support for iOS. The project would consist of adding support for the iOS platform to the LDC compiler, the D runtime library and the D standard library. The goal would be to get support for this platform upstreamed to the LDC main project.<br />
<br />
A lot of existing work has been done but has never been completed or upstreamed: https://github.com/smolt/ldc-iphone-dev.<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Baremetal D runtime ===<br />
----<br />
<br />
Many features in the standard library are implemented by using the C runtime. Reusing the rock-solid work of generations of programmers makes a lot of sense as just outputting via `printf` can be very [https://github.molgen.mpg.de/git-mirror/glibc/blob/20003c49884422da7ffbc459cdeee768a6fee07b/stdio-common/vfprintf.c complex]. However, for embedded environments a programmer often only has a tiny amount of storage available or might not even have a C runtime available for his target.<br />
The idea of this project is to implement the most basic parts of the runtime natively in D, s.t. bare metals programmers can just compile for their target. Implementing features natively in D also means that other targets like [https://wiki.dlang.org/Generating_WebAssembly_with_LDC Web Assembly] will automatically be able to use them too. Another advantage of implementing these basic building blocks in D is that one can take advantage of D's Compile-Time Function Evaluation (CTFE) and optimize the methods even further at compile-time.<br />
<br />
Project focus:<br />
- Implement `memcpy`, `memcmp` and similar in D (with similar performance to C)<br />
- Implement `malloc` and similar in D (with similar performance to C)<br />
<br />
Starting points:<br />
* [https://theartofmachinery.com/2017/02/28/bare_metal_d.html D for Bare Metal Programming (tutorial series]<br />
* [https://github.com/JinShil/stm32f42_discovery_demo Simple demonstration of using D to bare-metal program an STM32F29I Discovery board]<br />
* [https://github.com/JinShil/memcpyD memcpyD]<br />
* [https://wiki.dlang.org/Programming_in_D_tutorial_on_Embedded_Linux_ARM_devices Programming in D tutorial on Embedded Linux ARM devices]<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Header generation for C/C++ ===<br />
----<br />
<br />
With the ever-improving integration between DMD and C/C++, quite a bit of tooling has been developed to generate D header files from C or C++ projects (e.g. [https://github.com/jacob-carlborg/dstep DStep] or [https://github.com/atilaneves/dpp DPP]).<br />
However, for many projects the majority of the source code is now written in D and the reverse step is needed: an automatic way to generate C and C++ headers from a D project.<br />
This would be very valuable for D as it could motivate inter-language projects that typically go C++-fist-with-a-D-binding to work the other way.<br />
<br />
Starting point:<br />
* [https://forum.dlang.org/post/mailman.7146.1551050711.29801.digitalmars-d@puremagic.com NG-Thread: "Make DMD emit C++ .h files same as .di files"]<br />
* [https://github.com/dlang/dmd/pull/8591 Existing specialized work for the DMD codebase)<br />
* [https://gitlab.com/mihails.strasuns/dtoh Existing WIP work for generating C headers)<br />
* [https://github.com/thewilsonator/dtoh Existing WIP work for generating C++ headers, using DMD as a library)<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== GDC (GCC-based D compiler) ===<br />
----<br />
<br />
The GDC compiles uses GCC as a backend to utilize this powerful backend.<br />
Recently, GDC [https://www.phoronix.com/scan.php?page=news_item&px=GCC-9-Merges-D-Language has been accepted as GCC frontend] and will be part of the GCC9 release.<br />
However, GDC still has lots of tasks that the potential students could work on.<br />
<br />
One idea would be to improve GDC's support for betterC by adding a compiler interface to allow using a modular runtime. Right now when GDC uses some feature (TypeInfo, asserts, unittests), it just emits a call to an `extern(C)` function. A much better approach would be to have a defined D API (e.g. `rt.assert.onAssertFailure(...)`). The compiler can then check if it finds `rt.assert.onFailure`. If not, the compiler can the simply disable that feature and provide nice error messages. This could be done for TypeInfo, Exceptions, Asserts, Switch errors, unit test support, etc. In the end, the vision would be to be able to ship a compiler completely without runtime. This compiler should be able to produce bare bones code without any further configuration. Then add a dependency to `drt:core` in the dub configuration to get class support, `dr:exception` for exceptions, etc. The compiler could then automatically detect availability of these features. (Of course manually adding -I paths would work in exactly the same way).<br />
<br />
For more ideas, interested students are encouraged to browse [https://bugzilla.gdcproject.org/describecomponents.cgi GDC's issue list] or getting [https://wiki.dlang.org/GDC in touch with the GDC development team].<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== std.benchmark ===<br />
----<br />
<br />
Ideally every function in Phobos should have its own benchmark suite which is run for every PR to check for performance improvements or regressions.<br />
* Additionally support for the new big O annotation [https://github.com/dlang/phobos/pull/4965 here] would be nice. <br />
* Existing work: [https://github.com/dlang/phobos/pull/794 here], and [https://github.com/dlang/phobos/pull/3695 here], and [https://github.com/atilaneves/unit-threaded/tree/master/source/unit_threaded/randomized here (QuickText-like testing)]. <br />
<br />
Proposed Project Mentors: Sebastian Wilzbach<br />
<br />
=== Jupyter notebook D kernel ===<br />
----<br />
<br />
The Jupyter Notebook is an open-source web application that allows you to create and share documents that contain live code, equations, visualizations and narrative text. Uses include: data cleaning and transformation, numerical simulation, statistical modeling, data visualization, machine learning, and much more.<br />
Jupyter notebooks are extremely popular among data scientist as they allow interactive progress and exploring a solution step by step.<br />
With a bit of work, a statically compiled language can be used in an interactive notebook e.g. [Cling https://blog.jupyter.org/interactive-workflows-for-c-with-jupyter-fe9b54227d92] and Go with<br />
[https://github.com/gopherdata/gophernotes gophernotes].<br />
Apart from being useful to data scientist, a Jupyter D kernel would allow an intuitive exploration of the language for newcomers and people starting with new libraries.<br />
<br />
Existing works:<br />
- [https://github.com/dlang-community/drepl drepl] - simple REPL for D<br />
- [https://github.com/DlangScience/PydMagic PydMagic] - allows to write PyD extension in a notebook.<br />
<br />
Proposed Project Mentor: Sebastian Wilzbach<br />
<br />
=== Functional Reactive Programming ===<br />
----<br />
<br />
Functional reactive programming (FRP) is a programming paradigm for reactive programming (asynchronous dataflow programming) using the building blocks of functional programming (e.g. map, reduce, filter).<br />
The best-known FRP API is the [http://reactivex.io ReactiveX API] whose implementation in D this project would focus.<br />
Note that this project is closely related to the std.eventloop project.<br />
<br />
Proposed Project Mentors: Petar Kirov<br />
<br />
=== BetterC runtime ===<br />
----<br />
<br />
[https://dlang.org/blog/2017/08/23/d-as-a-better-c BetterC] is a subset of D which limits the feature set of D, s.t. it's even easier to migrate from C as no Garbage Collection (GC) is used anymore.<br />
While, this feature is popular for some projects, `-betterC` today means still means a severe restriction in the amount of D features available (see the [https://dlang.org/spec/betterc.html BetterC specification].<br />
This project is about making more parts of the D runtime betterC-compatible. For example, classes could be allocated with reference-counting instead of using the GC. <br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Java Native Interface (JNI) library ===<br />
----<br />
<br />
D's features allow to write cut down the boilerplate of wrapper drastically.<br />
See the recently published [https://dlang.org/blog/2017/05/31/project-highlight-excel-d excel-d] for a comparison between the C++ implementation for registering a function in Excel and the D way.<br />
Similarly a solid JNI library would open up new many new use cases and allow the Java community to profit even easier from D's features.<br />
<br />
Previous work: [https://github.com/Monnoroch/DJni DJni], [https://github.com/jamesmahler/djvm djvm]<br />
Proposed Project Mentor: TBA<br />
<br />
=== ORM mapping ===<br />
----<br />
<br />
SQLAlchemy is an object-relational mapper which provides "a full suite of well known enterprise-level persistence patterns, designed for efficient and high-performing database access, adapted into a simple and Pythonic domain language".<br />
While there has been some attempts in implementing an ORM in D - none of these got close to the simplicity and usability of SQLAlchemy (see [[Database Libraries]]).<br />
However, with D's CTFE queries could - like std.format's strings - already be checked at compile-time and optimizations could be be applied to the parser and serializer.<br />
<br />
This project would be based on the [http://dconf.org/2016/talks/smith.html proposed std.database abstraction] and focus on creating a general-purpose ORM on top of it.<br />
<br />
See also: Martin Nowak's DConf16 talk about [http://dconf.org/2016/talks/nowak.html Object-Relational Mapper] <br />
<br />
Existing work:<br />
* [https://github.com/huntlabs/hunt-entity hunt-entity]<br />
<br />
Proposed Project Mentor: TBA<br />
<br />
=== std.serialization ===<br />
----<br />
<br />
D has numerous serialization frameworks. From `std.json` to `std.csv` over [https://github.com/dcarp/protobuf-d protobuf] to [https://github.com/vibe-d/vibe.d Vibe.d's] own serialization framework.<br />
The goal of this project is to implement a flexible (de)serialization framework that can be used as a standardized building block for various serialization related things.<br />
One important goal would be to define how a user-specified type has to work in order to make it serializable, as well as to allow the end-user (e.g. a user of std.json) to change the serialization of third-party types that cannot themselves be modified (i.e. let them define their own policies).<br />
<br />
Starting points:<br />
<br />
* [http://vibed.org/api/vibe.data.serialization Vibe.d's serialization framework]<br />
* [https://github.com/jacob-carlborg/orange Orange framework]<br />
<br />
Proposed Project Mentor: Jacob Carlborg<br />
<br />
=== Propose your own project ===<br />
----<br />
<br />
Do you have your own vision for improving D's success? That's great!<br />
Are you convinced that your project helps to advance open source technology related to the D programming language?<br />
Then simply get in touch with D's GSoC org admin (social (at) dlang (dot) org) and potential mentors for your project.<br />
<br />
If you are searching for inspiration, you might want to have a look at the [[DIPs| list of D Improvement Proposals (DIPs)]], the [[Vision/2018H1|high-level vision for this semester]] or the [[Wish_list|wish list]].<br />
<br />
<br />
== Ideas From Previous Years ==<br />
<br />
These GSoC idea pages from the past years which might provide more inspiration for proposing your own idea:<br />
<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2018 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2017 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2016_Ideas GSoC 2016 Ideas] (accepted, 4 slots)<br />
* [http://wiki.dlang.org/GSOC_2015_Ideas GSoC 2015 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2014_Ideas GSoC 2014 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2013_Ideas GSoC 2013 Ideas] (not accepted)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2012_Ideas GSoC 2012 Ideas] (accepted, 3 slots)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2011_Ideas GSoC 2011 Ideas]<br />
<br />
You may also want to have a look at [https://wiki.dlang.org/SAOC_2018_ideas the Symmetry Autumn of Code ideas page].<br />
<br />
== Tips for students ==<br />
<br />
Please see the "gsoc" articles at our [https://dlang.org/blog/category/gsoc/ official blog] which contain experience reports from students of previous years.<br />
<br />
Daniel Pocock has [http://danielpocock.com/getting-selected-for-google-summer-of-code-2015 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.<br />
<br />
<br />
== Tips for Mentors ==<br />
<br />
If you are interested in mentoring, please check out the [http://en.flossmanuals.net/GSoCMentoring/ organization administrator and mentor] manual for more information.<br />
<br />
[[Category:GSOC]]</div>Greenifyhttps://wiki.dlang.org/?title=GSOC_2019_Ideas&diff=9557GSOC 2019 Ideas2019-02-28T12:07:42Z<p>Greenify: Added: header generation for C/C++</p>
<hr />
<div>This is the D Language Foundation's Google Summer of Code 2019 page.<br />
<br />
If you are interested in working on a D project as part of GSoC 2019, as either a student or mentor, please contact the GSoC admins at social@dlang.org. Include "GSoC 2019" in the email subject line.<br />
<br />
<br />
== Timeline ==<br />
The timeline for GSoC 2019 [https://developers.google.com/open-source/gsoc/timeline can be found here].<br />
<br />
== Ideas ==<br />
<br />
The D ecosystem is always in need of improvement through the revision of existing projects and the creation of new ones. The core projects like the([http://dlang.org/phobos/index.html standard library]) and the compilers ([[Compilers]]) are always in need of attention. Other important areas include GUI support, integration with other languages, improving and enhancing the tooling, IDE and editor support, and more.<br />
<br />
Please add your project ideas to the list below, being as descriptive as you can in the summaries. Students interested in participating can use the ideas listed here as jumping off points, so the more information you provide, the easier it will be for them to get started. If your idea is particularly complex or nuanced, consider leaving contact information so that interested parties may follow up.<br />
<br />
=== Graphics library for resource constrained embedded systems ===<br />
----<br />
<br />
Create a 2D rasterizer, rich drawing primitives, and 2D graphics library suitable for resource constrained embedded systems (e.g. ARM Cortex-M) to be used in industrial controls, home appliances, medical devices, consumer electronics, and IoT just to name a few. The end goal would be something similar to [https://www.segger.com/products/user-interface/emwin Segger's emWin]. The library would be used to drive LDCs similar to https://www.adafruit.com/product/3396<br />
Requirements:<br />
<br />
* Hardware agnostic; should simply render to a frame buffer<br />
* No dependencies (No Phobos, no C standard library, and no official D runtime).<br />
* Consider using -betterC, but a custom minimal D runtime is also a viable option<br />
<br />
Related work:<br />
<br />
* https://github.com/TurkeyMan/color<br />
* https://bitbucket.org/timosi/minlibd<br />
* https://github.com/JinShil/stm32f42_discovery_demo<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Tabular data container (data frames) ===<br />
----<br />
<br />
Pandas, R and Julia have made [https://github.com/mobileink/data.frame/wiki/What-is-a-Data-Frame%3F data frames] very popular.<br />
As D is getting more interest from data scientist (e.g. [https://github.com/eBay/tsv-utils eBay] or [http://tech.adroll.com/blog/data/2014/11/17/d-is-for-data-science.html AdRoll]) it would be very beneficial to use one language for the entire data analysis pipeline - especially considering that D (in contrast to popular languages like Python, R or Julia) - is compiled to native machine code and gets optimized by the sophisticated LLVM backend.<br />
<br />
Minimum requirements:<br />
<br />
* conversion to and from CSV<br />
* multi-indexing<br />
* column binary operations, e.g. `column1 * column2`<br />
* group-by on an arbitrary number of columns<br />
* column/group aggregations<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
=== C++ interops ===<br />
----<br />
<br />
There are many experiments in transparently interfacing D with C++, notably:<br />
<br />
* [https://github.com/atilaneves/dpp dpp] by Atila Neves, that parses and translates headers on the fly<br />
* [https://wiki.dlang.org/Calypso Calypso] by Elie Morisse that bridges the two languages at the AST level.<br />
* [https://github.com/jacob-carlborg/dstep DStep] by Jacob Carlborg, automatically generates bindings for C and Objective-C code. The task would be to add support for C++.<br />
<br />
There is also a lot of work in bringing STL types to the DRuntime (see https://github.com/dlang/druntime/pull/2310).<br />
<br />
D would greatly benefit by seamlessly integrating the C++ ecosystem. There are many ways to accomplish this goal and it should be discussed with the community.<br />
Andrei already commented on the importance of a tool like Calypso in this thread:<br />
https://forum.dlang.org/post/m9s4cd$2s1v$1@digitalmars.com<br />
<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Persistent Data Structures ===<br />
----<br />
<br />
There is an ongoing effort to reduce the reliance of Phobos on the GC but the GC is not going anywhere given that it has many advantages over manual memory management.<br />
The community would greatly benefit from a wide range of functional programming techniques that have their roots in the usage of immutable and persistent data structures that heavily rely on the GC.<br />
Persistent Data Structures are heavily used in [http://docs.scala-lang.org/overviews/collections/overview.html Scala] and [http://clojure.org/reference/data_structures Clojure] and they allow the programmer to reason about interactivity, sharing and parallelism.<br />
<br />
The focus of this project would be to create a varying range of persistent data structures (sets, vectors, maps, strings, trees, lists, etc...) that respects the range interface and the semantics of Phobos.<br />
<br />
Related Work:<br />
<br />
* https://www.cs.cmu.edu/~rwh/theses/okasaki.pdf <br />
* https://www.worldcat.org/title/rrb-trees-efficient-immutable-vectors/oclc/820379112<br />
* https://www.youtube.com/watch?v=7BFF50BHPPo<br />
* https://www.infoq.com/presentations/Value-Values<br />
* https://github.com/arximboldi/immer<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Language Server Protocol for D ===<br />
----<br />
<br />
The [https://microsoft.github.io/language-server-protocol Language Server Protocol] (LSP) defines the protocol used between an editor or IDE and a language server that provides language features like auto complete, go to definition, find all references etc. Adding features like auto complete, go to definition, or documentation on hover for a programming language takes significant effort. Traditionally this work had to be repeated for each development tool, as each tool provides different APIs for implementing the same feature (see the list of [[Editors]] and [[IDEs]]). Additionally as the existing tools only use `libdparse` (used in [https://github.com/d-language-server/dls DLS] and [https://github.com/dlang-community/DCD DCD]), they lack the ability to perform semantic analysis on the AST and can't evaluate `mixin`'s nor D's very powerful Compile-Time Function Evaluation (CTFE).<br />
A Language Server is meant to provide the language-specific smarts and communicate with development tools over a protocol that enables inter-process communication.<br />
The idea behind the Language Server Protocol (LSP) is to standardize the protocol for how such servers and development tools communicate. This way, single D Language Server can be re-used in multiple development tools, which in turn can support multiple languages with minimal effort.<br />
<br />
Recent development in the DMD compiler [https://dlang.org/blog/2017/08/01/a-dub-case-study-compiling-dmd-as-a-library made it available as a DUB library]. This mean that the compiler itself can be re-used and third-party tools don't have to re-implement e.g. D's complex CTFE. This project is about using the DMD compiler as a library to implement a Language Server for D.<br />
<br />
Proposed Project Mentors: Jacob Carlborg, Sebastian Wilzbach<br />
<br />
How to start:<br />
* [https://github.com/dlang/dmd/blob/master/test/dub_package/frontend.d Simple example] of using DMD as a library<br />
* [https://github.com/jacob-carlborg/dlp More complex use cases]<br />
<br />
=== Mir Project ===<br />
----<br />
<br />
The Mir project is developing numerical libraries for the upcoming numeric packages of<br />
the Dlang standard library. The are numerous projects an interested student could pursue:<br />
<br />
* University project. Your GSoC project can be combined with your scientific research.<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://julialang.org Julia] integration<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://www.numpy.org NumPy] integration<br />
* General purpose BetterC libraries<br />
** I/O betterC Dlang library<br />
** Async betterC Dlang library<br />
** String and format betterC library<br />
* mir-cpuid <br />
** ARM support<br />
** Advanced OS specific support<br />
* mir-glas<br />
** BLAS Level 2 subprograms<br />
** One BLAS Level 3 subprogram. It is OK to do only one! But it must be faster then OpenBLAS, and not slower then Intel MKL.<br />
** Multithreading support for BLAS Level 2<br />
** Multithreading support for BLAS Level 3<br />
<br />
You can get more details on projects related to Mir [https://github.com/libmir/mir/wiki/GSoC-2019 here].<br />
<br />
Its Good To Know:<br />
<br />
To work on the Mir you should be proficient with one of:<br />
<br />
* C<br />
* C++<br />
* LLVM<br />
* Fortran<br />
* Experience with D is not essential.<br />
<br />
To work on the Mir project requires a responsible and self-motivated student.<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
=== DUB: D's package manager ===<br />
----<br />
<br />
[https://github.com/dlang/dub DUB] - D's package manager - is one of the central infrastructure tools in the D world as a convenient build and package management tool for the D community.<br />
With D gaining more and more popularity, it's also a key tool to guarantee D's further adoption.<br />
Thus there are many great ideas to improve DUB:<br />
<br />
* [https://github.com/dlang/dub/wiki/DEP6 git support]<br />
* [https://github.com/dlang/dub/wiki/DEP2 separate compilation and caching]<br />
* [https://github.com/dlang/dub/wiki/DEP3 extensibility through DUB]<br />
* [https://github.com/dlang/dub/wiki/DEP4 control flow directives]<br />
* [https://github.com/dlang/dub/wiki/DEP5 build system support for C/C++]<br />
* support dub install for distributions<br />
* support building a {snap, Debian, Arch, ...} package out of DUB package<br />
<br />
Any of these listed DUB Enhancement Proposals (DEPs) could form the basis of a GSoC Project.<br />
<br />
Proposed Project Mentors: Sönke Ludwig, Sebastian Wilzbach<br />
<br />
=== LDC (LLVM-based D compiler) ===<br />
----<br />
<br />
The LDC project provides a portable D programming language compiler with modern optimization and code generation capabilities.<br />
The ever-improving feature set of LLVM opens up many opportunities with D.<br />
A few ideas for a potential GSoC project are:<br />
<br />
* exploiting immutability of variables (notably of structs such as string slices)<br />
* devirtualization<br />
* improve debuginfo<br />
* ASan with GC and multithreading<br />
* function multiversioning<br />
<br />
You might also want to browse the [https://github.com/ldc-developers/ldc/issues LDC's issue tracker] for more ideas.<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Baremetal D runtime ===<br />
----<br />
<br />
Many features in the standard library are implemented by using the C runtime. Reusing the rock-solid work of generations of programmers makes a lot of sense as just outputting via `printf` can be very [https://github.molgen.mpg.de/git-mirror/glibc/blob/20003c49884422da7ffbc459cdeee768a6fee07b/stdio-common/vfprintf.c complex]. However, for embedded environments a programmer often only has a tiny amount of storage available or might not even have a C runtime available for his target.<br />
The idea of this project is to implement the most basic parts of the runtime natively in D, s.t. bare metals programmers can just compile for their target. Implementing features natively in D also means that other targets like [https://wiki.dlang.org/Generating_WebAssembly_with_LDC Web Assembly] will automatically be able to use them too. Another advantage of implementing these basic building blocks in D is that one can take advantage of D's Compile-Time Function Evaluation (CTFE) and optimize the methods even further at compile-time.<br />
<br />
Project focus:<br />
- Implement `memcpy`, `memcmp` and similar in D (with similar performance to C)<br />
- Implement `malloc` and similar in D (with similar performance to C)<br />
<br />
Starting points:<br />
* [https://theartofmachinery.com/2017/02/28/bare_metal_d.html D for Bare Metal Programming (tutorial series]<br />
* [https://github.com/JinShil/stm32f42_discovery_demo Simple demonstration of using D to bare-metal program an STM32F29I Discovery board]<br />
* [https://github.com/JinShil/memcpyD memcpyD]<br />
* [https://wiki.dlang.org/Programming_in_D_tutorial_on_Embedded_Linux_ARM_devices Programming in D tutorial on Embedded Linux ARM devices]<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Header generation for C/C++ ===<br />
----<br />
<br />
With the ever-improving integration between DMD and C/C++, quite a bit of tooling has been developed to generate D header files from C or C++ projects (e.g. [https://github.com/jacob-carlborg/dstep DStep] or [https://github.com/atilaneves/dpp DPP]).<br />
However, for many projects the majority of the source code is now written in D and the reverse step is needed: an automatic way to generate C and C++ headers from a D project.<br />
This would be very valuable for D as it could motivate inter-language projects that typically go C++-fist-with-a-D-binding to work the other way.<br />
<br />
Starting point:<br />
* [https://forum.dlang.org/post/mailman.7146.1551050711.29801.digitalmars-d@puremagic.com NG-Thread: "Make DMD emit C++ .h files same as .di files"]<br />
* [https://github.com/dlang/dmd/pull/8591 Existing specialized work for the DMD codebase)<br />
* [https://gitlab.com/mihails.strasuns/dtoh Existing WIP work for generating C headers)<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== std.benchmark ===<br />
----<br />
<br />
Ideally every function in Phobos should have its own benchmark suite which is run for every PR to check for performance improvements or regressions.<br />
* Additionally support for the new big O annotation [https://github.com/dlang/phobos/pull/4965 here] would be nice. <br />
* Existing work: [https://github.com/dlang/phobos/pull/794 here], and [https://github.com/dlang/phobos/pull/3695 here], and [https://github.com/atilaneves/unit-threaded/tree/master/source/unit_threaded/randomized here (QuickText-like testing)]. <br />
<br />
Proposed Project Mentors: Sebastian Wilzbach<br />
<br />
=== Jupyter notebook D kernel ===<br />
----<br />
<br />
The Jupyter Notebook is an open-source web application that allows you to create and share documents that contain live code, equations, visualizations and narrative text. Uses include: data cleaning and transformation, numerical simulation, statistical modeling, data visualization, machine learning, and much more.<br />
Jupyter notebooks are extremely popular among data scientist as they allow interactive progress and exploring a solution step by step.<br />
With a bit of work, a statically compiled language can be used in an interactive notebook e.g. [Cling https://blog.jupyter.org/interactive-workflows-for-c-with-jupyter-fe9b54227d92] and Go with<br />
[https://github.com/gopherdata/gophernotes gophernotes].<br />
Apart from being useful to data scientist, a Jupyter D kernel would allow an intuitive exploration of the language for newcomers and people starting with new libraries.<br />
<br />
Existing works:<br />
- [https://github.com/dlang-community/drepl drepl] - simple REPL for D<br />
- [https://github.com/DlangScience/PydMagic PydMagic] - allows to write PyD extension in a notebook.<br />
<br />
Proposed Project Mentor: Sebastian Wilzbach<br />
<br />
=== Functional Reactive Programming ===<br />
----<br />
<br />
Functional reactive programming (FRP) is a programming paradigm for reactive programming (asynchronous dataflow programming) using the building blocks of functional programming (e.g. map, reduce, filter).<br />
The best-known FRP API is the [http://reactivex.io ReactiveX API] whose implementation in D this project would focus.<br />
Note that this project is closely related to the std.eventloop project.<br />
<br />
Proposed Project Mentors: Petar Kirov<br />
<br />
=== BetterC runtime ===<br />
----<br />
<br />
[https://dlang.org/blog/2017/08/23/d-as-a-better-c BetterC] is a subset of D which limits the feature set of D, s.t. it's even easier to migrate from C as no Garbage Collection (GC) is used anymore.<br />
While, this feature is popular for some projects, `-betterC` today means still means a severe restriction in the amount of D features available (see the [https://dlang.org/spec/betterc.html BetterC specification].<br />
This project is about making more parts of the D runtime betterC-compatible. For example, classes could be allocated with reference-counting instead of using the GC. <br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Java Native Interface (JNI) library ===<br />
----<br />
<br />
D's features allow to write cut down the boilerplate of wrapper drastically.<br />
See the recently published [https://dlang.org/blog/2017/05/31/project-highlight-excel-d excel-d] for a comparison between the C++ implementation for registering a function in Excel and the D way.<br />
Similarly a solid JNI library would open up new many new use cases and allow the Java community to profit even easier from D's features.<br />
<br />
Previous work: [https://github.com/Monnoroch/DJni DJni], [https://github.com/jamesmahler/djvm djvm]<br />
Proposed Project Mentor: TBA<br />
<br />
=== ORM mapping ===<br />
----<br />
<br />
SQLAlchemy is an object-relational mapper which provides "a full suite of well known enterprise-level persistence patterns, designed for efficient and high-performing database access, adapted into a simple and Pythonic domain language".<br />
While there has been some attempts in implementing an ORM in D - none of these got close to the simplicity and usability of SQLAlchemy (see [[Database Libraries]]).<br />
However, with D's CTFE queries could - like std.format's strings - already be checked at compile-time and optimizations could be be applied to the parser and serializer.<br />
<br />
This project would be based on the [http://dconf.org/2016/talks/smith.html proposed std.database abstraction] and focus on creating a general-purpose ORM on top of it.<br />
<br />
See also: Martin Nowak's DConf16 talk about [http://dconf.org/2016/talks/nowak.html Object-Relational Mapper] <br />
<br />
Existing work:<br />
* [https://github.com/huntlabs/hunt-entity hunt-entity]<br />
<br />
Proposed Project Mentor: TBA<br />
<br />
=== std.serialization ===<br />
----<br />
<br />
D has numerous serialization frameworks. From `std.json` to `std.csv` over [https://github.com/dcarp/protobuf-d protobuf] to [https://github.com/vibe-d/vibe.d Vibe.d's] own serialization framework.<br />
The goal of this project is to implement a flexible (de)serialization framework that can be used as a standardized building block for various serialization related things.<br />
One important goal would be to define how a user-specified type has to work in order to make it serializable, as well as to allow the end-user (e.g. a user of std.json) to change the serialization of third-party types that cannot themselves be modified (i.e. let them define their own policies).<br />
<br />
Starting points:<br />
<br />
* [http://vibed.org/api/vibe.data.serialization Vibe.d's serialization framework]<br />
* [https://github.com/jacob-carlborg/orange Orange framework]<br />
<br />
Proposed Project Mentor: Jacob Carlborg<br />
<br />
=== Propose your own project ===<br />
----<br />
<br />
Do you have your own vision for improving D's success? That's great!<br />
Are you convinced that your project helps to advance open source technology related to the D programming language?<br />
Then simply get in touch with D's GSoC org admin (social (at) dlang (dot) org) and potential mentors for your project.<br />
<br />
If you are searching for inspiration, you might want to have a look at the [[DIPs| list of D Improvement Proposals (DIPs)]], the [[Vision/2018H1|high-level vision for this semester]] or the [[Wish_list|wish list]].<br />
<br />
<br />
== Ideas From Previous Years ==<br />
<br />
These GSoC idea pages from the past years which might provide more inspiration for proposing your own idea:<br />
<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2018 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2017 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2016_Ideas GSoC 2016 Ideas] (accepted, 4 slots)<br />
* [http://wiki.dlang.org/GSOC_2015_Ideas GSoC 2015 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2014_Ideas GSoC 2014 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2013_Ideas GSoC 2013 Ideas] (not accepted)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2012_Ideas GSoC 2012 Ideas] (accepted, 3 slots)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2011_Ideas GSoC 2011 Ideas]<br />
<br />
You may also want to have a look at [https://wiki.dlang.org/SAOC_2018_ideas the Symmetry Autumn of Code ideas page].<br />
<br />
== Tips for students ==<br />
<br />
Please see the "gsoc" articles at our [https://dlang.org/blog/category/gsoc/ official blog] which contain experience reports from students of previous years.<br />
<br />
Daniel Pocock has [http://danielpocock.com/getting-selected-for-google-summer-of-code-2015 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.<br />
<br />
<br />
== Tips for Mentors ==<br />
<br />
If you are interested in mentoring, please check out the [http://en.flossmanuals.net/GSoCMentoring/ organization administrator and mentor] manual for more information.<br />
<br />
[[Category:GSOC]]</div>Greenifyhttps://wiki.dlang.org/?title=GSOC_2019_Ideas&diff=9556GSOC 2019 Ideas2019-02-28T11:56:03Z<p>Greenify: Added baremetal D runtime</p>
<hr />
<div>This is the D Language Foundation's Google Summer of Code 2019 page.<br />
<br />
If you are interested in working on a D project as part of GSoC 2019, as either a student or mentor, please contact the GSoC admins at social@dlang.org. Include "GSoC 2019" in the email subject line.<br />
<br />
<br />
== Timeline ==<br />
The timeline for GSoC 2019 [https://developers.google.com/open-source/gsoc/timeline can be found here].<br />
<br />
== Ideas ==<br />
<br />
The D ecosystem is always in need of improvement through the revision of existing projects and the creation of new ones. The core projects like the([http://dlang.org/phobos/index.html standard library]) and the compilers ([[Compilers]]) are always in need of attention. Other important areas include GUI support, integration with other languages, improving and enhancing the tooling, IDE and editor support, and more.<br />
<br />
Please add your project ideas to the list below, being as descriptive as you can in the summaries. Students interested in participating can use the ideas listed here as jumping off points, so the more information you provide, the easier it will be for them to get started. If your idea is particularly complex or nuanced, consider leaving contact information so that interested parties may follow up.<br />
<br />
=== Graphics library for resource constrained embedded systems ===<br />
----<br />
<br />
Create a 2D rasterizer, rich drawing primitives, and 2D graphics library suitable for resource constrained embedded systems (e.g. ARM Cortex-M) to be used in industrial controls, home appliances, medical devices, consumer electronics, and IoT just to name a few. The end goal would be something similar to [https://www.segger.com/products/user-interface/emwin Segger's emWin]. The library would be used to drive LDCs similar to https://www.adafruit.com/product/3396<br />
Requirements:<br />
<br />
* Hardware agnostic; should simply render to a frame buffer<br />
* No dependencies (No Phobos, no C standard library, and no official D runtime).<br />
* Consider using -betterC, but a custom minimal D runtime is also a viable option<br />
<br />
Related work:<br />
<br />
* https://github.com/TurkeyMan/color<br />
* https://bitbucket.org/timosi/minlibd<br />
* https://github.com/JinShil/stm32f42_discovery_demo<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Tabular data container (data frames) ===<br />
----<br />
<br />
Pandas, R and Julia have made [https://github.com/mobileink/data.frame/wiki/What-is-a-Data-Frame%3F data frames] very popular.<br />
As D is getting more interest from data scientist (e.g. [https://github.com/eBay/tsv-utils eBay] or [http://tech.adroll.com/blog/data/2014/11/17/d-is-for-data-science.html AdRoll]) it would be very beneficial to use one language for the entire data analysis pipeline - especially considering that D (in contrast to popular languages like Python, R or Julia) - is compiled to native machine code and gets optimized by the sophisticated LLVM backend.<br />
<br />
Minimum requirements:<br />
<br />
* conversion to and from CSV<br />
* multi-indexing<br />
* column binary operations, e.g. `column1 * column2`<br />
* group-by on an arbitrary number of columns<br />
* column/group aggregations<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
=== C++ interops ===<br />
----<br />
<br />
There are many experiments in transparently interfacing D with C++, notably:<br />
<br />
* [https://github.com/atilaneves/dpp dpp] by Atila Neves, that parses and translates headers on the fly<br />
* [https://wiki.dlang.org/Calypso Calypso] by Elie Morisse that bridges the two languages at the AST level.<br />
* [https://github.com/jacob-carlborg/dstep DStep] by Jacob Carlborg, automatically generates bindings for C and Objective-C code. The task would be to add support for C++.<br />
<br />
There is also a lot of work in bringing STL types to the DRuntime (see https://github.com/dlang/druntime/pull/2310).<br />
<br />
D would greatly benefit by seamlessly integrating the C++ ecosystem. There are many ways to accomplish this goal and it should be discussed with the community.<br />
Andrei already commented on the importance of a tool like Calypso in this thread:<br />
https://forum.dlang.org/post/m9s4cd$2s1v$1@digitalmars.com<br />
<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Persistent Data Structures ===<br />
----<br />
<br />
There is an ongoing effort to reduce the reliance of Phobos on the GC but the GC is not going anywhere given that it has many advantages over manual memory management.<br />
The community would greatly benefit from a wide range of functional programming techniques that have their roots in the usage of immutable and persistent data structures that heavily rely on the GC.<br />
Persistent Data Structures are heavily used in [http://docs.scala-lang.org/overviews/collections/overview.html Scala] and [http://clojure.org/reference/data_structures Clojure] and they allow the programmer to reason about interactivity, sharing and parallelism.<br />
<br />
The focus of this project would be to create a varying range of persistent data structures (sets, vectors, maps, strings, trees, lists, etc...) that respects the range interface and the semantics of Phobos.<br />
<br />
Related Work:<br />
<br />
* https://www.cs.cmu.edu/~rwh/theses/okasaki.pdf <br />
* https://www.worldcat.org/title/rrb-trees-efficient-immutable-vectors/oclc/820379112<br />
* https://www.youtube.com/watch?v=7BFF50BHPPo<br />
* https://www.infoq.com/presentations/Value-Values<br />
* https://github.com/arximboldi/immer<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Language Server Protocol for D ===<br />
----<br />
<br />
The [https://microsoft.github.io/language-server-protocol Language Server Protocol] (LSP) defines the protocol used between an editor or IDE and a language server that provides language features like auto complete, go to definition, find all references etc. Adding features like auto complete, go to definition, or documentation on hover for a programming language takes significant effort. Traditionally this work had to be repeated for each development tool, as each tool provides different APIs for implementing the same feature (see the list of [[Editors]] and [[IDEs]]). Additionally as the existing tools only use `libdparse` (used in [https://github.com/d-language-server/dls DLS] and [https://github.com/dlang-community/DCD DCD]), they lack the ability to perform semantic analysis on the AST and can't evaluate `mixin`'s nor D's very powerful Compile-Time Function Evaluation (CTFE).<br />
A Language Server is meant to provide the language-specific smarts and communicate with development tools over a protocol that enables inter-process communication.<br />
The idea behind the Language Server Protocol (LSP) is to standardize the protocol for how such servers and development tools communicate. This way, single D Language Server can be re-used in multiple development tools, which in turn can support multiple languages with minimal effort.<br />
<br />
Recent development in the DMD compiler [https://dlang.org/blog/2017/08/01/a-dub-case-study-compiling-dmd-as-a-library made it available as a DUB library]. This mean that the compiler itself can be re-used and third-party tools don't have to re-implement e.g. D's complex CTFE. This project is about using the DMD compiler as a library to implement a Language Server for D.<br />
<br />
Proposed Project Mentors: Jacob Carlborg, Sebastian Wilzbach<br />
<br />
How to start:<br />
* [https://github.com/dlang/dmd/blob/master/test/dub_package/frontend.d Simple example] of using DMD as a library<br />
* [https://github.com/jacob-carlborg/dlp More complex use cases]<br />
<br />
=== Mir Project ===<br />
----<br />
<br />
The Mir project is developing numerical libraries for the upcoming numeric packages of<br />
the Dlang standard library. The are numerous projects an interested student could pursue:<br />
<br />
* University project. Your GSoC project can be combined with your scientific research.<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://julialang.org Julia] integration<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://www.numpy.org NumPy] integration<br />
* General purpose BetterC libraries<br />
** I/O betterC Dlang library<br />
** Async betterC Dlang library<br />
** String and format betterC library<br />
* mir-cpuid <br />
** ARM support<br />
** Advanced OS specific support<br />
* mir-glas<br />
** BLAS Level 2 subprograms<br />
** One BLAS Level 3 subprogram. It is OK to do only one! But it must be faster then OpenBLAS, and not slower then Intel MKL.<br />
** Multithreading support for BLAS Level 2<br />
** Multithreading support for BLAS Level 3<br />
<br />
You can get more details on projects related to Mir [https://github.com/libmir/mir/wiki/GSoC-2019 here].<br />
<br />
Its Good To Know:<br />
<br />
To work on the Mir you should be proficient with one of:<br />
<br />
* C<br />
* C++<br />
* LLVM<br />
* Fortran<br />
* Experience with D is not essential.<br />
<br />
To work on the Mir project requires a responsible and self-motivated student.<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
=== DUB: D's package manager ===<br />
----<br />
<br />
[https://github.com/dlang/dub DUB] - D's package manager - is one of the central infrastructure tools in the D world as a convenient build and package management tool for the D community.<br />
With D gaining more and more popularity, it's also a key tool to guarantee D's further adoption.<br />
Thus there are many great ideas to improve DUB:<br />
<br />
* [https://github.com/dlang/dub/wiki/DEP6 git support]<br />
* [https://github.com/dlang/dub/wiki/DEP2 separate compilation and caching]<br />
* [https://github.com/dlang/dub/wiki/DEP3 extensibility through DUB]<br />
* [https://github.com/dlang/dub/wiki/DEP4 control flow directives]<br />
* [https://github.com/dlang/dub/wiki/DEP5 build system support for C/C++]<br />
* support dub install for distributions<br />
* support building a {snap, Debian, Arch, ...} package out of DUB package<br />
<br />
Any of these listed DUB Enhancement Proposals (DEPs) could form the basis of a GSoC Project.<br />
<br />
Proposed Project Mentors: Sönke Ludwig, Sebastian Wilzbach<br />
<br />
=== LDC (LLVM-based D compiler) ===<br />
----<br />
<br />
The LDC project provides a portable D programming language compiler with modern optimization and code generation capabilities.<br />
The ever-improving feature set of LLVM opens up many opportunities with D.<br />
A few ideas for a potential GSoC project are:<br />
<br />
* exploiting immutability of variables (notably of structs such as string slices)<br />
* devirtualization<br />
* improve debuginfo<br />
* ASan with GC and multithreading<br />
* function multiversioning<br />
<br />
You might also want to browse the [https://github.com/ldc-developers/ldc/issues LDC's issue tracker] for more ideas.<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Baremetal D runtime ===<br />
----<br />
<br />
Many features in the standard library are implemented by using the C runtime. Reusing the rock-solid work of generations of programmers makes a lot of sense as just outputting via `printf` can be very [https://github.molgen.mpg.de/git-mirror/glibc/blob/20003c49884422da7ffbc459cdeee768a6fee07b/stdio-common/vfprintf.c complex]. However, for embedded environments a programmer often only has a tiny amount of storage available or might not even have a C runtime available for his target.<br />
The idea of this project is to implement the most basic parts of the runtime natively in D, s.t. bare metals programmers can just compile for their target. Implementing features natively in D also means that other targets like [https://wiki.dlang.org/Generating_WebAssembly_with_LDC Web Assembly] will automatically be able to use them too. Another advantage of implementing these basic building blocks in D is that one can take advantage of D's Compile-Time Function Evaluation (CTFE) and optimize the methods even further at compile-time.<br />
<br />
Project focus:<br />
- Implement `memcpy`, `memcmp` and similar in D (with similar performance to C)<br />
- Implement `malloc` and similar in D (with similar performance to C)<br />
<br />
Starting points:<br />
* [https://theartofmachinery.com/2017/02/28/bare_metal_d.html D for Bare Metal Programming (tutorial series]<br />
* [https://github.com/JinShil/stm32f42_discovery_demo Simple demonstration of using D to bare-metal program an STM32F29I Discovery board]<br />
* [https://github.com/JinShil/memcpyD memcpyD]<br />
* [https://wiki.dlang.org/Programming_in_D_tutorial_on_Embedded_Linux_ARM_devices Programming in D tutorial on Embedded Linux ARM devices]<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
<br />
=== std.benchmark ===<br />
----<br />
<br />
Ideally every function in Phobos should have its own benchmark suite which is run for every PR to check for performance improvements or regressions.<br />
* Additionally support for the new big O annotation [https://github.com/dlang/phobos/pull/4965 here] would be nice. <br />
* Existing work: [https://github.com/dlang/phobos/pull/794 here], and [https://github.com/dlang/phobos/pull/3695 here], and [https://github.com/atilaneves/unit-threaded/tree/master/source/unit_threaded/randomized here (QuickText-like testing)]. <br />
<br />
Proposed Project Mentors: Sebastian Wilzbach<br />
<br />
=== Jupyter notebook D kernel ===<br />
----<br />
<br />
The Jupyter Notebook is an open-source web application that allows you to create and share documents that contain live code, equations, visualizations and narrative text. Uses include: data cleaning and transformation, numerical simulation, statistical modeling, data visualization, machine learning, and much more.<br />
Jupyter notebooks are extremely popular among data scientist as they allow interactive progress and exploring a solution step by step.<br />
With a bit of work, a statically compiled language can be used in an interactive notebook e.g. [Cling https://blog.jupyter.org/interactive-workflows-for-c-with-jupyter-fe9b54227d92] and Go with<br />
[https://github.com/gopherdata/gophernotes gophernotes].<br />
Apart from being useful to data scientist, a Jupyter D kernel would allow an intuitive exploration of the language for newcomers and people starting with new libraries.<br />
<br />
Existing works:<br />
- [https://github.com/dlang-community/drepl drepl] - simple REPL for D<br />
- [https://github.com/DlangScience/PydMagic PydMagic] - allows to write PyD extension in a notebook.<br />
<br />
Proposed Project Mentor: Sebastian Wilzbach<br />
<br />
=== Functional Reactive Programming ===<br />
----<br />
<br />
Functional reactive programming (FRP) is a programming paradigm for reactive programming (asynchronous dataflow programming) using the building blocks of functional programming (e.g. map, reduce, filter).<br />
The best-known FRP API is the [http://reactivex.io ReactiveX API] whose implementation in D this project would focus.<br />
Note that this project is closely related to the std.eventloop project.<br />
<br />
Proposed Project Mentors: Petar Kirov<br />
<br />
=== BetterC runtime ===<br />
----<br />
<br />
[https://dlang.org/blog/2017/08/23/d-as-a-better-c BetterC] is a subset of D which limits the feature set of D, s.t. it's even easier to migrate from C as no Garbage Collection (GC) is used anymore.<br />
While, this feature is popular for some projects, `-betterC` today means still means a severe restriction in the amount of D features available (see the [https://dlang.org/spec/betterc.html BetterC specification].<br />
This project is about making more parts of the D runtime betterC-compatible. For example, classes could be allocated with reference-counting instead of using the GC. <br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Java Native Interface (JNI) library ===<br />
----<br />
<br />
D's features allow to write cut down the boilerplate of wrapper drastically.<br />
See the recently published [https://dlang.org/blog/2017/05/31/project-highlight-excel-d excel-d] for a comparison between the C++ implementation for registering a function in Excel and the D way.<br />
Similarly a solid JNI library would open up new many new use cases and allow the Java community to profit even easier from D's features.<br />
<br />
Previous work: [https://github.com/Monnoroch/DJni DJni], [https://github.com/jamesmahler/djvm djvm]<br />
Proposed Project Mentor: TBA<br />
<br />
=== ORM mapping ===<br />
----<br />
<br />
SQLAlchemy is an object-relational mapper which provides "a full suite of well known enterprise-level persistence patterns, designed for efficient and high-performing database access, adapted into a simple and Pythonic domain language".<br />
While there has been some attempts in implementing an ORM in D - none of these got close to the simplicity and usability of SQLAlchemy (see [[Database Libraries]]).<br />
However, with D's CTFE queries could - like std.format's strings - already be checked at compile-time and optimizations could be be applied to the parser and serializer.<br />
<br />
This project would be based on the [http://dconf.org/2016/talks/smith.html proposed std.database abstraction] and focus on creating a general-purpose ORM on top of it.<br />
<br />
See also: Martin Nowak's DConf16 talk about [http://dconf.org/2016/talks/nowak.html Object-Relational Mapper] <br />
<br />
Existing work:<br />
* [https://github.com/huntlabs/hunt-entity hunt-entity]<br />
<br />
Proposed Project Mentor: TBA<br />
<br />
=== std.serialization ===<br />
----<br />
<br />
D has numerous serialization frameworks. From `std.json` to `std.csv` over [https://github.com/dcarp/protobuf-d protobuf] to [https://github.com/vibe-d/vibe.d Vibe.d's] own serialization framework.<br />
The goal of this project is to implement a flexible (de)serialization framework that can be used as a standardized building block for various serialization related things.<br />
One important goal would be to define how a user-specified type has to work in order to make it serializable, as well as to allow the end-user (e.g. a user of std.json) to change the serialization of third-party types that cannot themselves be modified (i.e. let them define their own policies).<br />
<br />
Starting points:<br />
<br />
* [http://vibed.org/api/vibe.data.serialization Vibe.d's serialization framework]<br />
* [https://github.com/jacob-carlborg/orange Orange framework]<br />
<br />
Proposed Project Mentor: Jacob Carlborg<br />
<br />
=== Propose your own project ===<br />
----<br />
<br />
Do you have your own vision for improving D's success? That's great!<br />
Are you convinced that your project helps to advance open source technology related to the D programming language?<br />
Then simply get in touch with D's GSoC org admin (social (at) dlang (dot) org) and potential mentors for your project.<br />
<br />
If you are searching for inspiration, you might want to have a look at the [[DIPs| list of D Improvement Proposals (DIPs)]], the [[Vision/2018H1|high-level vision for this semester]] or the [[Wish_list|wish list]].<br />
<br />
<br />
== Ideas From Previous Years ==<br />
<br />
These GSoC idea pages from the past years which might provide more inspiration for proposing your own idea:<br />
<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2018 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2017 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2016_Ideas GSoC 2016 Ideas] (accepted, 4 slots)<br />
* [http://wiki.dlang.org/GSOC_2015_Ideas GSoC 2015 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2014_Ideas GSoC 2014 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2013_Ideas GSoC 2013 Ideas] (not accepted)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2012_Ideas GSoC 2012 Ideas] (accepted, 3 slots)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2011_Ideas GSoC 2011 Ideas]<br />
<br />
You may also want to have a look at [https://wiki.dlang.org/SAOC_2018_ideas the Symmetry Autumn of Code ideas page].<br />
<br />
== Tips for students ==<br />
<br />
Please see the "gsoc" articles at our [https://dlang.org/blog/category/gsoc/ official blog] which contain experience reports from students of previous years.<br />
<br />
Daniel Pocock has [http://danielpocock.com/getting-selected-for-google-summer-of-code-2015 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.<br />
<br />
<br />
== Tips for Mentors ==<br />
<br />
If you are interested in mentoring, please check out the [http://en.flossmanuals.net/GSoCMentoring/ organization administrator and mentor] manual for more information.<br />
<br />
[[Category:GSOC]]</div>Greenifyhttps://wiki.dlang.org/?title=GSOC_2019_Ideas&diff=9555GSOC 2019 Ideas2019-02-28T11:35:06Z<p>Greenify: /* BetterC runtime */</p>
<hr />
<div>This is the D Language Foundation's Google Summer of Code 2019 page.<br />
<br />
If you are interested in working on a D project as part of GSoC 2019, as either a student or mentor, please contact the GSoC admins at social@dlang.org. Include "GSoC 2019" in the email subject line.<br />
<br />
<br />
== Timeline ==<br />
The timeline for GSoC 2019 [https://developers.google.com/open-source/gsoc/timeline can be found here].<br />
<br />
== Ideas ==<br />
<br />
The D ecosystem is always in need of improvement through the revision of existing projects and the creation of new ones. The core projects like the([http://dlang.org/phobos/index.html standard library]) and the compilers ([[Compilers]]) are always in need of attention. Other important areas include GUI support, integration with other languages, improving and enhancing the tooling, IDE and editor support, and more.<br />
<br />
Please add your project ideas to the list below, being as descriptive as you can in the summaries. Students interested in participating can use the ideas listed here as jumping off points, so the more information you provide, the easier it will be for them to get started. If your idea is particularly complex or nuanced, consider leaving contact information so that interested parties may follow up.<br />
<br />
=== Graphics library for resource constrained embedded systems ===<br />
----<br />
<br />
Create a 2D rasterizer, rich drawing primitives, and 2D graphics library suitable for resource constrained embedded systems (e.g. ARM Cortex-M) to be used in industrial controls, home appliances, medical devices, consumer electronics, and IoT just to name a few. The end goal would be something similar to [https://www.segger.com/products/user-interface/emwin Segger's emWin]. The library would be used to drive LDCs similar to https://www.adafruit.com/product/3396<br />
Requirements:<br />
<br />
* Hardware agnostic; should simply render to a frame buffer<br />
* No dependencies (No Phobos, no C standard library, and no official D runtime).<br />
* Consider using -betterC, but a custom minimal D runtime is also a viable option<br />
<br />
Related work:<br />
<br />
* https://github.com/TurkeyMan/color<br />
* https://bitbucket.org/timosi/minlibd<br />
* https://github.com/JinShil/stm32f42_discovery_demo<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Tabular data container (data frames) ===<br />
----<br />
<br />
Pandas, R and Julia have made [https://github.com/mobileink/data.frame/wiki/What-is-a-Data-Frame%3F data frames] very popular.<br />
As D is getting more interest from data scientist (e.g. [https://github.com/eBay/tsv-utils eBay] or [http://tech.adroll.com/blog/data/2014/11/17/d-is-for-data-science.html AdRoll]) it would be very beneficial to use one language for the entire data analysis pipeline - especially considering that D (in contrast to popular languages like Python, R or Julia) - is compiled to native machine code and gets optimized by the sophisticated LLVM backend.<br />
<br />
Minimum requirements:<br />
<br />
* conversion to and from CSV<br />
* multi-indexing<br />
* column binary operations, e.g. `column1 * column2`<br />
* group-by on an arbitrary number of columns<br />
* column/group aggregations<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
=== C++ interops ===<br />
----<br />
<br />
There are many experiments in transparently interfacing D with C++, notably:<br />
<br />
* [https://github.com/atilaneves/dpp dpp] by Atila Neves, that parses and translates headers on the fly<br />
* [https://wiki.dlang.org/Calypso Calypso] by Elie Morisse that bridges the two languages at the AST level.<br />
* [https://github.com/jacob-carlborg/dstep DStep] by Jacob Carlborg, automatically generates bindings for C and Objective-C code. The task would be to add support for C++.<br />
<br />
There is also a lot of work in bringing STL types to the DRuntime (see https://github.com/dlang/druntime/pull/2310).<br />
<br />
D would greatly benefit by seamlessly integrating the C++ ecosystem. There are many ways to accomplish this goal and it should be discussed with the community.<br />
Andrei already commented on the importance of a tool like Calypso in this thread:<br />
https://forum.dlang.org/post/m9s4cd$2s1v$1@digitalmars.com<br />
<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Persistent Data Structures ===<br />
----<br />
<br />
There is an ongoing effort to reduce the reliance of Phobos on the GC but the GC is not going anywhere given that it has many advantages over manual memory management.<br />
The community would greatly benefit from a wide range of functional programming techniques that have their roots in the usage of immutable and persistent data structures that heavily rely on the GC.<br />
Persistent Data Structures are heavily used in [http://docs.scala-lang.org/overviews/collections/overview.html Scala] and [http://clojure.org/reference/data_structures Clojure] and they allow the programmer to reason about interactivity, sharing and parallelism.<br />
<br />
The focus of this project would be to create a varying range of persistent data structures (sets, vectors, maps, strings, trees, lists, etc...) that respects the range interface and the semantics of Phobos.<br />
<br />
Related Work:<br />
<br />
* https://www.cs.cmu.edu/~rwh/theses/okasaki.pdf <br />
* https://www.worldcat.org/title/rrb-trees-efficient-immutable-vectors/oclc/820379112<br />
* https://www.youtube.com/watch?v=7BFF50BHPPo<br />
* https://www.infoq.com/presentations/Value-Values<br />
* https://github.com/arximboldi/immer<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Language Server Protocol for D ===<br />
----<br />
<br />
The [https://microsoft.github.io/language-server-protocol Language Server Protocol] (LSP) defines the protocol used between an editor or IDE and a language server that provides language features like auto complete, go to definition, find all references etc. Adding features like auto complete, go to definition, or documentation on hover for a programming language takes significant effort. Traditionally this work had to be repeated for each development tool, as each tool provides different APIs for implementing the same feature (see the list of [[Editors]] and [[IDEs]]). Additionally as the existing tools only use `libdparse` (used in [https://github.com/d-language-server/dls DLS] and [https://github.com/dlang-community/DCD DCD]), they lack the ability to perform semantic analysis on the AST and can't evaluate `mixin`'s nor D's very powerful Compile-Time Function Evaluation (CTFE).<br />
A Language Server is meant to provide the language-specific smarts and communicate with development tools over a protocol that enables inter-process communication.<br />
The idea behind the Language Server Protocol (LSP) is to standardize the protocol for how such servers and development tools communicate. This way, single D Language Server can be re-used in multiple development tools, which in turn can support multiple languages with minimal effort.<br />
<br />
Recent development in the DMD compiler [https://dlang.org/blog/2017/08/01/a-dub-case-study-compiling-dmd-as-a-library made it available as a DUB library]. This mean that the compiler itself can be re-used and third-party tools don't have to re-implement e.g. D's complex CTFE. This project is about using the DMD compiler as a library to implement a Language Server for D.<br />
<br />
Proposed Project Mentors: Jacob Carlborg, Sebastian Wilzbach<br />
<br />
How to start:<br />
* [https://github.com/dlang/dmd/blob/master/test/dub_package/frontend.d Simple example] of using DMD as a library<br />
* [https://github.com/jacob-carlborg/dlp More complex use cases]<br />
<br />
=== Mir Project ===<br />
----<br />
<br />
The Mir project is developing numerical libraries for the upcoming numeric packages of<br />
the Dlang standard library. The are numerous projects an interested student could pursue:<br />
<br />
* University project. Your GSoC project can be combined with your scientific research.<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://julialang.org Julia] integration<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://www.numpy.org NumPy] integration<br />
* General purpose BetterC libraries<br />
** I/O betterC Dlang library<br />
** Async betterC Dlang library<br />
** String and format betterC library<br />
* mir-cpuid <br />
** ARM support<br />
** Advanced OS specific support<br />
* mir-glas<br />
** BLAS Level 2 subprograms<br />
** One BLAS Level 3 subprogram. It is OK to do only one! But it must be faster then OpenBLAS, and not slower then Intel MKL.<br />
** Multithreading support for BLAS Level 2<br />
** Multithreading support for BLAS Level 3<br />
<br />
You can get more details on projects related to Mir [https://github.com/libmir/mir/wiki/GSoC-2019 here].<br />
<br />
Its Good To Know:<br />
<br />
To work on the Mir you should be proficient with one of:<br />
<br />
* C<br />
* C++<br />
* LLVM<br />
* Fortran<br />
* Experience with D is not essential.<br />
<br />
To work on the Mir project requires a responsible and self-motivated student.<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
=== DUB: D's package manager ===<br />
----<br />
<br />
[https://github.com/dlang/dub DUB] - D's package manager - is one of the central infrastructure tools in the D world as a convenient build and package management tool for the D community.<br />
With D gaining more and more popularity, it's also a key tool to guarantee D's further adoption.<br />
Thus there are many great ideas to improve DUB:<br />
<br />
* [https://github.com/dlang/dub/wiki/DEP6 git support]<br />
* [https://github.com/dlang/dub/wiki/DEP2 separate compilation and caching]<br />
* [https://github.com/dlang/dub/wiki/DEP3 extensibility through DUB]<br />
* [https://github.com/dlang/dub/wiki/DEP4 control flow directives]<br />
* [https://github.com/dlang/dub/wiki/DEP5 build system support for C/C++]<br />
* support dub install for distributions<br />
* support building a {snap, Debian, Arch, ...} package out of DUB package<br />
<br />
Any of these listed DUB Enhancement Proposals (DEPs) could form the basis of a GSoC Project.<br />
<br />
Proposed Project Mentors: Sönke Ludwig, Sebastian Wilzbach<br />
<br />
=== LDC (LLVM-based D compiler) ===<br />
----<br />
<br />
The LDC project provides a portable D programming language compiler with modern optimization and code generation capabilities.<br />
The ever-improving feature set of LLVM opens up many opportunities with D.<br />
A few ideas for a potential GSoC project are:<br />
<br />
* exploiting immutability of variables (notably of structs such as string slices)<br />
* devirtualization<br />
* improve debuginfo<br />
* ASan with GC and multithreading<br />
* function multiversioning<br />
<br />
You might also want to browse the [https://github.com/ldc-developers/ldc/issues LDC's issue tracker] for more ideas.<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== BetterC runtime ===<br />
----<br />
<br />
[https://dlang.org/blog/2017/08/23/d-as-a-better-c BetterC] is a subset of D which limits the feature set of D, s.t. it's even easier to migrate from C as no Garbage Collection (GC) is used anymore.<br />
While, this feature is popular for some projects, `-betterC` today means still means a severe restriction in the amount of D features available (see the [https://dlang.org/spec/betterc.html BetterC specification].<br />
This project is about making more parts of the D runtime betterC-compatible. For example, classes could be allocated with reference-counting instead of using the GC. <br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== std.benchmark ===<br />
----<br />
<br />
Ideally every function in Phobos should have its own benchmark suite which is run for every PR to check for performance improvements or regressions.<br />
* Additionally support for the new big O annotation [https://github.com/dlang/phobos/pull/4965 here] would be nice. <br />
* Existing work: [https://github.com/dlang/phobos/pull/794 here], and [https://github.com/dlang/phobos/pull/3695 here], and [https://github.com/atilaneves/unit-threaded/tree/master/source/unit_threaded/randomized here (QuickText-like testing)]. <br />
<br />
Proposed Project Mentors: Sebastian Wilzbach<br />
<br />
=== Jupyter notebook D kernel ===<br />
----<br />
<br />
The Jupyter Notebook is an open-source web application that allows you to create and share documents that contain live code, equations, visualizations and narrative text. Uses include: data cleaning and transformation, numerical simulation, statistical modeling, data visualization, machine learning, and much more.<br />
Jupyter notebooks are extremely popular among data scientist as they allow interactive progress and exploring a solution step by step.<br />
With a bit of work, a statically compiled language can be used in an interactive notebook e.g. [Cling https://blog.jupyter.org/interactive-workflows-for-c-with-jupyter-fe9b54227d92] and Go with<br />
[https://github.com/gopherdata/gophernotes gophernotes].<br />
Apart from being useful to data scientist, a Jupyter D kernel would allow an intuitive exploration of the language for newcomers and people starting with new libraries.<br />
<br />
Existing works:<br />
- [https://github.com/dlang-community/drepl drepl] - simple REPL for D<br />
- [https://github.com/DlangScience/PydMagic PydMagic] - allows to write PyD extension in a notebook.<br />
<br />
Proposed Project Mentor: Sebastian Wilzbach<br />
<br />
=== Functional Reactive Programming ===<br />
----<br />
<br />
Functional reactive programming (FRP) is a programming paradigm for reactive programming (asynchronous dataflow programming) using the building blocks of functional programming (e.g. map, reduce, filter).<br />
The best-known FRP API is the [http://reactivex.io ReactiveX API] whose implementation in D this project would focus.<br />
Note that this project is closely related to the std.eventloop project.<br />
<br />
Proposed Project Mentors: Petar Kirov<br />
<br />
=== Java Native Interface (JNI) library ===<br />
----<br />
<br />
D's features allow to write cut down the boilerplate of wrapper drastically.<br />
See the recently published [https://dlang.org/blog/2017/05/31/project-highlight-excel-d excel-d] for a comparison between the C++ implementation for registering a function in Excel and the D way.<br />
Similarly a solid JNI library would open up new many new use cases and allow the Java community to profit even easier from D's features.<br />
<br />
Previous work: [https://github.com/Monnoroch/DJni DJni], [https://github.com/jamesmahler/djvm djvm]<br />
Proposed Project Mentor: TBA<br />
<br />
=== ORM mapping ===<br />
----<br />
<br />
SQLAlchemy is an object-relational mapper which provides "a full suite of well known enterprise-level persistence patterns, designed for efficient and high-performing database access, adapted into a simple and Pythonic domain language".<br />
While there has been some attempts in implementing an ORM in D - none of these got close to the simplicity and usability of SQLAlchemy (see [[Database Libraries]]).<br />
However, with D's CTFE queries could - like std.format's strings - already be checked at compile-time and optimizations could be be applied to the parser and serializer.<br />
<br />
This project would be based on the [http://dconf.org/2016/talks/smith.html proposed std.database abstraction] and focus on creating a general-purpose ORM on top of it.<br />
<br />
See also: Martin Nowak's DConf16 talk about [http://dconf.org/2016/talks/nowak.html Object-Relational Mapper] <br />
<br />
Existing work:<br />
* [https://github.com/huntlabs/hunt-entity hunt-entity]<br />
<br />
Proposed Project Mentor: TBA<br />
<br />
=== std.serialization ===<br />
----<br />
<br />
D has numerous serialization frameworks. From `std.json` to `std.csv` over [https://github.com/dcarp/protobuf-d protobuf] to [https://github.com/vibe-d/vibe.d Vibe.d's] own serialization framework.<br />
The goal of this project is to implement a flexible (de)serialization framework that can be used as a standardized building block for various serialization related things.<br />
One important goal would be to define how a user-specified type has to work in order to make it serializable, as well as to allow the end-user (e.g. a user of std.json) to change the serialization of third-party types that cannot themselves be modified (i.e. let them define their own policies).<br />
<br />
Starting points:<br />
<br />
* [http://vibed.org/api/vibe.data.serialization Vibe.d's serialization framework]<br />
* [https://github.com/jacob-carlborg/orange Orange framework]<br />
<br />
Proposed Project Mentor: Jacob Carlborg<br />
<br />
=== Propose your own project ===<br />
----<br />
<br />
Do you have your own vision for improving D's success? That's great!<br />
Are you convinced that your project helps to advance open source technology related to the D programming language?<br />
Then simply get in touch with D's GSoC org admin (social (at) dlang (dot) org) and potential mentors for your project.<br />
<br />
If you are searching for inspiration, you might want to have a look at the [[DIPs| list of D Improvement Proposals (DIPs)]], the [[Vision/2018H1|high-level vision for this semester]] or the [[Wish_list|wish list]].<br />
<br />
<br />
== Ideas From Previous Years ==<br />
<br />
These GSoC idea pages from the past years which might provide more inspiration for proposing your own idea:<br />
<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2018 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2017 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2016_Ideas GSoC 2016 Ideas] (accepted, 4 slots)<br />
* [http://wiki.dlang.org/GSOC_2015_Ideas GSoC 2015 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2014_Ideas GSoC 2014 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2013_Ideas GSoC 2013 Ideas] (not accepted)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2012_Ideas GSoC 2012 Ideas] (accepted, 3 slots)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2011_Ideas GSoC 2011 Ideas]<br />
<br />
You may also want to have a look at [https://wiki.dlang.org/SAOC_2018_ideas the Symmetry Autumn of Code ideas page].<br />
<br />
== Tips for students ==<br />
<br />
Please see the "gsoc" articles at our [https://dlang.org/blog/category/gsoc/ official blog] which contain experience reports from students of previous years.<br />
<br />
Daniel Pocock has [http://danielpocock.com/getting-selected-for-google-summer-of-code-2015 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.<br />
<br />
<br />
== Tips for Mentors ==<br />
<br />
If you are interested in mentoring, please check out the [http://en.flossmanuals.net/GSoCMentoring/ organization administrator and mentor] manual for more information.<br />
<br />
[[Category:GSOC]]</div>Greenifyhttps://wiki.dlang.org/?title=GSOC_2019_Ideas&diff=9554GSOC 2019 Ideas2019-02-28T11:34:19Z<p>Greenify: Added BetterC runtime</p>
<hr />
<div>This is the D Language Foundation's Google Summer of Code 2019 page.<br />
<br />
If you are interested in working on a D project as part of GSoC 2019, as either a student or mentor, please contact the GSoC admins at social@dlang.org. Include "GSoC 2019" in the email subject line.<br />
<br />
<br />
== Timeline ==<br />
The timeline for GSoC 2019 [https://developers.google.com/open-source/gsoc/timeline can be found here].<br />
<br />
== Ideas ==<br />
<br />
The D ecosystem is always in need of improvement through the revision of existing projects and the creation of new ones. The core projects like the([http://dlang.org/phobos/index.html standard library]) and the compilers ([[Compilers]]) are always in need of attention. Other important areas include GUI support, integration with other languages, improving and enhancing the tooling, IDE and editor support, and more.<br />
<br />
Please add your project ideas to the list below, being as descriptive as you can in the summaries. Students interested in participating can use the ideas listed here as jumping off points, so the more information you provide, the easier it will be for them to get started. If your idea is particularly complex or nuanced, consider leaving contact information so that interested parties may follow up.<br />
<br />
=== Graphics library for resource constrained embedded systems ===<br />
----<br />
<br />
Create a 2D rasterizer, rich drawing primitives, and 2D graphics library suitable for resource constrained embedded systems (e.g. ARM Cortex-M) to be used in industrial controls, home appliances, medical devices, consumer electronics, and IoT just to name a few. The end goal would be something similar to [https://www.segger.com/products/user-interface/emwin Segger's emWin]. The library would be used to drive LDCs similar to https://www.adafruit.com/product/3396<br />
Requirements:<br />
<br />
* Hardware agnostic; should simply render to a frame buffer<br />
* No dependencies (No Phobos, no C standard library, and no official D runtime).<br />
* Consider using -betterC, but a custom minimal D runtime is also a viable option<br />
<br />
Related work:<br />
<br />
* https://github.com/TurkeyMan/color<br />
* https://bitbucket.org/timosi/minlibd<br />
* https://github.com/JinShil/stm32f42_discovery_demo<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Tabular data container (data frames) ===<br />
----<br />
<br />
Pandas, R and Julia have made [https://github.com/mobileink/data.frame/wiki/What-is-a-Data-Frame%3F data frames] very popular.<br />
As D is getting more interest from data scientist (e.g. [https://github.com/eBay/tsv-utils eBay] or [http://tech.adroll.com/blog/data/2014/11/17/d-is-for-data-science.html AdRoll]) it would be very beneficial to use one language for the entire data analysis pipeline - especially considering that D (in contrast to popular languages like Python, R or Julia) - is compiled to native machine code and gets optimized by the sophisticated LLVM backend.<br />
<br />
Minimum requirements:<br />
<br />
* conversion to and from CSV<br />
* multi-indexing<br />
* column binary operations, e.g. `column1 * column2`<br />
* group-by on an arbitrary number of columns<br />
* column/group aggregations<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
=== C++ interops ===<br />
----<br />
<br />
There are many experiments in transparently interfacing D with C++, notably:<br />
<br />
* [https://github.com/atilaneves/dpp dpp] by Atila Neves, that parses and translates headers on the fly<br />
* [https://wiki.dlang.org/Calypso Calypso] by Elie Morisse that bridges the two languages at the AST level.<br />
* [https://github.com/jacob-carlborg/dstep DStep] by Jacob Carlborg, automatically generates bindings for C and Objective-C code. The task would be to add support for C++.<br />
<br />
There is also a lot of work in bringing STL types to the DRuntime (see https://github.com/dlang/druntime/pull/2310).<br />
<br />
D would greatly benefit by seamlessly integrating the C++ ecosystem. There are many ways to accomplish this goal and it should be discussed with the community.<br />
Andrei already commented on the importance of a tool like Calypso in this thread:<br />
https://forum.dlang.org/post/m9s4cd$2s1v$1@digitalmars.com<br />
<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Persistent Data Structures ===<br />
----<br />
<br />
There is an ongoing effort to reduce the reliance of Phobos on the GC but the GC is not going anywhere given that it has many advantages over manual memory management.<br />
The community would greatly benefit from a wide range of functional programming techniques that have their roots in the usage of immutable and persistent data structures that heavily rely on the GC.<br />
Persistent Data Structures are heavily used in [http://docs.scala-lang.org/overviews/collections/overview.html Scala] and [http://clojure.org/reference/data_structures Clojure] and they allow the programmer to reason about interactivity, sharing and parallelism.<br />
<br />
The focus of this project would be to create a varying range of persistent data structures (sets, vectors, maps, strings, trees, lists, etc...) that respects the range interface and the semantics of Phobos.<br />
<br />
Related Work:<br />
<br />
* https://www.cs.cmu.edu/~rwh/theses/okasaki.pdf <br />
* https://www.worldcat.org/title/rrb-trees-efficient-immutable-vectors/oclc/820379112<br />
* https://www.youtube.com/watch?v=7BFF50BHPPo<br />
* https://www.infoq.com/presentations/Value-Values<br />
* https://github.com/arximboldi/immer<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Language Server Protocol for D ===<br />
----<br />
<br />
The [https://microsoft.github.io/language-server-protocol Language Server Protocol] (LSP) defines the protocol used between an editor or IDE and a language server that provides language features like auto complete, go to definition, find all references etc. Adding features like auto complete, go to definition, or documentation on hover for a programming language takes significant effort. Traditionally this work had to be repeated for each development tool, as each tool provides different APIs for implementing the same feature (see the list of [[Editors]] and [[IDEs]]). Additionally as the existing tools only use `libdparse` (used in [https://github.com/d-language-server/dls DLS] and [https://github.com/dlang-community/DCD DCD]), they lack the ability to perform semantic analysis on the AST and can't evaluate `mixin`'s nor D's very powerful Compile-Time Function Evaluation (CTFE).<br />
A Language Server is meant to provide the language-specific smarts and communicate with development tools over a protocol that enables inter-process communication.<br />
The idea behind the Language Server Protocol (LSP) is to standardize the protocol for how such servers and development tools communicate. This way, single D Language Server can be re-used in multiple development tools, which in turn can support multiple languages with minimal effort.<br />
<br />
Recent development in the DMD compiler [https://dlang.org/blog/2017/08/01/a-dub-case-study-compiling-dmd-as-a-library made it available as a DUB library]. This mean that the compiler itself can be re-used and third-party tools don't have to re-implement e.g. D's complex CTFE. This project is about using the DMD compiler as a library to implement a Language Server for D.<br />
<br />
Proposed Project Mentors: Jacob Carlborg, Sebastian Wilzbach<br />
<br />
How to start:<br />
* [https://github.com/dlang/dmd/blob/master/test/dub_package/frontend.d Simple example] of using DMD as a library<br />
* [https://github.com/jacob-carlborg/dlp More complex use cases]<br />
<br />
=== Mir Project ===<br />
----<br />
<br />
The Mir project is developing numerical libraries for the upcoming numeric packages of<br />
the Dlang standard library. The are numerous projects an interested student could pursue:<br />
<br />
* University project. Your GSoC project can be combined with your scientific research.<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://julialang.org Julia] integration<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://www.numpy.org NumPy] integration<br />
* General purpose BetterC libraries<br />
** I/O betterC Dlang library<br />
** Async betterC Dlang library<br />
** String and format betterC library<br />
* mir-cpuid <br />
** ARM support<br />
** Advanced OS specific support<br />
* mir-glas<br />
** BLAS Level 2 subprograms<br />
** One BLAS Level 3 subprogram. It is OK to do only one! But it must be faster then OpenBLAS, and not slower then Intel MKL.<br />
** Multithreading support for BLAS Level 2<br />
** Multithreading support for BLAS Level 3<br />
<br />
You can get more details on projects related to Mir [https://github.com/libmir/mir/wiki/GSoC-2019 here].<br />
<br />
Its Good To Know:<br />
<br />
To work on the Mir you should be proficient with one of:<br />
<br />
* C<br />
* C++<br />
* LLVM<br />
* Fortran<br />
* Experience with D is not essential.<br />
<br />
To work on the Mir project requires a responsible and self-motivated student.<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
=== DUB: D's package manager ===<br />
----<br />
<br />
[https://github.com/dlang/dub DUB] - D's package manager - is one of the central infrastructure tools in the D world as a convenient build and package management tool for the D community.<br />
With D gaining more and more popularity, it's also a key tool to guarantee D's further adoption.<br />
Thus there are many great ideas to improve DUB:<br />
<br />
* [https://github.com/dlang/dub/wiki/DEP6 git support]<br />
* [https://github.com/dlang/dub/wiki/DEP2 separate compilation and caching]<br />
* [https://github.com/dlang/dub/wiki/DEP3 extensibility through DUB]<br />
* [https://github.com/dlang/dub/wiki/DEP4 control flow directives]<br />
* [https://github.com/dlang/dub/wiki/DEP5 build system support for C/C++]<br />
* support dub install for distributions<br />
* support building a {snap, Debian, Arch, ...} package out of DUB package<br />
<br />
Any of these listed DUB Enhancement Proposals (DEPs) could form the basis of a GSoC Project.<br />
<br />
Proposed Project Mentors: Sönke Ludwig, Sebastian Wilzbach<br />
<br />
=== LDC (LLVM-based D compiler) ===<br />
----<br />
<br />
The LDC project provides a portable D programming language compiler with modern optimization and code generation capabilities.<br />
The ever-improving feature set of LLVM opens up many opportunities with D.<br />
A few ideas for a potential GSoC project are:<br />
<br />
* exploiting immutability of variables (notably of structs such as string slices)<br />
* devirtualization<br />
* improve debuginfo<br />
* ASan with GC and multithreading<br />
* function multiversioning<br />
<br />
You might also want to browse the [https://github.com/ldc-developers/ldc/issues LDC's issue tracker] for more ideas.<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== BetterC runtime ===<br />
----<br />
<br />
[BetterC](https://dlang.org/blog/2017/08/23/d-as-a-better-c/) is a subset of D which limits the feature set of D, s.t. it's even easier to migrate from C as no Garbage Collection (GC) is used anymore.<br />
While, this feature is popular for some projects, `-betterC` today means still means a severe restriction in the amount of D features available (see the [https://dlang.org/spec/betterc.html BetterC specification).<br />
This project is about making more parts of the D runtime betterC-compatible. For example, classes could be allocated with reference-counting instead of using the GC. <br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== std.benchmark ===<br />
----<br />
<br />
Ideally every function in Phobos should have its own benchmark suite which is run for every PR to check for performance improvements or regressions.<br />
* Additionally support for the new big O annotation [https://github.com/dlang/phobos/pull/4965 here] would be nice. <br />
* Existing work: [https://github.com/dlang/phobos/pull/794 here], and [https://github.com/dlang/phobos/pull/3695 here], and [https://github.com/atilaneves/unit-threaded/tree/master/source/unit_threaded/randomized here (QuickText-like testing)]. <br />
<br />
Proposed Project Mentors: Sebastian Wilzbach<br />
<br />
=== Jupyter notebook D kernel ===<br />
----<br />
<br />
The Jupyter Notebook is an open-source web application that allows you to create and share documents that contain live code, equations, visualizations and narrative text. Uses include: data cleaning and transformation, numerical simulation, statistical modeling, data visualization, machine learning, and much more.<br />
Jupyter notebooks are extremely popular among data scientist as they allow interactive progress and exploring a solution step by step.<br />
With a bit of work, a statically compiled language can be used in an interactive notebook e.g. [Cling https://blog.jupyter.org/interactive-workflows-for-c-with-jupyter-fe9b54227d92] and Go with<br />
[https://github.com/gopherdata/gophernotes gophernotes].<br />
Apart from being useful to data scientist, a Jupyter D kernel would allow an intuitive exploration of the language for newcomers and people starting with new libraries.<br />
<br />
Existing works:<br />
- [https://github.com/dlang-community/drepl drepl] - simple REPL for D<br />
- [https://github.com/DlangScience/PydMagic PydMagic] - allows to write PyD extension in a notebook.<br />
<br />
Proposed Project Mentor: Sebastian Wilzbach<br />
<br />
=== Functional Reactive Programming ===<br />
----<br />
<br />
Functional reactive programming (FRP) is a programming paradigm for reactive programming (asynchronous dataflow programming) using the building blocks of functional programming (e.g. map, reduce, filter).<br />
The best-known FRP API is the [http://reactivex.io ReactiveX API] whose implementation in D this project would focus.<br />
Note that this project is closely related to the std.eventloop project.<br />
<br />
Proposed Project Mentors: Petar Kirov<br />
<br />
=== Java Native Interface (JNI) library ===<br />
----<br />
<br />
D's features allow to write cut down the boilerplate of wrapper drastically.<br />
See the recently published [https://dlang.org/blog/2017/05/31/project-highlight-excel-d excel-d] for a comparison between the C++ implementation for registering a function in Excel and the D way.<br />
Similarly a solid JNI library would open up new many new use cases and allow the Java community to profit even easier from D's features.<br />
<br />
Previous work: [https://github.com/Monnoroch/DJni DJni], [https://github.com/jamesmahler/djvm djvm]<br />
Proposed Project Mentor: TBA<br />
<br />
=== ORM mapping ===<br />
----<br />
<br />
SQLAlchemy is an object-relational mapper which provides "a full suite of well known enterprise-level persistence patterns, designed for efficient and high-performing database access, adapted into a simple and Pythonic domain language".<br />
While there has been some attempts in implementing an ORM in D - none of these got close to the simplicity and usability of SQLAlchemy (see [[Database Libraries]]).<br />
However, with D's CTFE queries could - like std.format's strings - already be checked at compile-time and optimizations could be be applied to the parser and serializer.<br />
<br />
This project would be based on the [http://dconf.org/2016/talks/smith.html proposed std.database abstraction] and focus on creating a general-purpose ORM on top of it.<br />
<br />
See also: Martin Nowak's DConf16 talk about [http://dconf.org/2016/talks/nowak.html Object-Relational Mapper] <br />
<br />
Existing work:<br />
* [https://github.com/huntlabs/hunt-entity hunt-entity]<br />
<br />
Proposed Project Mentor: TBA<br />
<br />
=== std.serialization ===<br />
----<br />
<br />
D has numerous serialization frameworks. From `std.json` to `std.csv` over [https://github.com/dcarp/protobuf-d protobuf] to [https://github.com/vibe-d/vibe.d Vibe.d's] own serialization framework.<br />
The goal of this project is to implement a flexible (de)serialization framework that can be used as a standardized building block for various serialization related things.<br />
One important goal would be to define how a user-specified type has to work in order to make it serializable, as well as to allow the end-user (e.g. a user of std.json) to change the serialization of third-party types that cannot themselves be modified (i.e. let them define their own policies).<br />
<br />
Starting points:<br />
<br />
* [http://vibed.org/api/vibe.data.serialization Vibe.d's serialization framework]<br />
* [https://github.com/jacob-carlborg/orange Orange framework]<br />
<br />
Proposed Project Mentor: Jacob Carlborg<br />
<br />
=== Propose your own project ===<br />
----<br />
<br />
Do you have your own vision for improving D's success? That's great!<br />
Are you convinced that your project helps to advance open source technology related to the D programming language?<br />
Then simply get in touch with D's GSoC org admin (social (at) dlang (dot) org) and potential mentors for your project.<br />
<br />
If you are searching for inspiration, you might want to have a look at the [[DIPs| list of D Improvement Proposals (DIPs)]], the [[Vision/2018H1|high-level vision for this semester]] or the [[Wish_list|wish list]].<br />
<br />
<br />
== Ideas From Previous Years ==<br />
<br />
These GSoC idea pages from the past years which might provide more inspiration for proposing your own idea:<br />
<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2018 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2017 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2016_Ideas GSoC 2016 Ideas] (accepted, 4 slots)<br />
* [http://wiki.dlang.org/GSOC_2015_Ideas GSoC 2015 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2014_Ideas GSoC 2014 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2013_Ideas GSoC 2013 Ideas] (not accepted)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2012_Ideas GSoC 2012 Ideas] (accepted, 3 slots)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2011_Ideas GSoC 2011 Ideas]<br />
<br />
You may also want to have a look at [https://wiki.dlang.org/SAOC_2018_ideas the Symmetry Autumn of Code ideas page].<br />
<br />
== Tips for students ==<br />
<br />
Please see the "gsoc" articles at our [https://dlang.org/blog/category/gsoc/ official blog] which contain experience reports from students of previous years.<br />
<br />
Daniel Pocock has [http://danielpocock.com/getting-selected-for-google-summer-of-code-2015 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.<br />
<br />
<br />
== Tips for Mentors ==<br />
<br />
If you are interested in mentoring, please check out the [http://en.flossmanuals.net/GSoCMentoring/ organization administrator and mentor] manual for more information.<br />
<br />
[[Category:GSOC]]</div>Greenifyhttps://wiki.dlang.org/?title=GSOC_2019_Ideas&diff=9553GSOC 2019 Ideas2019-02-28T11:24:38Z<p>Greenify: Added std.serialization</p>
<hr />
<div>This is the D Language Foundation's Google Summer of Code 2019 page.<br />
<br />
If you are interested in working on a D project as part of GSoC 2019, as either a student or mentor, please contact the GSoC admins at social@dlang.org. Include "GSoC 2019" in the email subject line.<br />
<br />
<br />
== Timeline ==<br />
The timeline for GSoC 2019 [https://developers.google.com/open-source/gsoc/timeline can be found here].<br />
<br />
== Ideas ==<br />
<br />
The D ecosystem is always in need of improvement through the revision of existing projects and the creation of new ones. The core projects like the([http://dlang.org/phobos/index.html standard library]) and the compilers ([[Compilers]]) are always in need of attention. Other important areas include GUI support, integration with other languages, improving and enhancing the tooling, IDE and editor support, and more.<br />
<br />
Please add your project ideas to the list below, being as descriptive as you can in the summaries. Students interested in participating can use the ideas listed here as jumping off points, so the more information you provide, the easier it will be for them to get started. If your idea is particularly complex or nuanced, consider leaving contact information so that interested parties may follow up.<br />
<br />
=== Graphics library for resource constrained embedded systems ===<br />
----<br />
<br />
Create a 2D rasterizer, rich drawing primitives, and 2D graphics library suitable for resource constrained embedded systems (e.g. ARM Cortex-M) to be used in industrial controls, home appliances, medical devices, consumer electronics, and IoT just to name a few. The end goal would be something similar to [https://www.segger.com/products/user-interface/emwin Segger's emWin]. The library would be used to drive LDCs similar to https://www.adafruit.com/product/3396<br />
Requirements:<br />
<br />
* Hardware agnostic; should simply render to a frame buffer<br />
* No dependencies (No Phobos, no C standard library, and no official D runtime).<br />
* Consider using -betterC, but a custom minimal D runtime is also a viable option<br />
<br />
Related work:<br />
<br />
* https://github.com/TurkeyMan/color<br />
* https://bitbucket.org/timosi/minlibd<br />
* https://github.com/JinShil/stm32f42_discovery_demo<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Tabular data container (data frames) ===<br />
----<br />
<br />
Pandas, R and Julia have made [https://github.com/mobileink/data.frame/wiki/What-is-a-Data-Frame%3F data frames] very popular.<br />
As D is getting more interest from data scientist (e.g. [https://github.com/eBay/tsv-utils eBay] or [http://tech.adroll.com/blog/data/2014/11/17/d-is-for-data-science.html AdRoll]) it would be very beneficial to use one language for the entire data analysis pipeline - especially considering that D (in contrast to popular languages like Python, R or Julia) - is compiled to native machine code and gets optimized by the sophisticated LLVM backend.<br />
<br />
Minimum requirements:<br />
<br />
* conversion to and from CSV<br />
* multi-indexing<br />
* column binary operations, e.g. `column1 * column2`<br />
* group-by on an arbitrary number of columns<br />
* column/group aggregations<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
=== C++ interops ===<br />
----<br />
<br />
There are many experiments in transparently interfacing D with C++, notably:<br />
<br />
* [https://github.com/atilaneves/dpp dpp] by Atila Neves, that parses and translates headers on the fly<br />
* [https://wiki.dlang.org/Calypso Calypso] by Elie Morisse that bridges the two languages at the AST level.<br />
* [https://github.com/jacob-carlborg/dstep DStep] by Jacob Carlborg, automatically generates bindings for C and Objective-C code. The task would be to add support for C++.<br />
<br />
There is also a lot of work in bringing STL types to the DRuntime (see https://github.com/dlang/druntime/pull/2310).<br />
<br />
D would greatly benefit by seamlessly integrating the C++ ecosystem. There are many ways to accomplish this goal and it should be discussed with the community.<br />
Andrei already commented on the importance of a tool like Calypso in this thread:<br />
https://forum.dlang.org/post/m9s4cd$2s1v$1@digitalmars.com<br />
<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Persistent Data Structures ===<br />
----<br />
<br />
There is an ongoing effort to reduce the reliance of Phobos on the GC but the GC is not going anywhere given that it has many advantages over manual memory management.<br />
The community would greatly benefit from a wide range of functional programming techniques that have their roots in the usage of immutable and persistent data structures that heavily rely on the GC.<br />
Persistent Data Structures are heavily used in [http://docs.scala-lang.org/overviews/collections/overview.html Scala] and [http://clojure.org/reference/data_structures Clojure] and they allow the programmer to reason about interactivity, sharing and parallelism.<br />
<br />
The focus of this project would be to create a varying range of persistent data structures (sets, vectors, maps, strings, trees, lists, etc...) that respects the range interface and the semantics of Phobos.<br />
<br />
Related Work:<br />
<br />
* https://www.cs.cmu.edu/~rwh/theses/okasaki.pdf <br />
* https://www.worldcat.org/title/rrb-trees-efficient-immutable-vectors/oclc/820379112<br />
* https://www.youtube.com/watch?v=7BFF50BHPPo<br />
* https://www.infoq.com/presentations/Value-Values<br />
* https://github.com/arximboldi/immer<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Language Server Protocol for D ===<br />
----<br />
<br />
The [https://microsoft.github.io/language-server-protocol Language Server Protocol] (LSP) defines the protocol used between an editor or IDE and a language server that provides language features like auto complete, go to definition, find all references etc. Adding features like auto complete, go to definition, or documentation on hover for a programming language takes significant effort. Traditionally this work had to be repeated for each development tool, as each tool provides different APIs for implementing the same feature (see the list of [[Editors]] and [[IDEs]]). Additionally as the existing tools only use `libdparse` (used in [https://github.com/d-language-server/dls DLS] and [https://github.com/dlang-community/DCD DCD]), they lack the ability to perform semantic analysis on the AST and can't evaluate `mixin`'s nor D's very powerful Compile-Time Function Evaluation (CTFE).<br />
A Language Server is meant to provide the language-specific smarts and communicate with development tools over a protocol that enables inter-process communication.<br />
The idea behind the Language Server Protocol (LSP) is to standardize the protocol for how such servers and development tools communicate. This way, single D Language Server can be re-used in multiple development tools, which in turn can support multiple languages with minimal effort.<br />
<br />
Recent development in the DMD compiler [https://dlang.org/blog/2017/08/01/a-dub-case-study-compiling-dmd-as-a-library made it available as a DUB library]. This mean that the compiler itself can be re-used and third-party tools don't have to re-implement e.g. D's complex CTFE. This project is about using the DMD compiler as a library to implement a Language Server for D.<br />
<br />
Proposed Project Mentors: Jacob Carlborg, Sebastian Wilzbach<br />
<br />
How to start:<br />
* [https://github.com/dlang/dmd/blob/master/test/dub_package/frontend.d Simple example] of using DMD as a library<br />
* [https://github.com/jacob-carlborg/dlp More complex use cases]<br />
<br />
=== Mir Project ===<br />
----<br />
<br />
The Mir project is developing numerical libraries for the upcoming numeric packages of<br />
the Dlang standard library. The are numerous projects an interested student could pursue:<br />
<br />
* University project. Your GSoC project can be combined with your scientific research.<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://julialang.org Julia] integration<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://www.numpy.org NumPy] integration<br />
* General purpose BetterC libraries<br />
** I/O betterC Dlang library<br />
** Async betterC Dlang library<br />
** String and format betterC library<br />
* mir-cpuid <br />
** ARM support<br />
** Advanced OS specific support<br />
* mir-glas<br />
** BLAS Level 2 subprograms<br />
** One BLAS Level 3 subprogram. It is OK to do only one! But it must be faster then OpenBLAS, and not slower then Intel MKL.<br />
** Multithreading support for BLAS Level 2<br />
** Multithreading support for BLAS Level 3<br />
<br />
You can get more details on projects related to Mir [https://github.com/libmir/mir/wiki/GSoC-2019 here].<br />
<br />
Its Good To Know:<br />
<br />
To work on the Mir you should be proficient with one of:<br />
<br />
* C<br />
* C++<br />
* LLVM<br />
* Fortran<br />
* Experience with D is not essential.<br />
<br />
To work on the Mir project requires a responsible and self-motivated student.<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
=== DUB: D's package manager ===<br />
----<br />
<br />
[https://github.com/dlang/dub DUB] - D's package manager - is one of the central infrastructure tools in the D world as a convenient build and package management tool for the D community.<br />
With D gaining more and more popularity, it's also a key tool to guarantee D's further adoption.<br />
Thus there are many great ideas to improve DUB:<br />
<br />
* [https://github.com/dlang/dub/wiki/DEP6 git support]<br />
* [https://github.com/dlang/dub/wiki/DEP2 separate compilation and caching]<br />
* [https://github.com/dlang/dub/wiki/DEP3 extensibility through DUB]<br />
* [https://github.com/dlang/dub/wiki/DEP4 control flow directives]<br />
* [https://github.com/dlang/dub/wiki/DEP5 build system support for C/C++]<br />
* support dub install for distributions<br />
* support building a {snap, Debian, Arch, ...} package out of DUB package<br />
<br />
Any of these listed DUB Enhancement Proposals (DEPs) could form the basis of a GSoC Project.<br />
<br />
Proposed Project Mentors: Sönke Ludwig, Sebastian Wilzbach<br />
<br />
=== LDC (LLVM-based D compiler) ===<br />
----<br />
<br />
The LDC project provides a portable D programming language compiler with modern optimization and code generation capabilities.<br />
The ever-improving feature set of LLVM opens up many opportunities with D.<br />
A few ideas for a potential GSoC project are:<br />
<br />
* exploiting immutability of variables (notably of structs such as string slices)<br />
* devirtualization<br />
* improve debuginfo<br />
* ASan with GC and multithreading<br />
* function multiversioning<br />
<br />
You might also want to browse the [https://github.com/ldc-developers/ldc/issues LDC's issue tracker] for more ideas.<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== std.benchmark ===<br />
----<br />
<br />
Ideally every function in Phobos should have its own benchmark suite which is run for every PR to check for performance improvements or regressions.<br />
* Additionally support for the new big O annotation [https://github.com/dlang/phobos/pull/4965 here] would be nice. <br />
* Existing work: [https://github.com/dlang/phobos/pull/794 here], and [https://github.com/dlang/phobos/pull/3695 here], and [https://github.com/atilaneves/unit-threaded/tree/master/source/unit_threaded/randomized here (QuickText-like testing)]. <br />
<br />
Proposed Project Mentors: Sebastian Wilzbach<br />
<br />
=== Jupyter notebook D kernel ===<br />
----<br />
<br />
The Jupyter Notebook is an open-source web application that allows you to create and share documents that contain live code, equations, visualizations and narrative text. Uses include: data cleaning and transformation, numerical simulation, statistical modeling, data visualization, machine learning, and much more.<br />
Jupyter notebooks are extremely popular among data scientist as they allow interactive progress and exploring a solution step by step.<br />
With a bit of work, a statically compiled language can be used in an interactive notebook e.g. [Cling https://blog.jupyter.org/interactive-workflows-for-c-with-jupyter-fe9b54227d92] and Go with<br />
[https://github.com/gopherdata/gophernotes gophernotes].<br />
Apart from being useful to data scientist, a Jupyter D kernel would allow an intuitive exploration of the language for newcomers and people starting with new libraries.<br />
<br />
Existing works:<br />
- [https://github.com/dlang-community/drepl drepl] - simple REPL for D<br />
- [https://github.com/DlangScience/PydMagic PydMagic] - allows to write PyD extension in a notebook.<br />
<br />
Proposed Project Mentor: Sebastian Wilzbach<br />
<br />
=== Functional Reactive Programming ===<br />
----<br />
<br />
Functional reactive programming (FRP) is a programming paradigm for reactive programming (asynchronous dataflow programming) using the building blocks of functional programming (e.g. map, reduce, filter).<br />
The best-known FRP API is the [http://reactivex.io ReactiveX API] whose implementation in D this project would focus.<br />
Note that this project is closely related to the std.eventloop project.<br />
<br />
Proposed Project Mentors: Petar Kirov<br />
<br />
=== Java Native Interface (JNI) library ===<br />
----<br />
<br />
D's features allow to write cut down the boilerplate of wrapper drastically.<br />
See the recently published [https://dlang.org/blog/2017/05/31/project-highlight-excel-d excel-d] for a comparison between the C++ implementation for registering a function in Excel and the D way.<br />
Similarly a solid JNI library would open up new many new use cases and allow the Java community to profit even easier from D's features.<br />
<br />
Previous work: [https://github.com/Monnoroch/DJni DJni], [https://github.com/jamesmahler/djvm djvm]<br />
Proposed Project Mentor: TBA<br />
<br />
=== ORM mapping ===<br />
----<br />
<br />
SQLAlchemy is an object-relational mapper which provides "a full suite of well known enterprise-level persistence patterns, designed for efficient and high-performing database access, adapted into a simple and Pythonic domain language".<br />
While there has been some attempts in implementing an ORM in D - none of these got close to the simplicity and usability of SQLAlchemy (see [[Database Libraries]]).<br />
However, with D's CTFE queries could - like std.format's strings - already be checked at compile-time and optimizations could be be applied to the parser and serializer.<br />
<br />
This project would be based on the [http://dconf.org/2016/talks/smith.html proposed std.database abstraction] and focus on creating a general-purpose ORM on top of it.<br />
<br />
See also: Martin Nowak's DConf16 talk about [http://dconf.org/2016/talks/nowak.html Object-Relational Mapper] <br />
<br />
Existing work:<br />
* [https://github.com/huntlabs/hunt-entity hunt-entity]<br />
<br />
Proposed Project Mentor: TBA<br />
<br />
=== std.serialization ===<br />
----<br />
<br />
D has numerous serialization frameworks. From `std.json` to `std.csv` over [https://github.com/dcarp/protobuf-d protobuf] to [https://github.com/vibe-d/vibe.d Vibe.d's] own serialization framework.<br />
The goal of this project is to implement a flexible (de)serialization framework that can be used as a standardized building block for various serialization related things.<br />
One important goal would be to define how a user-specified type has to work in order to make it serializable, as well as to allow the end-user (e.g. a user of std.json) to change the serialization of third-party types that cannot themselves be modified (i.e. let them define their own policies).<br />
<br />
Starting points:<br />
<br />
* [http://vibed.org/api/vibe.data.serialization Vibe.d's serialization framework]<br />
* [https://github.com/jacob-carlborg/orange Orange framework]<br />
<br />
Proposed Project Mentor: Jacob Carlborg<br />
<br />
=== Propose your own project ===<br />
----<br />
<br />
Do you have your own vision for improving D's success? That's great!<br />
Are you convinced that your project helps to advance open source technology related to the D programming language?<br />
Then simply get in touch with D's GSoC org admin (social (at) dlang (dot) org) and potential mentors for your project.<br />
<br />
If you are searching for inspiration, you might want to have a look at the [[DIPs| list of D Improvement Proposals (DIPs)]], the [[Vision/2018H1|high-level vision for this semester]] or the [[Wish_list|wish list]].<br />
<br />
<br />
== Ideas From Previous Years ==<br />
<br />
These GSoC idea pages from the past years which might provide more inspiration for proposing your own idea:<br />
<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2018 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2017 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2016_Ideas GSoC 2016 Ideas] (accepted, 4 slots)<br />
* [http://wiki.dlang.org/GSOC_2015_Ideas GSoC 2015 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2014_Ideas GSoC 2014 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2013_Ideas GSoC 2013 Ideas] (not accepted)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2012_Ideas GSoC 2012 Ideas] (accepted, 3 slots)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2011_Ideas GSoC 2011 Ideas]<br />
<br />
You may also want to have a look at [https://wiki.dlang.org/SAOC_2018_ideas the Symmetry Autumn of Code ideas page].<br />
<br />
== Tips for students ==<br />
<br />
Please see the "gsoc" articles at our [https://dlang.org/blog/category/gsoc/ official blog] which contain experience reports from students of previous years.<br />
<br />
Daniel Pocock has [http://danielpocock.com/getting-selected-for-google-summer-of-code-2015 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.<br />
<br />
<br />
== Tips for Mentors ==<br />
<br />
If you are interested in mentoring, please check out the [http://en.flossmanuals.net/GSoCMentoring/ organization administrator and mentor] manual for more information.<br />
<br />
[[Category:GSOC]]</div>Greenifyhttps://wiki.dlang.org/?title=GSOC_2019_Ideas&diff=9552GSOC 2019 Ideas2019-02-28T10:57:34Z<p>Greenify: Add LDC</p>
<hr />
<div>This is the D Language Foundation's Google Summer of Code 2019 page.<br />
<br />
If you are interested in working on a D project as part of GSoC 2019, as either a student or mentor, please contact the GSoC admins at social@dlang.org. Include "GSoC 2019" in the email subject line.<br />
<br />
<br />
== Timeline ==<br />
The timeline for GSoC 2019 [https://developers.google.com/open-source/gsoc/timeline can be found here].<br />
<br />
== Ideas ==<br />
<br />
The D ecosystem is always in need of improvement through the revision of existing projects and the creation of new ones. The core projects like the([http://dlang.org/phobos/index.html standard library]) and the compilers ([[Compilers]]) are always in need of attention. Other important areas include GUI support, integration with other languages, improving and enhancing the tooling, IDE and editor support, and more.<br />
<br />
Please add your project ideas to the list below, being as descriptive as you can in the summaries. Students interested in participating can use the ideas listed here as jumping off points, so the more information you provide, the easier it will be for them to get started. If your idea is particularly complex or nuanced, consider leaving contact information so that interested parties may follow up.<br />
<br />
=== Graphics library for resource constrained embedded systems ===<br />
----<br />
<br />
Create a 2D rasterizer, rich drawing primitives, and 2D graphics library suitable for resource constrained embedded systems (e.g. ARM Cortex-M) to be used in industrial controls, home appliances, medical devices, consumer electronics, and IoT just to name a few. The end goal would be something similar to [https://www.segger.com/products/user-interface/emwin Segger's emWin]. The library would be used to drive LDCs similar to https://www.adafruit.com/product/3396<br />
Requirements:<br />
<br />
* Hardware agnostic; should simply render to a frame buffer<br />
* No dependencies (No Phobos, no C standard library, and no official D runtime).<br />
* Consider using -betterC, but a custom minimal D runtime is also a viable option<br />
<br />
Related work:<br />
<br />
* https://github.com/TurkeyMan/color<br />
* https://bitbucket.org/timosi/minlibd<br />
* https://github.com/JinShil/stm32f42_discovery_demo<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Tabular data container (data frames) ===<br />
----<br />
<br />
Pandas, R and Julia have made [https://github.com/mobileink/data.frame/wiki/What-is-a-Data-Frame%3F data frames] very popular.<br />
As D is getting more interest from data scientist (e.g. [https://github.com/eBay/tsv-utils eBay] or [http://tech.adroll.com/blog/data/2014/11/17/d-is-for-data-science.html AdRoll]) it would be very beneficial to use one language for the entire data analysis pipeline - especially considering that D (in contrast to popular languages like Python, R or Julia) - is compiled to native machine code and gets optimized by the sophisticated LLVM backend.<br />
<br />
Minimum requirements:<br />
<br />
* conversion to and from CSV<br />
* multi-indexing<br />
* column binary operations, e.g. `column1 * column2`<br />
* group-by on an arbitrary number of columns<br />
* column/group aggregations<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
=== C++ interops ===<br />
----<br />
<br />
There are many experiments in transparently interfacing D with C++, notably:<br />
<br />
* [https://github.com/atilaneves/dpp dpp] by Atila Neves, that parses and translates headers on the fly<br />
* [https://wiki.dlang.org/Calypso Calypso] by Elie Morisse that bridges the two languages at the AST level.<br />
* [https://github.com/jacob-carlborg/dstep DStep] by Jacob Carlborg, automatically generates bindings for C and Objective-C code. The task would be to add support for C++.<br />
<br />
There is also a lot of work in bringing STL types to the DRuntime (see https://github.com/dlang/druntime/pull/2310).<br />
<br />
D would greatly benefit by seamlessly integrating the C++ ecosystem. There are many ways to accomplish this goal and it should be discussed with the community.<br />
Andrei already commented on the importance of a tool like Calypso in this thread:<br />
https://forum.dlang.org/post/m9s4cd$2s1v$1@digitalmars.com<br />
<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Persistent Data Structures ===<br />
----<br />
<br />
There is an ongoing effort to reduce the reliance of Phobos on the GC but the GC is not going anywhere given that it has many advantages over manual memory management.<br />
The community would greatly benefit from a wide range of functional programming techniques that have their roots in the usage of immutable and persistent data structures that heavily rely on the GC.<br />
Persistent Data Structures are heavily used in [http://docs.scala-lang.org/overviews/collections/overview.html Scala] and [http://clojure.org/reference/data_structures Clojure] and they allow the programmer to reason about interactivity, sharing and parallelism.<br />
<br />
The focus of this project would be to create a varying range of persistent data structures (sets, vectors, maps, strings, trees, lists, etc...) that respects the range interface and the semantics of Phobos.<br />
<br />
Related Work:<br />
<br />
* https://www.cs.cmu.edu/~rwh/theses/okasaki.pdf <br />
* https://www.worldcat.org/title/rrb-trees-efficient-immutable-vectors/oclc/820379112<br />
* https://www.youtube.com/watch?v=7BFF50BHPPo<br />
* https://www.infoq.com/presentations/Value-Values<br />
* https://github.com/arximboldi/immer<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Language Server Protocol for D ===<br />
----<br />
<br />
The [https://microsoft.github.io/language-server-protocol Language Server Protocol] (LSP) defines the protocol used between an editor or IDE and a language server that provides language features like auto complete, go to definition, find all references etc. Adding features like auto complete, go to definition, or documentation on hover for a programming language takes significant effort. Traditionally this work had to be repeated for each development tool, as each tool provides different APIs for implementing the same feature (see the list of [[Editors]] and [[IDEs]]). Additionally as the existing tools only use `libdparse` (used in [https://github.com/d-language-server/dls DLS] and [https://github.com/dlang-community/DCD DCD]), they lack the ability to perform semantic analysis on the AST and can't evaluate `mixin`'s nor D's very powerful Compile-Time Function Evaluation (CTFE).<br />
A Language Server is meant to provide the language-specific smarts and communicate with development tools over a protocol that enables inter-process communication.<br />
The idea behind the Language Server Protocol (LSP) is to standardize the protocol for how such servers and development tools communicate. This way, single D Language Server can be re-used in multiple development tools, which in turn can support multiple languages with minimal effort.<br />
<br />
Recent development in the DMD compiler [https://dlang.org/blog/2017/08/01/a-dub-case-study-compiling-dmd-as-a-library made it available as a DUB library]. This mean that the compiler itself can be re-used and third-party tools don't have to re-implement e.g. D's complex CTFE. This project is about using the DMD compiler as a library to implement a Language Server for D.<br />
<br />
Proposed Project Mentors: Jacob Carlborg, Sebastian Wilzbach<br />
<br />
How to start:<br />
* [https://github.com/dlang/dmd/blob/master/test/dub_package/frontend.d Simple example] of using DMD as a library<br />
* [https://github.com/jacob-carlborg/dlp More complex use cases]<br />
<br />
=== Mir Project ===<br />
----<br />
<br />
The Mir project is developing numerical libraries for the upcoming numeric packages of<br />
the Dlang standard library. The are numerous projects an interested student could pursue:<br />
<br />
* University project. Your GSoC project can be combined with your scientific research.<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://julialang.org Julia] integration<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://www.numpy.org NumPy] integration<br />
* General purpose BetterC libraries<br />
** I/O betterC Dlang library<br />
** Async betterC Dlang library<br />
** String and format betterC library<br />
* mir-cpuid <br />
** ARM support<br />
** Advanced OS specific support<br />
* mir-glas<br />
** BLAS Level 2 subprograms<br />
** One BLAS Level 3 subprogram. It is OK to do only one! But it must be faster then OpenBLAS, and not slower then Intel MKL.<br />
** Multithreading support for BLAS Level 2<br />
** Multithreading support for BLAS Level 3<br />
<br />
You can get more details on projects related to Mir [https://github.com/libmir/mir/wiki/GSoC-2019 here].<br />
<br />
Its Good To Know:<br />
<br />
To work on the Mir you should be proficient with one of:<br />
<br />
* C<br />
* C++<br />
* LLVM<br />
* Fortran<br />
* Experience with D is not essential.<br />
<br />
To work on the Mir project requires a responsible and self-motivated student.<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
=== DUB: D's package manager ===<br />
----<br />
<br />
[https://github.com/dlang/dub DUB] - D's package manager - is one of the central infrastructure tools in the D world as a convenient build and package management tool for the D community.<br />
With D gaining more and more popularity, it's also a key tool to guarantee D's further adoption.<br />
Thus there are many great ideas to improve DUB:<br />
<br />
* [https://github.com/dlang/dub/wiki/DEP6 git support]<br />
* [https://github.com/dlang/dub/wiki/DEP2 separate compilation and caching]<br />
* [https://github.com/dlang/dub/wiki/DEP3 extensibility through DUB]<br />
* [https://github.com/dlang/dub/wiki/DEP4 control flow directives]<br />
* [https://github.com/dlang/dub/wiki/DEP5 build system support for C/C++]<br />
* support dub install for distributions<br />
* support building a {snap, Debian, Arch, ...} package out of DUB package<br />
<br />
Any of these listed DUB Enhancement Proposals (DEPs) could form the basis of a GSoC Project.<br />
<br />
Proposed Project Mentors: Sönke Ludwig, Sebastian Wilzbach<br />
<br />
=== LDC (LLVM-based D compiler) ===<br />
----<br />
<br />
The LDC project provides a portable D programming language compiler with modern optimization and code generation capabilities.<br />
The ever-improving feature set of LLVM opens up many opportunities with D.<br />
A few ideas for a potential GSoC project are:<br />
<br />
* exploiting immutability of variables (notably of structs such as string slices)<br />
* devirtualization<br />
* improve debuginfo<br />
* ASan with GC and multithreading<br />
* function multiversioning<br />
<br />
You might also want to browse the [https://github.com/ldc-developers/ldc/issues LDC's issue tracker] for more ideas.<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== std.benchmark ===<br />
----<br />
<br />
Ideally every function in Phobos should have its own benchmark suite which is run for every PR to check for performance improvements or regressions.<br />
* Additionally support for the new big O annotation [https://github.com/dlang/phobos/pull/4965 here] would be nice. <br />
* Existing work: [https://github.com/dlang/phobos/pull/794 here], and [https://github.com/dlang/phobos/pull/3695 here], and [https://github.com/atilaneves/unit-threaded/tree/master/source/unit_threaded/randomized here (QuickText-like testing)]. <br />
<br />
Proposed Project Mentors: Sebastian Wilzbach<br />
<br />
=== Jupyter notebook D kernel ===<br />
----<br />
<br />
The Jupyter Notebook is an open-source web application that allows you to create and share documents that contain live code, equations, visualizations and narrative text. Uses include: data cleaning and transformation, numerical simulation, statistical modeling, data visualization, machine learning, and much more.<br />
Jupyter notebooks are extremely popular among data scientist as they allow interactive progress and exploring a solution step by step.<br />
With a bit of work, a statically compiled language can be used in an interactive notebook e.g. [Cling https://blog.jupyter.org/interactive-workflows-for-c-with-jupyter-fe9b54227d92] and Go with<br />
[https://github.com/gopherdata/gophernotes gophernotes].<br />
Apart from being useful to data scientist, a Jupyter D kernel would allow an intuitive exploration of the language for newcomers and people starting with new libraries.<br />
<br />
Existing works:<br />
- [https://github.com/dlang-community/drepl drepl] - simple REPL for D<br />
- [https://github.com/DlangScience/PydMagic PydMagic] - allows to write PyD extension in a notebook.<br />
<br />
Proposed Project Mentor: Sebastian Wilzbach<br />
<br />
=== Functional Reactive Programming ===<br />
----<br />
<br />
Functional reactive programming (FRP) is a programming paradigm for reactive programming (asynchronous dataflow programming) using the building blocks of functional programming (e.g. map, reduce, filter).<br />
The best-known FRP API is the [http://reactivex.io ReactiveX API] whose implementation in D this project would focus.<br />
Note that this project is closely related to the std.eventloop project.<br />
<br />
Proposed Project Mentors: Petar Kirov<br />
<br />
=== Java Native Interface (JNI) library ===<br />
----<br />
<br />
D's features allow to write cut down the boilerplate of wrapper drastically.<br />
See the recently published [https://dlang.org/blog/2017/05/31/project-highlight-excel-d excel-d] for a comparison between the C++ implementation for registering a function in Excel and the D way.<br />
Similarly a solid JNI library would open up new many new use cases and allow the Java community to profit even easier from D's features.<br />
<br />
Previous work: [https://github.com/Monnoroch/DJni DJni], [https://github.com/jamesmahler/djvm djvm]<br />
Proposed Project Mentor: TBA<br />
<br />
=== ORM mapping ===<br />
----<br />
<br />
SQLAlchemy is an object-relational mapper which provides "a full suite of well known enterprise-level persistence patterns, designed for efficient and high-performing database access, adapted into a simple and Pythonic domain language".<br />
While there has been some attempts in implementing an ORM in D - none of these got close to the simplicity and usability of SQLAlchemy (see [[Database Libraries]]).<br />
However, with D's CTFE queries could - like std.format's strings - already be checked at compile-time and optimizations could be be applied to the parser and serializer.<br />
<br />
This project would be based on the [http://dconf.org/2016/talks/smith.html proposed std.database abstraction] and focus on creating a general-purpose ORM on top of it.<br />
<br />
See also: Martin Nowak's DConf16 talk about [http://dconf.org/2016/talks/nowak.html Object-Relational Mapper] <br />
<br />
Existing work:<br />
* [https://github.com/huntlabs/hunt-entity hunt-entity]<br />
<br />
Proposed Project Mentor: TBA<br />
<br />
<br />
=== Propose your own project ===<br />
----<br />
<br />
Do you have your own vision for improving D's success? That's great!<br />
Are you convinced that your project helps to advance open source technology related to the D programming language?<br />
Then simply get in touch with D's GSoC org admin (social (at) dlang (dot) org) and potential mentors for your project.<br />
<br />
If you are searching for inspiration, you might want to have a look at the [[DIPs| list of D Improvement Proposals (DIPs)]], the [[Vision/2018H1|high-level vision for this semester]] or the [[Wish_list|wish list]].<br />
<br />
<br />
== Ideas From Previous Years ==<br />
<br />
These GSoC idea pages from the past years which might provide more inspiration for proposing your own idea:<br />
<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2018 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2017 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2016_Ideas GSoC 2016 Ideas] (accepted, 4 slots)<br />
* [http://wiki.dlang.org/GSOC_2015_Ideas GSoC 2015 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2014_Ideas GSoC 2014 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2013_Ideas GSoC 2013 Ideas] (not accepted)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2012_Ideas GSoC 2012 Ideas] (accepted, 3 slots)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2011_Ideas GSoC 2011 Ideas]<br />
<br />
You may also want to have a look at [https://wiki.dlang.org/SAOC_2018_ideas the Symmetry Autumn of Code ideas page].<br />
<br />
== Tips for students ==<br />
<br />
Please see the "gsoc" articles at our [https://dlang.org/blog/category/gsoc/ official blog] which contain experience reports from students of previous years.<br />
<br />
Daniel Pocock has [http://danielpocock.com/getting-selected-for-google-summer-of-code-2015 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.<br />
<br />
<br />
== Tips for Mentors ==<br />
<br />
If you are interested in mentoring, please check out the [http://en.flossmanuals.net/GSoCMentoring/ organization administrator and mentor] manual for more information.<br />
<br />
[[Category:GSOC]]</div>Greenifyhttps://wiki.dlang.org/?title=GSOC_2019_Ideas&diff=9551GSOC 2019 Ideas2019-02-28T10:50:40Z<p>Greenify: Stylistic changes</p>
<hr />
<div>This is the D Language Foundation's Google Summer of Code 2019 page.<br />
<br />
If you are interested in working on a D project as part of GSoC 2019, as either a student or mentor, please contact the GSoC admins at social@dlang.org. Include "GSoC 2019" in the email subject line.<br />
<br />
<br />
== Timeline ==<br />
The timeline for GSoC 2019 [https://developers.google.com/open-source/gsoc/timeline can be found here].<br />
<br />
== Ideas ==<br />
<br />
The D ecosystem is always in need of improvement through the revision of existing projects and the creation of new ones. The core projects like the([http://dlang.org/phobos/index.html standard library]) and the compilers ([[Compilers]]) are always in need of attention. Other important areas include GUI support, integration with other languages, improving and enhancing the tooling, IDE and editor support, and more.<br />
<br />
Please add your project ideas to the list below, being as descriptive as you can in the summaries. Students interested in participating can use the ideas listed here as jumping off points, so the more information you provide, the easier it will be for them to get started. If your idea is particularly complex or nuanced, consider leaving contact information so that interested parties may follow up.<br />
<br />
=== Graphics library for resource constrained embedded systems ===<br />
----<br />
<br />
Create a 2D rasterizer, rich drawing primitives, and 2D graphics library suitable for resource constrained embedded systems (e.g. ARM Cortex-M) to be used in industrial controls, home appliances, medical devices, consumer electronics, and IoT just to name a few. The end goal would be something similar to [https://www.segger.com/products/user-interface/emwin Segger's emWin]. The library would be used to drive LDCs similar to https://www.adafruit.com/product/3396<br />
Requirements:<br />
<br />
* Hardware agnostic; should simply render to a frame buffer<br />
* No dependencies (No Phobos, no C standard library, and no official D runtime).<br />
* Consider using -betterC, but a custom minimal D runtime is also a viable option<br />
<br />
Related work:<br />
<br />
* https://github.com/TurkeyMan/color<br />
* https://bitbucket.org/timosi/minlibd<br />
* https://github.com/JinShil/stm32f42_discovery_demo<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Tabular data container (data frames) ===<br />
----<br />
<br />
Pandas, R and Julia have made [https://github.com/mobileink/data.frame/wiki/What-is-a-Data-Frame%3F data frames] very popular.<br />
As D is getting more interest from data scientist (e.g. [https://github.com/eBay/tsv-utils eBay] or [http://tech.adroll.com/blog/data/2014/11/17/d-is-for-data-science.html AdRoll]) it would be very beneficial to use one language for the entire data analysis pipeline - especially considering that D (in contrast to popular languages like Python, R or Julia) - is compiled to native machine code and gets optimized by the sophisticated LLVM backend.<br />
<br />
Minimum requirements:<br />
<br />
* conversion to and from CSV<br />
* multi-indexing<br />
* column binary operations, e.g. `column1 * column2`<br />
* group-by on an arbitrary number of columns<br />
* column/group aggregations<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
=== C++ interops ===<br />
----<br />
<br />
There are many experiments in transparently interfacing D with C++, notably:<br />
<br />
* [https://github.com/atilaneves/dpp dpp] by Atila Neves, that parses and translates headers on the fly<br />
* [https://wiki.dlang.org/Calypso Calypso] by Elie Morisse that bridges the two languages at the AST level.<br />
* [https://github.com/jacob-carlborg/dstep DStep] by Jacob Carlborg, automatically generates bindings for C and Objective-C code. The task would be to add support for C++.<br />
<br />
There is also a lot of work in bringing STL types to the DRuntime (see https://github.com/dlang/druntime/pull/2310).<br />
<br />
D would greatly benefit by seamlessly integrating the C++ ecosystem. There are many ways to accomplish this goal and it should be discussed with the community.<br />
Andrei already commented on the importance of a tool like Calypso in this thread:<br />
https://forum.dlang.org/post/m9s4cd$2s1v$1@digitalmars.com<br />
<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Persistent Data Structures ===<br />
----<br />
<br />
There is an ongoing effort to reduce the reliance of Phobos on the GC but the GC is not going anywhere given that it has many advantages over manual memory management.<br />
The community would greatly benefit from a wide range of functional programming techniques that have their roots in the usage of immutable and persistent data structures that heavily rely on the GC.<br />
Persistent Data Structures are heavily used in [http://docs.scala-lang.org/overviews/collections/overview.html Scala] and [http://clojure.org/reference/data_structures Clojure] and they allow the programmer to reason about interactivity, sharing and parallelism.<br />
<br />
The focus of this project would be to create a varying range of persistent data structures (sets, vectors, maps, strings, trees, lists, etc...) that respects the range interface and the semantics of Phobos.<br />
<br />
Related Work:<br />
<br />
* https://www.cs.cmu.edu/~rwh/theses/okasaki.pdf <br />
* https://www.worldcat.org/title/rrb-trees-efficient-immutable-vectors/oclc/820379112<br />
* https://www.youtube.com/watch?v=7BFF50BHPPo<br />
* https://www.infoq.com/presentations/Value-Values<br />
* https://github.com/arximboldi/immer<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Language Server Protocol for D ===<br />
----<br />
<br />
The [https://microsoft.github.io/language-server-protocol Language Server Protocol] (LSP) defines the protocol used between an editor or IDE and a language server that provides language features like auto complete, go to definition, find all references etc. Adding features like auto complete, go to definition, or documentation on hover for a programming language takes significant effort. Traditionally this work had to be repeated for each development tool, as each tool provides different APIs for implementing the same feature (see the list of [[Editors]] and [[IDEs]]). Additionally as the existing tools only use `libdparse` (used in [https://github.com/d-language-server/dls DLS] and [https://github.com/dlang-community/DCD DCD]), they lack the ability to perform semantic analysis on the AST and can't evaluate `mixin`'s nor D's very powerful Compile-Time Function Evaluation (CTFE).<br />
A Language Server is meant to provide the language-specific smarts and communicate with development tools over a protocol that enables inter-process communication.<br />
The idea behind the Language Server Protocol (LSP) is to standardize the protocol for how such servers and development tools communicate. This way, single D Language Server can be re-used in multiple development tools, which in turn can support multiple languages with minimal effort.<br />
<br />
Recent development in the DMD compiler [https://dlang.org/blog/2017/08/01/a-dub-case-study-compiling-dmd-as-a-library made it available as a DUB library]. This mean that the compiler itself can be re-used and third-party tools don't have to re-implement e.g. D's complex CTFE. This project is about using the DMD compiler as a library to implement a Language Server for D.<br />
<br />
Proposed Project Mentors: Jacob Carlborg, Sebastian Wilzbach<br />
<br />
How to start:<br />
* [https://github.com/dlang/dmd/blob/master/test/dub_package/frontend.d Simple example] of using DMD as a library<br />
* [https://github.com/jacob-carlborg/dlp More complex use cases]<br />
<br />
=== Mir Project ===<br />
----<br />
<br />
The Mir project is developing numerical libraries for the upcoming numeric packages of<br />
the Dlang standard library. The are numerous projects an interested student could pursue:<br />
<br />
* University project. Your GSoC project can be combined with your scientific research.<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://julialang.org Julia] integration<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://www.numpy.org NumPy] integration<br />
* General purpose BetterC libraries<br />
** I/O betterC Dlang library<br />
** Async betterC Dlang library<br />
** String and format betterC library<br />
* mir-cpuid <br />
** ARM support<br />
** Advanced OS specific support<br />
* mir-glas<br />
** BLAS Level 2 subprograms<br />
** One BLAS Level 3 subprogram. It is OK to do only one! But it must be faster then OpenBLAS, and not slower then Intel MKL.<br />
** Multithreading support for BLAS Level 2<br />
** Multithreading support for BLAS Level 3<br />
<br />
You can get more details on projects related to Mir [https://github.com/libmir/mir/wiki/GSoC-2019 here].<br />
<br />
Its Good To Know:<br />
<br />
To work on the Mir you should be proficient with one of:<br />
<br />
* C<br />
* C++<br />
* LLVM<br />
* Fortran<br />
* Experience with D is not essential.<br />
<br />
To work on the Mir project requires a responsible and self-motivated student.<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
=== DUB: D's package manager ===<br />
----<br />
<br />
[https://github.com/dlang/dub DUB] - D's package manager - is one of the central infrastructure tools in the D world as a convenient build and package management tool for the D community.<br />
With D gaining more and more popularity, it's also a key tool to guarantee D's further adoption.<br />
Thus there are many great ideas to improve DUB:<br />
<br />
* [https://github.com/dlang/dub/wiki/DEP6 git support]<br />
* [https://github.com/dlang/dub/wiki/DEP2 separate compilation and caching]<br />
* [https://github.com/dlang/dub/wiki/DEP3 extensibility through DUB]<br />
* [https://github.com/dlang/dub/wiki/DEP4 control flow directives]<br />
* [https://github.com/dlang/dub/wiki/DEP5 build system support for C/C++]<br />
* support dub install for distributions<br />
* support building a {snap, Debian, Arch, ...} package out of DUB package<br />
<br />
Any of these listed DUB Enhancement Proposals (DEPs) could form the basis of a GSoC Project.<br />
<br />
Proposed Project Mentors: Sönke Ludwig, Sebastian Wilzbach<br />
<br />
=== std.benchmark ===<br />
----<br />
<br />
Ideally every function in Phobos should have its own benchmark suite which is run for every PR to check for performance improvements or regressions.<br />
* Additionally support for the new big O annotation [https://github.com/dlang/phobos/pull/4965 here] would be nice. <br />
* Existing work: [https://github.com/dlang/phobos/pull/794 here], and [https://github.com/dlang/phobos/pull/3695 here], and [https://github.com/atilaneves/unit-threaded/tree/master/source/unit_threaded/randomized here (QuickText-like testing)]. <br />
<br />
Proposed Project Mentors: Sebastian Wilzbach<br />
<br />
=== Jupyter notebook D kernel ===<br />
----<br />
<br />
The Jupyter Notebook is an open-source web application that allows you to create and share documents that contain live code, equations, visualizations and narrative text. Uses include: data cleaning and transformation, numerical simulation, statistical modeling, data visualization, machine learning, and much more.<br />
Jupyter notebooks are extremely popular among data scientist as they allow interactive progress and exploring a solution step by step.<br />
With a bit of work, a statically compiled language can be used in an interactive notebook e.g. [Cling https://blog.jupyter.org/interactive-workflows-for-c-with-jupyter-fe9b54227d92] and Go with<br />
[https://github.com/gopherdata/gophernotes gophernotes].<br />
Apart from being useful to data scientist, a Jupyter D kernel would allow an intuitive exploration of the language for newcomers and people starting with new libraries.<br />
<br />
Existing works:<br />
- [https://github.com/dlang-community/drepl drepl] - simple REPL for D<br />
- [https://github.com/DlangScience/PydMagic PydMagic] - allows to write PyD extension in a notebook.<br />
<br />
Proposed Project Mentor: Sebastian Wilzbach<br />
<br />
=== Functional Reactive Programming ===<br />
----<br />
<br />
Functional reactive programming (FRP) is a programming paradigm for reactive programming (asynchronous dataflow programming) using the building blocks of functional programming (e.g. map, reduce, filter).<br />
The best-known FRP API is the [http://reactivex.io ReactiveX API] whose implementation in D this project would focus.<br />
Note that this project is closely related to the std.eventloop project.<br />
<br />
Proposed Project Mentors: Petar Kirov<br />
<br />
=== Java Native Interface (JNI) library ===<br />
----<br />
<br />
D's features allow to write cut down the boilerplate of wrapper drastically.<br />
See the recently published [https://dlang.org/blog/2017/05/31/project-highlight-excel-d excel-d] for a comparison between the C++ implementation for registering a function in Excel and the D way.<br />
Similarly a solid JNI library would open up new many new use cases and allow the Java community to profit even easier from D's features.<br />
<br />
Previous work: [https://github.com/Monnoroch/DJni DJni], [https://github.com/jamesmahler/djvm djvm]<br />
Proposed Project Mentor: TBA<br />
<br />
=== ORM mapping ===<br />
----<br />
<br />
SQLAlchemy is an object-relational mapper which provides "a full suite of well known enterprise-level persistence patterns, designed for efficient and high-performing database access, adapted into a simple and Pythonic domain language".<br />
While there has been some attempts in implementing an ORM in D - none of these got close to the simplicity and usability of SQLAlchemy (see [[Database Libraries]]).<br />
However, with D's CTFE queries could - like std.format's strings - already be checked at compile-time and optimizations could be be applied to the parser and serializer.<br />
<br />
This project would be based on the [http://dconf.org/2016/talks/smith.html proposed std.database abstraction] and focus on creating a general-purpose ORM on top of it.<br />
<br />
See also: Martin Nowak's DConf16 talk about [http://dconf.org/2016/talks/nowak.html Object-Relational Mapper] <br />
<br />
Existing work:<br />
* [https://github.com/huntlabs/hunt-entity hunt-entity]<br />
<br />
Proposed Project Mentor: TBA<br />
<br />
<br />
=== Propose your own project ===<br />
----<br />
<br />
Do you have your own vision for improving D's success? That's great!<br />
Are you convinced that your project helps to advance open source technology related to the D programming language?<br />
Then simply get in touch with D's GSoC org admin (social (at) dlang (dot) org) and potential mentors for your project.<br />
<br />
If you are searching for inspiration, you might want to have a look at the [[DIPs| list of D Improvement Proposals (DIPs)]], the [[Vision/2018H1|high-level vision for this semester]] or the [[Wish_list|wish list]].<br />
<br />
<br />
== Ideas From Previous Years ==<br />
<br />
These GSoC idea pages from the past years which might provide more inspiration for proposing your own idea:<br />
<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2018 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2017 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2016_Ideas GSoC 2016 Ideas] (accepted, 4 slots)<br />
* [http://wiki.dlang.org/GSOC_2015_Ideas GSoC 2015 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2014_Ideas GSoC 2014 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2013_Ideas GSoC 2013 Ideas] (not accepted)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2012_Ideas GSoC 2012 Ideas] (accepted, 3 slots)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2011_Ideas GSoC 2011 Ideas]<br />
<br />
You may also want to have a look at [https://wiki.dlang.org/SAOC_2018_ideas the Symmetry Autumn of Code ideas page].<br />
<br />
== Tips for students ==<br />
<br />
Please see the "gsoc" articles at our [https://dlang.org/blog/category/gsoc/ official blog] which contain experience reports from students of previous years.<br />
<br />
Daniel Pocock has [http://danielpocock.com/getting-selected-for-google-summer-of-code-2015 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.<br />
<br />
<br />
== Tips for Mentors ==<br />
<br />
If you are interested in mentoring, please check out the [http://en.flossmanuals.net/GSoCMentoring/ organization administrator and mentor] manual for more information.<br />
<br />
[[Category:GSOC]]</div>Greenifyhttps://wiki.dlang.org/?title=GSOC_2019_Ideas&diff=9550GSOC 2019 Ideas2019-02-28T10:50:00Z<p>Greenify: /* DUB: D's package manager */</p>
<hr />
<div>This is the D Language Foundation's Google Summer of Code 2019 page.<br />
<br />
If you are interested in working on a D project as part of GSoC 2019, as either a student or mentor, please contact the GSoC admins at social@dlang.org. Include "GSoC 2019" in the email subject line.<br />
<br />
<br />
== Timeline ==<br />
The timeline for GSoC 2019 [https://developers.google.com/open-source/gsoc/timeline can be found here].<br />
<br />
== Ideas ==<br />
<br />
The D ecosystem is always in need of improvement through the revision of existing projects and the creation of new ones. The core projects like the([http://dlang.org/phobos/index.html standard library]) and the compilers ([[Compilers]]) are always in need of attention. Other important areas include GUI support, integration with other languages, improving and enhancing the tooling, IDE and editor support, and more.<br />
<br />
Please add your project ideas to the list below, being as descriptive as you can in the summaries. Students interested in participating can use the ideas listed here as jumping off points, so the more information you provide, the easier it will be for them to get started. If your idea is particularly complex or nuanced, consider leaving contact information so that interested parties may follow up.<br />
<br />
=== Graphics library for resource constrained embedded systems ===<br />
----<br />
<br />
Create a 2D rasterizer, rich drawing primitives, and 2D graphics library suitable for resource constrained embedded systems (e.g. ARM Cortex-M) to be used in industrial controls, home appliances, medical devices, consumer electronics, and IoT just to name a few. The end goal would be something similar to [https://www.segger.com/products/user-interface/emwin Segger's emWin]. The library would be used to drive LDCs similar to https://www.adafruit.com/product/3396<br />
Requirements:<br />
<br />
* Hardware agnostic; should simply render to a frame buffer<br />
* No dependencies (No Phobos, no C standard library, and no official D runtime).<br />
* Consider using -betterC, but a custom minimal D runtime is also a viable option<br />
<br />
Related work:<br />
<br />
* https://github.com/TurkeyMan/color<br />
* https://bitbucket.org/timosi/minlibd<br />
* https://github.com/JinShil/stm32f42_discovery_demo<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Tabular data container (data frames) ===<br />
----<br />
<br />
Pandas, R and Julia have made [https://github.com/mobileink/data.frame/wiki/What-is-a-Data-Frame%3F data frames] very popular.<br />
As D is getting more interest from data scientist (e.g. [https://github.com/eBay/tsv-utils eBay] or [http://tech.adroll.com/blog/data/2014/11/17/d-is-for-data-science.html AdRoll]) it would be very beneficial to use one language for the entire data analysis pipeline - especially considering that D (in contrast to popular languages like Python, R or Julia) - is compiled to native machine code and gets optimized by the sophisticated LLVM backend.<br />
<br />
Minimum requirements:<br />
<br />
* conversion to and from CSV<br />
* multi-indexing<br />
* column binary operations, e.g. `column1 * column2`<br />
* group-by on an arbitrary number of columns<br />
* column/group aggregations<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
=== C++ interops ===<br />
----<br />
<br />
There are many experiments in transparently interfacing D with C++, notably:<br />
<br />
* [https://github.com/atilaneves/dpp dpp] by Atila Neves, that parses and translates headers on the fly<br />
* [https://wiki.dlang.org/Calypso Calypso] by Elie Morisse that bridges the two languages at the AST level.<br />
* [https://github.com/jacob-carlborg/dstep DStep] by Jacob Carlborg, automatically generates bindings for C and Objective-C code. The task would be to add support for C++.<br />
<br />
There is also a lot of work in bringing STL types to the DRuntime (see https://github.com/dlang/druntime/pull/2310).<br />
<br />
D would greatly benefit by seamlessly integrating the C++ ecosystem. There are many ways to accomplish this goal and it should be discussed with the community.<br />
Andrei already commented on the importance of a tool like Calypso in this thread:<br />
https://forum.dlang.org/post/m9s4cd$2s1v$1@digitalmars.com<br />
<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Persistent Data Structures ===<br />
----<br />
<br />
There is an ongoing effort to reduce the reliance of Phobos on the GC but the GC is not going anywhere given that it has many advantages over manual memory management.<br />
The community would greatly benefit from a wide range of functional programming techniques that have their roots in the usage of immutable and persistent data structures that heavily rely on the GC.<br />
Persistent Data Structures are heavily used in [http://docs.scala-lang.org/overviews/collections/overview.html Scala] and [http://clojure.org/reference/data_structures Clojure] and they allow the programmer to reason about interactivity, sharing and parallelism.<br />
<br />
The focus of this project would be to create a varying range of persistent data structures (sets, vectors, maps, strings, trees, lists, etc...) that respects the range interface and the semantics of Phobos.<br />
<br />
Related Work:<br />
<br />
* https://www.cs.cmu.edu/~rwh/theses/okasaki.pdf <br />
* https://www.worldcat.org/title/rrb-trees-efficient-immutable-vectors/oclc/820379112<br />
* https://www.youtube.com/watch?v=7BFF50BHPPo<br />
* https://www.infoq.com/presentations/Value-Values<br />
* https://github.com/arximboldi/immer<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Language Server Protocol for D ===<br />
----<br />
<br />
The [https://microsoft.github.io/language-server-protocol Language Server Protocol] (LSP) defines the protocol used between an editor or IDE and a language server that provides language features like auto complete, go to definition, find all references etc. Adding features like auto complete, go to definition, or documentation on hover for a programming language takes significant effort. Traditionally this work had to be repeated for each development tool, as each tool provides different APIs for implementing the same feature (see the list of [[Editors]] and [[IDEs]]). Additionally as the existing tools only use `libdparse` (used in [https://github.com/d-language-server/dls DLS] and [https://github.com/dlang-community/DCD DCD]), they lack the ability to perform semantic analysis on the AST and can't evaluate `mixin`'s nor D's very powerful Compile-Time Function Evaluation (CTFE).<br />
A Language Server is meant to provide the language-specific smarts and communicate with development tools over a protocol that enables inter-process communication.<br />
The idea behind the Language Server Protocol (LSP) is to standardize the protocol for how such servers and development tools communicate. This way, single D Language Server can be re-used in multiple development tools, which in turn can support multiple languages with minimal effort.<br />
<br />
Recent development in the DMD compiler [https://dlang.org/blog/2017/08/01/a-dub-case-study-compiling-dmd-as-a-library made it available as a DUB library]. This mean that the compiler itself can be re-used and third-party tools don't have to re-implement e.g. D's complex CTFE. This project is about using the DMD compiler as a library to implement a Language Server for D.<br />
<br />
Proposed Project Mentors: Jacob Carlborg, Sebastian Wilzbach<br />
<br />
How to start:<br />
* [https://github.com/dlang/dmd/blob/master/test/dub_package/frontend.d Simple example] of using DMD as a library<br />
* [https://github.com/jacob-carlborg/dlp More complex use cases]<br />
<br />
=== Mir Project ===<br />
----<br />
<br />
The Mir project is developing numerical libraries for the upcoming numeric packages of<br />
the Dlang standard library. The are numerous projects an interested student could pursue:<br />
<br />
* University project. Your GSoC project can be combined with your scientific research.<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://julialang.org Julia] integration<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://www.numpy.org NumPy] integration<br />
* General purpose BetterC libraries<br />
** I/O betterC Dlang library<br />
** Async betterC Dlang library<br />
** String and format betterC library<br />
* mir-cpuid <br />
** ARM support<br />
** Advanced OS specific support<br />
* mir-glas<br />
** BLAS Level 2 subprograms<br />
** One BLAS Level 3 subprogram. It is OK to do only one! But it must be faster then OpenBLAS, and not slower then Intel MKL.<br />
** Multithreading support for BLAS Level 2<br />
** Multithreading support for BLAS Level 3<br />
<br />
You can get more details on projects related to Mir [https://github.com/libmir/mir/wiki/GSoC-2019 here].<br />
<br />
Its Good To Know:<br />
<br />
To work on the Mir you should be proficient with one of:<br />
<br />
* C<br />
* C++<br />
* LLVM<br />
* Fortran<br />
* Experience with D is not essential.<br />
<br />
To work on the Mir project requires a responsible and self-motivated student.<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
=== DUB: D's package manager ===<br />
----<br />
<br />
[https://github.com/dlang/dub DUB] - D's package manager - is one of the central infrastructure tools in the D world as a convenient build and package management tool for the D community.<br />
With D gaining more and more popularity, it's also a key tool to guarantee D's further adoption.<br />
Thus there are many great ideas to improve DUB:<br />
<br />
* [https://github.com/dlang/dub/wiki/DEP6 git support]<br />
* [https://github.com/dlang/dub/wiki/DEP2 separate compilation and caching]<br />
* [https://github.com/dlang/dub/wiki/DEP3 extensibility through DUB]<br />
* [https://github.com/dlang/dub/wiki/DEP4 control flow directives]<br />
* [https://github.com/dlang/dub/wiki/DEP5 build system support for C/C++]<br />
* support dub install for distributions<br />
* support building a {snap, Debian, Arch, ...} package out of DUB package<br />
<br />
Any of these listed DUB Enhancement Proposals (DEPs) could form the basis of a GSoC Project.<br />
<br />
Proposed Project Mentors: Sönke Ludwig, Sebastian Wilzbach<br />
<br />
=== std.benchmark ===<br />
----<br />
<br />
Ideally every function in Phobos should have its own benchmark suite which is run for every PR to check for performance improvements or regressions.<br />
* Additionally support for the new big O annotation [https://github.com/dlang/phobos/pull/4965 here] would be nice. <br />
* Existing work: [https://github.com/dlang/phobos/pull/794 here], and [https://github.com/dlang/phobos/pull/3695 here], and [https://github.com/atilaneves/unit-threaded/tree/master/source/unit_threaded/randomized here (QuickText-like testing)]. <br />
<br />
Proposed Project Mentors: Sebastian Wilzbach<br />
<br />
=== Jupyter notebook D kernel ===<br />
----<br />
<br />
The Jupyter Notebook is an open-source web application that allows you to create and share documents that contain live code, equations, visualizations and narrative text. Uses include: data cleaning and transformation, numerical simulation, statistical modeling, data visualization, machine learning, and much more.<br />
Jupyter notebooks are extremely popular among data scientist as they allow interactive progress and exploring a solution step by step.<br />
With a bit of work, a statically compiled language can be used in an interactive notebook e.g. [Cling https://blog.jupyter.org/interactive-workflows-for-c-with-jupyter-fe9b54227d92] and Go with<br />
[https://github.com/gopherdata/gophernotes gophernotes].<br />
Apart from being useful to data scientist, a Jupyter D kernel would allow an intuitive exploration of the language for newcomers and people starting with new libraries.<br />
<br />
Existing works:<br />
- [https://github.com/dlang-community/drepl drepl] - simple REPL for D<br />
- [https://github.com/DlangScience/PydMagic PydMagic] - allows to write PyD extension in a notebook.<br />
<br />
Proposed Project Mentor: Sebastian Wilzbach<br />
<br />
=== Functional Reactive Programming ===<br />
----<br />
<br />
Functional reactive programming (FRP) is a programming paradigm for reactive programming (asynchronous dataflow programming) using the building blocks of functional programming (e.g. map, reduce, filter).<br />
The best-known FRP API is the [http://reactivex.io ReactiveX API] whose implementation in D this project would focus.<br />
Note that this project is closely related to the std.eventloop project.<br />
<br />
Proposed Project Mentors: Petar Kirov<br />
<br />
=== Java Native Interface (JNI) library ===<br />
----<br />
<br />
D's features allow to write cut down the boilerplate of wrapper drastically.<br />
See the recently published [https://dlang.org/blog/2017/05/31/project-highlight-excel-d excel-d] for a comparison between the C++ implementation for registering a function in Excel and the D way.<br />
Similarly a solid JNI library would open up new many new use cases and allow the Java community to profit even easier from D's features.<br />
<br />
Previous work: [https://github.com/Monnoroch/DJni DJni], [https://github.com/jamesmahler/djvm djvm]<br />
Proposed Project Mentor: TBA<br />
<br />
=== ORM mapping ===<br />
<br />
SQLAlchemy is an object-relational mapper which provides "a full suite of well known enterprise-level persistence patterns, designed for efficient and high-performing database access, adapted into a simple and Pythonic domain language".<br />
While there has been some attempts in implementing an ORM in D - none of these got close to the simplicity and usability of SQLAlchemy (see [[Database Libraries]]).<br />
However, with D's CTFE queries could - like std.format's strings - already be checked at compile-time and optimizations could be be applied to the parser and serializer.<br />
<br />
This project would be based on the [http://dconf.org/2016/talks/smith.html proposed std.database abstraction] and focus on creating a general-purpose ORM on top of it.<br />
<br />
See also: Martin Nowak's DConf16 talk about [http://dconf.org/2016/talks/nowak.html Object-Relational Mapper] <br />
<br />
Existing work:<br />
* [https://github.com/huntlabs/hunt-entity hunt-entity]<br />
<br />
Proposed Project Mentor: TBA<br />
<br />
<br />
=== Propose your own project ===<br />
----<br />
<br />
Do you have your own vision for improving D's success? That's great!<br />
Are you convinced that your project helps to advance open source technology related to the D programming language?<br />
Then simply get in touch with D's GSoC org admin (social (at) dlang (dot) org) and potential mentors for your project.<br />
<br />
If you are searching for inspiration, you might want to have a look at the [[DIPs| list of D Improvement Proposals (DIPs)]], the [[Vision/2018H1|high-level vision for this semester]] or the [[Wish_list|wish list]].<br />
<br />
<br />
== Ideas From Previous Years ==<br />
<br />
These GSoC idea pages from the past years which might provide more inspiration for proposing your own idea:<br />
<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2018 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2017 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2016_Ideas GSoC 2016 Ideas] (accepted, 4 slots)<br />
* [http://wiki.dlang.org/GSOC_2015_Ideas GSoC 2015 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2014_Ideas GSoC 2014 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2013_Ideas GSoC 2013 Ideas] (not accepted)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2012_Ideas GSoC 2012 Ideas] (accepted, 3 slots)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2011_Ideas GSoC 2011 Ideas]<br />
<br />
You may also want to have a look at [https://wiki.dlang.org/SAOC_2018_ideas the Symmetry Autumn of Code ideas page].<br />
<br />
== Tips for students ==<br />
<br />
Please see the "gsoc" articles at our [https://dlang.org/blog/category/gsoc/ official blog] which contain experience reports from students of previous years.<br />
<br />
Daniel Pocock has [http://danielpocock.com/getting-selected-for-google-summer-of-code-2015 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.<br />
<br />
<br />
== Tips for Mentors ==<br />
<br />
If you are interested in mentoring, please check out the [http://en.flossmanuals.net/GSoCMentoring/ organization administrator and mentor] manual for more information.<br />
<br />
[[Category:GSOC]]</div>Greenifyhttps://wiki.dlang.org/?title=GSOC_2019_Ideas&diff=9549GSOC 2019 Ideas2019-02-28T10:48:21Z<p>Greenify: /* Language Server Protocol for D */</p>
<hr />
<div>This is the D Language Foundation's Google Summer of Code 2019 page.<br />
<br />
If you are interested in working on a D project as part of GSoC 2019, as either a student or mentor, please contact the GSoC admins at social@dlang.org. Include "GSoC 2019" in the email subject line.<br />
<br />
<br />
== Timeline ==<br />
The timeline for GSoC 2019 [https://developers.google.com/open-source/gsoc/timeline can be found here].<br />
<br />
== Ideas ==<br />
<br />
The D ecosystem is always in need of improvement through the revision of existing projects and the creation of new ones. The core projects like the([http://dlang.org/phobos/index.html standard library]) and the compilers ([[Compilers]]) are always in need of attention. Other important areas include GUI support, integration with other languages, improving and enhancing the tooling, IDE and editor support, and more.<br />
<br />
Please add your project ideas to the list below, being as descriptive as you can in the summaries. Students interested in participating can use the ideas listed here as jumping off points, so the more information you provide, the easier it will be for them to get started. If your idea is particularly complex or nuanced, consider leaving contact information so that interested parties may follow up.<br />
<br />
=== Graphics library for resource constrained embedded systems ===<br />
----<br />
<br />
Create a 2D rasterizer, rich drawing primitives, and 2D graphics library suitable for resource constrained embedded systems (e.g. ARM Cortex-M) to be used in industrial controls, home appliances, medical devices, consumer electronics, and IoT just to name a few. The end goal would be something similar to [https://www.segger.com/products/user-interface/emwin Segger's emWin]. The library would be used to drive LDCs similar to https://www.adafruit.com/product/3396<br />
Requirements:<br />
<br />
* Hardware agnostic; should simply render to a frame buffer<br />
* No dependencies (No Phobos, no C standard library, and no official D runtime).<br />
* Consider using -betterC, but a custom minimal D runtime is also a viable option<br />
<br />
Related work:<br />
<br />
* https://github.com/TurkeyMan/color<br />
* https://bitbucket.org/timosi/minlibd<br />
* https://github.com/JinShil/stm32f42_discovery_demo<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Tabular data container (data frames) ===<br />
----<br />
<br />
Pandas, R and Julia have made [https://github.com/mobileink/data.frame/wiki/What-is-a-Data-Frame%3F data frames] very popular.<br />
As D is getting more interest from data scientist (e.g. [https://github.com/eBay/tsv-utils eBay] or [http://tech.adroll.com/blog/data/2014/11/17/d-is-for-data-science.html AdRoll]) it would be very beneficial to use one language for the entire data analysis pipeline - especially considering that D (in contrast to popular languages like Python, R or Julia) - is compiled to native machine code and gets optimized by the sophisticated LLVM backend.<br />
<br />
Minimum requirements:<br />
<br />
* conversion to and from CSV<br />
* multi-indexing<br />
* column binary operations, e.g. `column1 * column2`<br />
* group-by on an arbitrary number of columns<br />
* column/group aggregations<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
=== C++ interops ===<br />
----<br />
<br />
There are many experiments in transparently interfacing D with C++, notably:<br />
<br />
* [https://github.com/atilaneves/dpp dpp] by Atila Neves, that parses and translates headers on the fly<br />
* [https://wiki.dlang.org/Calypso Calypso] by Elie Morisse that bridges the two languages at the AST level.<br />
* [https://github.com/jacob-carlborg/dstep DStep] by Jacob Carlborg, automatically generates bindings for C and Objective-C code. The task would be to add support for C++.<br />
<br />
There is also a lot of work in bringing STL types to the DRuntime (see https://github.com/dlang/druntime/pull/2310).<br />
<br />
D would greatly benefit by seamlessly integrating the C++ ecosystem. There are many ways to accomplish this goal and it should be discussed with the community.<br />
Andrei already commented on the importance of a tool like Calypso in this thread:<br />
https://forum.dlang.org/post/m9s4cd$2s1v$1@digitalmars.com<br />
<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Persistent Data Structures ===<br />
----<br />
<br />
There is an ongoing effort to reduce the reliance of Phobos on the GC but the GC is not going anywhere given that it has many advantages over manual memory management.<br />
The community would greatly benefit from a wide range of functional programming techniques that have their roots in the usage of immutable and persistent data structures that heavily rely on the GC.<br />
Persistent Data Structures are heavily used in [http://docs.scala-lang.org/overviews/collections/overview.html Scala] and [http://clojure.org/reference/data_structures Clojure] and they allow the programmer to reason about interactivity, sharing and parallelism.<br />
<br />
The focus of this project would be to create a varying range of persistent data structures (sets, vectors, maps, strings, trees, lists, etc...) that respects the range interface and the semantics of Phobos.<br />
<br />
Related Work:<br />
<br />
* https://www.cs.cmu.edu/~rwh/theses/okasaki.pdf <br />
* https://www.worldcat.org/title/rrb-trees-efficient-immutable-vectors/oclc/820379112<br />
* https://www.youtube.com/watch?v=7BFF50BHPPo<br />
* https://www.infoq.com/presentations/Value-Values<br />
* https://github.com/arximboldi/immer<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Language Server Protocol for D ===<br />
----<br />
<br />
The [https://microsoft.github.io/language-server-protocol Language Server Protocol] (LSP) defines the protocol used between an editor or IDE and a language server that provides language features like auto complete, go to definition, find all references etc. Adding features like auto complete, go to definition, or documentation on hover for a programming language takes significant effort. Traditionally this work had to be repeated for each development tool, as each tool provides different APIs for implementing the same feature (see the list of [[Editors]] and [[IDEs]]). Additionally as the existing tools only use `libdparse` (used in [https://github.com/d-language-server/dls DLS] and [https://github.com/dlang-community/DCD DCD]), they lack the ability to perform semantic analysis on the AST and can't evaluate `mixin`'s nor D's very powerful Compile-Time Function Evaluation (CTFE).<br />
A Language Server is meant to provide the language-specific smarts and communicate with development tools over a protocol that enables inter-process communication.<br />
The idea behind the Language Server Protocol (LSP) is to standardize the protocol for how such servers and development tools communicate. This way, single D Language Server can be re-used in multiple development tools, which in turn can support multiple languages with minimal effort.<br />
<br />
Recent development in the DMD compiler [https://dlang.org/blog/2017/08/01/a-dub-case-study-compiling-dmd-as-a-library made it available as a DUB library]. This mean that the compiler itself can be re-used and third-party tools don't have to re-implement e.g. D's complex CTFE. This project is about using the DMD compiler as a library to implement a Language Server for D.<br />
<br />
Proposed Project Mentors: Jacob Carlborg, Sebastian Wilzbach<br />
<br />
How to start:<br />
* [https://github.com/dlang/dmd/blob/master/test/dub_package/frontend.d Simple example] of using DMD as a library<br />
* [https://github.com/jacob-carlborg/dlp More complex use cases]<br />
<br />
=== Mir Project ===<br />
----<br />
<br />
The Mir project is developing numerical libraries for the upcoming numeric packages of<br />
the Dlang standard library. The are numerous projects an interested student could pursue:<br />
<br />
* University project. Your GSoC project can be combined with your scientific research.<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://julialang.org Julia] integration<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://www.numpy.org NumPy] integration<br />
* General purpose BetterC libraries<br />
** I/O betterC Dlang library<br />
** Async betterC Dlang library<br />
** String and format betterC library<br />
* mir-cpuid <br />
** ARM support<br />
** Advanced OS specific support<br />
* mir-glas<br />
** BLAS Level 2 subprograms<br />
** One BLAS Level 3 subprogram. It is OK to do only one! But it must be faster then OpenBLAS, and not slower then Intel MKL.<br />
** Multithreading support for BLAS Level 2<br />
** Multithreading support for BLAS Level 3<br />
<br />
You can get more details on projects related to Mir [https://github.com/libmir/mir/wiki/GSoC-2019 here].<br />
<br />
Its Good To Know:<br />
<br />
To work on the Mir you should be proficient with one of:<br />
<br />
* C<br />
* C++<br />
* LLVM<br />
* Fortran<br />
* Experience with D is not essential.<br />
<br />
To work on the Mir project requires a responsible and self-motivated student.<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
=== DUB: D's package manager ===<br />
----<br />
<br />
DUB - D's package manager - is one of the central infrastructure tools in the D world as a convenient build and package management tool for the D community.<br />
With D gaining more and more popularity, it's also a key tool to guarantee D's further adoption.<br />
Thus there are many great ideas to improve DUB:<br />
<br />
* [https://github.com/dlang/dub/wiki/DEP2 separate compilation and caching]<br />
* [https://github.com/dlang/dub/wiki/DEP3 extensibility through DUB]<br />
* [https://github.com/dlang/dub/wiki/DEP4 control flow directives]<br />
* [https://github.com/dlang/dub/wiki/DEP5 build system support for C/C++]<br />
* [https://github.com/dlang/dub/wiki/DEP6 git support]<br />
* support dub install for distributions<br />
* support building a {snap, Debian, Arch, ...} package out of DUB package<br />
<br />
Proposed Project Mentors: Sönke Ludwig, Sebastian Wilzbach<br />
<br />
=== std.benchmark ===<br />
----<br />
<br />
Ideally every function in Phobos should have its own benchmark suite which is run for every PR to check for performance improvements or regressions.<br />
* Additionally support for the new big O annotation [https://github.com/dlang/phobos/pull/4965 here] would be nice. <br />
* Existing work: [https://github.com/dlang/phobos/pull/794 here], and [https://github.com/dlang/phobos/pull/3695 here], and [https://github.com/atilaneves/unit-threaded/tree/master/source/unit_threaded/randomized here (QuickText-like testing)]. <br />
<br />
Proposed Project Mentors: Sebastian Wilzbach<br />
<br />
=== Jupyter notebook D kernel ===<br />
----<br />
<br />
The Jupyter Notebook is an open-source web application that allows you to create and share documents that contain live code, equations, visualizations and narrative text. Uses include: data cleaning and transformation, numerical simulation, statistical modeling, data visualization, machine learning, and much more.<br />
Jupyter notebooks are extremely popular among data scientist as they allow interactive progress and exploring a solution step by step.<br />
With a bit of work, a statically compiled language can be used in an interactive notebook e.g. [Cling https://blog.jupyter.org/interactive-workflows-for-c-with-jupyter-fe9b54227d92] and Go with<br />
[https://github.com/gopherdata/gophernotes gophernotes].<br />
Apart from being useful to data scientist, a Jupyter D kernel would allow an intuitive exploration of the language for newcomers and people starting with new libraries.<br />
<br />
Existing works:<br />
- [https://github.com/dlang-community/drepl drepl] - simple REPL for D<br />
- [https://github.com/DlangScience/PydMagic PydMagic] - allows to write PyD extension in a notebook.<br />
<br />
Proposed Project Mentor: Sebastian Wilzbach<br />
<br />
=== Functional Reactive Programming ===<br />
----<br />
<br />
Functional reactive programming (FRP) is a programming paradigm for reactive programming (asynchronous dataflow programming) using the building blocks of functional programming (e.g. map, reduce, filter).<br />
The best-known FRP API is the [http://reactivex.io ReactiveX API] whose implementation in D this project would focus.<br />
Note that this project is closely related to the std.eventloop project.<br />
<br />
Proposed Project Mentors: Petar Kirov<br />
<br />
=== Java Native Interface (JNI) library ===<br />
----<br />
<br />
D's features allow to write cut down the boilerplate of wrapper drastically.<br />
See the recently published [https://dlang.org/blog/2017/05/31/project-highlight-excel-d excel-d] for a comparison between the C++ implementation for registering a function in Excel and the D way.<br />
Similarly a solid JNI library would open up new many new use cases and allow the Java community to profit even easier from D's features.<br />
<br />
Previous work: [https://github.com/Monnoroch/DJni DJni], [https://github.com/jamesmahler/djvm djvm]<br />
Proposed Project Mentor: TBA<br />
<br />
=== ORM mapping ===<br />
<br />
SQLAlchemy is an object-relational mapper which provides "a full suite of well known enterprise-level persistence patterns, designed for efficient and high-performing database access, adapted into a simple and Pythonic domain language".<br />
While there has been some attempts in implementing an ORM in D - none of these got close to the simplicity and usability of SQLAlchemy (see [[Database Libraries]]).<br />
However, with D's CTFE queries could - like std.format's strings - already be checked at compile-time and optimizations could be be applied to the parser and serializer.<br />
<br />
This project would be based on the [http://dconf.org/2016/talks/smith.html proposed std.database abstraction] and focus on creating a general-purpose ORM on top of it.<br />
<br />
See also: Martin Nowak's DConf16 talk about [http://dconf.org/2016/talks/nowak.html Object-Relational Mapper] <br />
<br />
Existing work:<br />
* [https://github.com/huntlabs/hunt-entity hunt-entity]<br />
<br />
Proposed Project Mentor: TBA<br />
<br />
<br />
=== Propose your own project ===<br />
----<br />
<br />
Do you have your own vision for improving D's success? That's great!<br />
Are you convinced that your project helps to advance open source technology related to the D programming language?<br />
Then simply get in touch with D's GSoC org admin (social (at) dlang (dot) org) and potential mentors for your project.<br />
<br />
If you are searching for inspiration, you might want to have a look at the [[DIPs| list of D Improvement Proposals (DIPs)]], the [[Vision/2018H1|high-level vision for this semester]] or the [[Wish_list|wish list]].<br />
<br />
<br />
== Ideas From Previous Years ==<br />
<br />
These GSoC idea pages from the past years which might provide more inspiration for proposing your own idea:<br />
<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2018 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2017 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2016_Ideas GSoC 2016 Ideas] (accepted, 4 slots)<br />
* [http://wiki.dlang.org/GSOC_2015_Ideas GSoC 2015 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2014_Ideas GSoC 2014 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2013_Ideas GSoC 2013 Ideas] (not accepted)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2012_Ideas GSoC 2012 Ideas] (accepted, 3 slots)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2011_Ideas GSoC 2011 Ideas]<br />
<br />
You may also want to have a look at [https://wiki.dlang.org/SAOC_2018_ideas the Symmetry Autumn of Code ideas page].<br />
<br />
== Tips for students ==<br />
<br />
Please see the "gsoc" articles at our [https://dlang.org/blog/category/gsoc/ official blog] which contain experience reports from students of previous years.<br />
<br />
Daniel Pocock has [http://danielpocock.com/getting-selected-for-google-summer-of-code-2015 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.<br />
<br />
<br />
== Tips for Mentors ==<br />
<br />
If you are interested in mentoring, please check out the [http://en.flossmanuals.net/GSoCMentoring/ organization administrator and mentor] manual for more information.<br />
<br />
[[Category:GSOC]]</div>Greenifyhttps://wiki.dlang.org/?title=GSOC_2019_Ideas&diff=9548GSOC 2019 Ideas2019-02-28T10:12:46Z<p>Greenify: </p>
<hr />
<div>This is the D Language Foundation's Google Summer of Code 2019 page.<br />
<br />
If you are interested in working on a D project as part of GSoC 2019, as either a student or mentor, please contact the GSoC admins at social@dlang.org. Include "GSoC 2019" in the email subject line.<br />
<br />
<br />
== Timeline ==<br />
The timeline for GSoC 2019 [https://developers.google.com/open-source/gsoc/timeline can be found here].<br />
<br />
== Ideas ==<br />
<br />
The D ecosystem is always in need of improvement through the revision of existing projects and the creation of new ones. The core projects like the([http://dlang.org/phobos/index.html standard library]) and the compilers ([[Compilers]]) are always in need of attention. Other important areas include GUI support, integration with other languages, improving and enhancing the tooling, IDE and editor support, and more.<br />
<br />
Please add your project ideas to the list below, being as descriptive as you can in the summaries. Students interested in participating can use the ideas listed here as jumping off points, so the more information you provide, the easier it will be for them to get started. If your idea is particularly complex or nuanced, consider leaving contact information so that interested parties may follow up.<br />
<br />
=== Graphics library for resource constrained embedded systems ===<br />
----<br />
<br />
Create a 2D rasterizer, rich drawing primitives, and 2D graphics library suitable for resource constrained embedded systems (e.g. ARM Cortex-M) to be used in industrial controls, home appliances, medical devices, consumer electronics, and IoT just to name a few. The end goal would be something similar to [https://www.segger.com/products/user-interface/emwin Segger's emWin]. The library would be used to drive LDCs similar to https://www.adafruit.com/product/3396<br />
Requirements:<br />
<br />
* Hardware agnostic; should simply render to a frame buffer<br />
* No dependencies (No Phobos, no C standard library, and no official D runtime).<br />
* Consider using -betterC, but a custom minimal D runtime is also a viable option<br />
<br />
Related work:<br />
<br />
* https://github.com/TurkeyMan/color<br />
* https://bitbucket.org/timosi/minlibd<br />
* https://github.com/JinShil/stm32f42_discovery_demo<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Tabular data container (data frames) ===<br />
----<br />
<br />
Pandas, R and Julia have made [https://github.com/mobileink/data.frame/wiki/What-is-a-Data-Frame%3F data frames] very popular.<br />
As D is getting more interest from data scientist (e.g. [https://github.com/eBay/tsv-utils eBay] or [http://tech.adroll.com/blog/data/2014/11/17/d-is-for-data-science.html AdRoll]) it would be very beneficial to use one language for the entire data analysis pipeline - especially considering that D (in contrast to popular languages like Python, R or Julia) - is compiled to native machine code and gets optimized by the sophisticated LLVM backend.<br />
<br />
Minimum requirements:<br />
<br />
* conversion to and from CSV<br />
* multi-indexing<br />
* column binary operations, e.g. `column1 * column2`<br />
* group-by on an arbitrary number of columns<br />
* column/group aggregations<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
=== C++ interops ===<br />
----<br />
<br />
There are many experiments in transparently interfacing D with C++, notably:<br />
<br />
* [https://github.com/atilaneves/dpp dpp] by Atila Neves, that parses and translates headers on the fly<br />
* [https://wiki.dlang.org/Calypso Calypso] by Elie Morisse that bridges the two languages at the AST level.<br />
* [https://github.com/jacob-carlborg/dstep DStep] by Jacob Carlborg, automatically generates bindings for C and Objective-C code. The task would be to add support for C++.<br />
<br />
There is also a lot of work in bringing STL types to the DRuntime (see https://github.com/dlang/druntime/pull/2310).<br />
<br />
D would greatly benefit by seamlessly integrating the C++ ecosystem. There are many ways to accomplish this goal and it should be discussed with the community.<br />
Andrei already commented on the importance of a tool like Calypso in this thread:<br />
https://forum.dlang.org/post/m9s4cd$2s1v$1@digitalmars.com<br />
<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Persistent Data Structures ===<br />
----<br />
<br />
There is an ongoing effort to reduce the reliance of Phobos on the GC but the GC is not going anywhere given that it has many advantages over manual memory management.<br />
The community would greatly benefit from a wide range of functional programming techniques that have their roots in the usage of immutable and persistent data structures that heavily rely on the GC.<br />
Persistent Data Structures are heavily used in [http://docs.scala-lang.org/overviews/collections/overview.html Scala] and [http://clojure.org/reference/data_structures Clojure] and they allow the programmer to reason about interactivity, sharing and parallelism.<br />
<br />
The focus of this project would be to create a varying range of persistent data structures (sets, vectors, maps, strings, trees, lists, etc...) that respects the range interface and the semantics of Phobos.<br />
<br />
Related Work:<br />
<br />
* https://www.cs.cmu.edu/~rwh/theses/okasaki.pdf <br />
* https://www.worldcat.org/title/rrb-trees-efficient-immutable-vectors/oclc/820379112<br />
* https://www.youtube.com/watch?v=7BFF50BHPPo<br />
* https://www.infoq.com/presentations/Value-Values<br />
* https://github.com/arximboldi/immer<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Language Server Protocol for D ===<br />
----<br />
<br />
The [https://microsoft.github.io/language-server-protocol Language Server Protocol] (LSP) defines the protocol used between an editor or IDE and a language server that provides language features like auto complete, go to definition, find all references etc. Adding features like auto complete, go to definition, or documentation on hover for a programming language takes significant effort. Traditionally this work had to be repeated for each development tool, as each tool provides different APIs for implementing the same feature (see the list of [[Editors]] and [[IDEs]]).<br />
A Language Server is meant to provide the language-specific smarts and communicate with development tools over a protocol that enables inter-process communication.<br />
The idea behind the Language Server Protocol (LSP) is to standardize the protocol for how such servers and development tools communicate. This way, single D Language Server can be re-used in multiple development tools, which in turn can support multiple languages with minimal effort.<br />
<br />
Since summer of 2017 [https://dlang.org/blog/2017/08/01/a-dub-case-study-compiling-dmd-as-a-library DMD is available as a DUB package] and can be used for this challenge.<br />
<br />
Proposed Project Mentors: Jacob Carlborg, Sebastian Wilzbach<br />
<br />
=== Mir Project ===<br />
----<br />
<br />
The Mir project is developing numerical libraries for the upcoming numeric packages of<br />
the Dlang standard library. The are numerous projects an interested student could pursue:<br />
<br />
* University project. Your GSoC project can be combined with your scientific research.<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://julialang.org Julia] integration<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://www.numpy.org NumPy] integration<br />
* General purpose BetterC libraries<br />
** I/O betterC Dlang library<br />
** Async betterC Dlang library<br />
** String and format betterC library<br />
* mir-cpuid <br />
** ARM support<br />
** Advanced OS specific support<br />
* mir-glas<br />
** BLAS Level 2 subprograms<br />
** One BLAS Level 3 subprogram. It is OK to do only one! But it must be faster then OpenBLAS, and not slower then Intel MKL.<br />
** Multithreading support for BLAS Level 2<br />
** Multithreading support for BLAS Level 3<br />
<br />
You can get more details on projects related to Mir [https://github.com/libmir/mir/wiki/GSoC-2019 here].<br />
<br />
Its Good To Know:<br />
<br />
To work on the Mir you should be proficient with one of:<br />
<br />
* C<br />
* C++<br />
* LLVM<br />
* Fortran<br />
* Experience with D is not essential.<br />
<br />
To work on the Mir project requires a responsible and self-motivated student.<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
=== DUB: D's package manager ===<br />
----<br />
<br />
DUB - D's package manager - is one of the central infrastructure tools in the D world as a convenient build and package management tool for the D community.<br />
With D gaining more and more popularity, it's also a key tool to guarantee D's further adoption.<br />
Thus there are many great ideas to improve DUB:<br />
<br />
* [https://github.com/dlang/dub/wiki/DEP2 separate compilation and caching]<br />
* [https://github.com/dlang/dub/wiki/DEP3 extensibility through DUB]<br />
* [https://github.com/dlang/dub/wiki/DEP4 control flow directives]<br />
* [https://github.com/dlang/dub/wiki/DEP5 build system support for C/C++]<br />
* [https://github.com/dlang/dub/wiki/DEP6 git support]<br />
* support dub install for distributions<br />
* support building a {snap, Debian, Arch, ...} package out of DUB package<br />
<br />
Proposed Project Mentors: Sönke Ludwig, Sebastian Wilzbach<br />
<br />
=== std.benchmark ===<br />
----<br />
<br />
Ideally every function in Phobos should have its own benchmark suite which is run for every PR to check for performance improvements or regressions.<br />
* Additionally support for the new big O annotation [https://github.com/dlang/phobos/pull/4965 here] would be nice. <br />
* Existing work: [https://github.com/dlang/phobos/pull/794 here], and [https://github.com/dlang/phobos/pull/3695 here], and [https://github.com/atilaneves/unit-threaded/tree/master/source/unit_threaded/randomized here (QuickText-like testing)]. <br />
<br />
Proposed Project Mentors: Sebastian Wilzbach<br />
<br />
=== Jupyter notebook D kernel ===<br />
----<br />
<br />
The Jupyter Notebook is an open-source web application that allows you to create and share documents that contain live code, equations, visualizations and narrative text. Uses include: data cleaning and transformation, numerical simulation, statistical modeling, data visualization, machine learning, and much more.<br />
Jupyter notebooks are extremely popular among data scientist as they allow interactive progress and exploring a solution step by step.<br />
With a bit of work, a statically compiled language can be used in an interactive notebook e.g. [Cling https://blog.jupyter.org/interactive-workflows-for-c-with-jupyter-fe9b54227d92] and Go with<br />
[https://github.com/gopherdata/gophernotes gophernotes].<br />
Apart from being useful to data scientist, a Jupyter D kernel would allow an intuitive exploration of the language for newcomers and people starting with new libraries.<br />
<br />
Existing works:<br />
- [https://github.com/dlang-community/drepl drepl] - simple REPL for D<br />
- [https://github.com/DlangScience/PydMagic PydMagic] - allows to write PyD extension in a notebook.<br />
<br />
Proposed Project Mentor: Sebastian Wilzbach<br />
<br />
=== Functional Reactive Programming ===<br />
----<br />
<br />
Functional reactive programming (FRP) is a programming paradigm for reactive programming (asynchronous dataflow programming) using the building blocks of functional programming (e.g. map, reduce, filter).<br />
The best-known FRP API is the [http://reactivex.io ReactiveX API] whose implementation in D this project would focus.<br />
Note that this project is closely related to the std.eventloop project.<br />
<br />
Proposed Project Mentors: Petar Kirov<br />
<br />
=== Java Native Interface (JNI) library ===<br />
----<br />
<br />
D's features allow to write cut down the boilerplate of wrapper drastically.<br />
See the recently published [https://dlang.org/blog/2017/05/31/project-highlight-excel-d excel-d] for a comparison between the C++ implementation for registering a function in Excel and the D way.<br />
Similarly a solid JNI library would open up new many new use cases and allow the Java community to profit even easier from D's features.<br />
<br />
Previous work: [https://github.com/Monnoroch/DJni DJni], [https://github.com/jamesmahler/djvm djvm]<br />
Proposed Project Mentor: TBA<br />
<br />
=== ORM mapping ===<br />
<br />
SQLAlchemy is an object-relational mapper which provides "a full suite of well known enterprise-level persistence patterns, designed for efficient and high-performing database access, adapted into a simple and Pythonic domain language".<br />
While there has been some attempts in implementing an ORM in D - none of these got close to the simplicity and usability of SQLAlchemy (see [[Database Libraries]]).<br />
However, with D's CTFE queries could - like std.format's strings - already be checked at compile-time and optimizations could be be applied to the parser and serializer.<br />
<br />
This project would be based on the [http://dconf.org/2016/talks/smith.html proposed std.database abstraction] and focus on creating a general-purpose ORM on top of it.<br />
<br />
See also: Martin Nowak's DConf16 talk about [http://dconf.org/2016/talks/nowak.html Object-Relational Mapper] <br />
<br />
Existing work:<br />
* [https://github.com/huntlabs/hunt-entity hunt-entity]<br />
<br />
Proposed Project Mentor: TBA<br />
<br />
<br />
=== Propose your own project ===<br />
----<br />
<br />
Do you have your own vision for improving D's success? That's great!<br />
Are you convinced that your project helps to advance open source technology related to the D programming language?<br />
Then simply get in touch with D's GSoC org admin (social (at) dlang (dot) org) and potential mentors for your project.<br />
<br />
If you are searching for inspiration, you might want to have a look at the [[DIPs| list of D Improvement Proposals (DIPs)]], the [[Vision/2018H1|high-level vision for this semester]] or the [[Wish_list|wish list]].<br />
<br />
<br />
== Ideas From Previous Years ==<br />
<br />
These GSoC idea pages from the past years which might provide more inspiration for proposing your own idea:<br />
<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2018 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2017 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2016_Ideas GSoC 2016 Ideas] (accepted, 4 slots)<br />
* [http://wiki.dlang.org/GSOC_2015_Ideas GSoC 2015 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2014_Ideas GSoC 2014 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2013_Ideas GSoC 2013 Ideas] (not accepted)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2012_Ideas GSoC 2012 Ideas] (accepted, 3 slots)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2011_Ideas GSoC 2011 Ideas]<br />
<br />
You may also want to have a look at [https://wiki.dlang.org/SAOC_2018_ideas the Symmetry Autumn of Code ideas page].<br />
<br />
== Tips for students ==<br />
<br />
Please see the "gsoc" articles at our [https://dlang.org/blog/category/gsoc/ official blog] which contain experience reports from students of previous years.<br />
<br />
Daniel Pocock has [http://danielpocock.com/getting-selected-for-google-summer-of-code-2015 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.<br />
<br />
<br />
== Tips for Mentors ==<br />
<br />
If you are interested in mentoring, please check out the [http://en.flossmanuals.net/GSoCMentoring/ organization administrator and mentor] manual for more information.<br />
<br />
[[Category:GSOC]]</div>Greenifyhttps://wiki.dlang.org/?title=GSOC_2019_Ideas&diff=9535GSOC 2019 Ideas2019-02-08T12:04:40Z<p>Greenify: /* Mir Project */</p>
<hr />
<div>This is the D Language Foundation's Google Summer of Code 2019 page.<br />
<br />
If you are interested in working on a D project as part of GSoC 2019, as either a student or mentor, please contact the GSoC admins at scoial@dlang.org. Include "GSoC 2019" in the email subject line.<br />
<br />
<br />
== Timeline ==<br />
The timeline for GSoC 2019 [https://developers.google.com/open-source/gsoc/timeline can be found here].<br />
<br />
== Ideas ==<br />
<br />
The D ecosystem is always in need of improvement through the revision of existing projects and the creation of new ones. The core projects like the([http://dlang.org/phobos/index.html standard library]) and the compilers ([[Compilers]]) are always in need of attention. Other important areas include GUI support, integration with other languages, improving and enhancing the tooling, IDE and editor support, and more.<br />
<br />
Please add your project ideas to the list below, being as descriptive as you can in the summaries. Students interested in participating can use the ideas listed here as jumping off points, so the more information you provide, the easier it will be for them to get started. If your idea is particularly complex or nuanced, consider leaving contact information so that interested parties may follow up.<br />
<br />
=== Graphics library for resource constrained embedded systems ===<br />
----<br />
<br />
Create a 2D rasterizer, rich drawing primitives, and 2D graphics library suitable for resource constrained embedded systems (e.g. ARM Cortex-M) to be used in industrial controls, home appliances, medical devices, consumer electronics, and IoT just to name a few. The end goal would be something similar to [https://www.segger.com/products/user-interface/emwin Segger's emWin]. The library would be used to drive LDCs similar to https://www.adafruit.com/product/3396<br />
Requirements:<br />
<br />
* Hardware agnostic; should simply render to a frame buffer<br />
* No dependencies (No Phobos, no C standard library, and no official D runtime).<br />
* Consider using -betterC, but a custom minimal D runtime is also a viable option<br />
<br />
Related work:<br />
<br />
* https://github.com/TurkeyMan/color<br />
* https://bitbucket.org/timosi/minlibd<br />
* https://github.com/JinShil/stm32f42_discovery_demo<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Tabular data container (data frames) ===<br />
----<br />
<br />
Pandas, R and Julia have made [https://github.com/mobileink/data.frame/wiki/What-is-a-Data-Frame%3F data frames] very popular.<br />
As D is getting more interest from data scientist (e.g. [https://github.com/eBay/tsv-utils eBay] or [http://tech.adroll.com/blog/data/2014/11/17/d-is-for-data-science.html AdRoll]) it would be very beneficial to use one language for the entire data analysis pipeline - especially considering that D (in contrast to popular languages like Python, R or Julia) - is compiled to native machine code and gets optimized by the sophisticated LLVM backend.<br />
<br />
Minimum requirements:<br />
<br />
* conversion to and from CSV<br />
* multi-indexing<br />
* column binary operations, e.g. `column1 * column2`<br />
* group-by on an arbitrary number of columns<br />
* column/group aggregations<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
=== C++ interops ===<br />
----<br />
<br />
There are many experiments in transparently interfacing D with C++, notably:<br />
<br />
* [https://github.com/atilaneves/dpp dpp] by Atila Neves, that parses and translates headers on the fly<br />
* [https://wiki.dlang.org/Calypso Calypso] by Elie Morisse that bridges the two languages at the AST level.<br />
<br />
There is also a lot of work in bringing STL types to the DRuntime (see https://github.com/dlang/druntime/pull/2310).<br />
<br />
D would greatly benefit by seamlessly integrating the C++ ecosystem. There are many ways to accomplish this goal and it should be discussed with the community.<br />
Andrei already commented on the importance of a tool like Calypso in this thread:<br />
https://forum.dlang.org/post/m9s4cd$2s1v$1@digitalmars.com<br />
<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Persistent Data Structures ===<br />
----<br />
<br />
There is an ongoing effort to reduce the reliance of Phobos on the GC but the GC is not going anywhere given that it has many advantages over manual memory management.<br />
The community would greatly benefit from a wide range of functional programming techniques that have their roots in the usage of immutable and persistent data structures that heavily rely on the GC.<br />
Persistent Data Structures are heavily used in [http://docs.scala-lang.org/overviews/collections/overview.html Scala] and [http://clojure.org/reference/data_structures Clojure] and they allow the programmer to reason about interactivity, sharing and parallelism.<br />
<br />
The focus of this project would be to create a varying range of persistent data structures (sets, vectors, maps, strings, trees, lists, etc...) that respects the range interface and the semantics of Phobos.<br />
<br />
Related Work:<br />
<br />
* https://www.cs.cmu.edu/~rwh/theses/okasaki.pdf <br />
* https://www.worldcat.org/title/rrb-trees-efficient-immutable-vectors/oclc/820379112<br />
* https://www.youtube.com/watch?v=7BFF50BHPPo<br />
* https://www.infoq.com/presentations/Value-Values<br />
* https://github.com/arximboldi/immer<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Language Server Protocol for D ===<br />
----<br />
<br />
The [https://microsoft.github.io/language-server-protocol Language Server Protocol] (LSP) defines the protocol used between an editor or IDE and a language server that provides language features like auto complete, go to definition, find all references etc. Adding features like auto complete, go to definition, or documentation on hover for a programming language takes significant effort. Traditionally this work had to be repeated for each development tool, as each tool provides different APIs for implementing the same feature (see the list of [[Editors]] and [[IDEs]]).<br />
A Language Server is meant to provide the language-specific smarts and communicate with development tools over a protocol that enables inter-process communication.<br />
The idea behind the Language Server Protocol (LSP) is to standardize the protocol for how such servers and development tools communicate. This way, single D Language Server can be re-used in multiple development tools, which in turn can support multiple languages with minimal effort.<br />
<br />
Since summer of 2017 [https://dlang.org/blog/2017/08/01/a-dub-case-study-compiling-dmd-as-a-library DMD is available as a DUB package] and can be used for this challenge.<br />
<br />
Proposed Project Mentors: Jacob Carlborg, Sebastian Wilzbach<br />
<br />
=== Mir Project ===<br />
----<br />
<br />
The Mir project is developing numerical libraries for the upcoming numeric packages of<br />
the Dlang standard library. The are numerous projects an interested student could pursue:<br />
<br />
* University project. Your GSoC project can be combined with your scientific research.<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://julialang.org Julia] integration<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://www.numpy.org NumPy] integration<br />
* General purpose BetterC libraries<br />
** I/O betterC Dlang library<br />
** Async betterC Dlang library<br />
** String and format betterC library<br />
* mir-cpuid <br />
** ARM support<br />
** Advanced OS specific support<br />
* mir-glas<br />
** BLAS Level 2 subprograms<br />
** One BLAS Level 3 subprogram. It is OK to do only one! But it must be faster then OpenBLAS, and not slower then Intel MKL.<br />
** Multithreading support for BLAS Level 2<br />
** Multithreading support for BLAS Level 3<br />
<br />
You can get more details on projects related to Mir [https://github.com/libmir/mir/wiki/GSoC-2019 here].<br />
<br />
Its Good To Know:<br />
<br />
To work on the Mir you should be proficient with one of:<br />
<br />
* C<br />
* C++<br />
* LLVM<br />
* Fortran<br />
* Experience with D is not essential.<br />
<br />
To work on the Mir project requires a responsible and self-motivated student.<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
=== DUB: D's package manager ===<br />
----<br />
<br />
DUB - D's package manager - is one of the central infrastructure tools in the D world as a convenient build and package management tool for the D community.<br />
With D gaining more and more popularity, it's also a key tool to guarantee D's further adoption.<br />
Thus there are many great ideas to improve DUB:<br />
<br />
* [https://github.com/dlang/dub/wiki/DEP2 separate compilation and caching]<br />
* [https://github.com/dlang/dub/wiki/DEP3 extensibility through DUB]<br />
* [https://github.com/dlang/dub/wiki/DEP4 control flow directives]<br />
* [https://github.com/dlang/dub/wiki/DEP5 build system support for C/C++]<br />
* [https://github.com/dlang/dub/wiki/DEP6 git support]<br />
* support dub install for distributions<br />
* support building a {snap, Debian, Arch, ...} package out of DUB package<br />
<br />
Proposed Project Mentors: Sönke Ludwig, Sebastian Wilzbach<br />
<br />
=== std.benchmark ===<br />
----<br />
<br />
Ideally every function in Phobos should have its own benchmark suite which is run for every PR to check for performance improvements or regressions.<br />
* Additionally support for the new big O annotation [https://github.com/dlang/phobos/pull/4965 here] would be nice. <br />
* Existing work: [https://github.com/dlang/phobos/pull/794 here], and [https://github.com/dlang/phobos/pull/3695 here], and [https://github.com/atilaneves/unit-threaded/tree/master/source/unit_threaded/randomized here (QuickText-like testing)]. <br />
<br />
Proposed Project Mentors: Sebastian Wilzbach<br />
<br />
=== Jupyter notebook D kernel ===<br />
----<br />
<br />
The Jupyter Notebook is an open-source web application that allows you to create and share documents that contain live code, equations, visualizations and narrative text. Uses include: data cleaning and transformation, numerical simulation, statistical modeling, data visualization, machine learning, and much more.<br />
Jupyter notebooks are extremely popular among data scientist as they allow interactive progress and exploring a solution step by step.<br />
With a bit of work, a statically compiled language can be used in an interactive notebook e.g. [Cling https://blog.jupyter.org/interactive-workflows-for-c-with-jupyter-fe9b54227d92] and Go with<br />
[https://github.com/gopherdata/gophernotes gophernotes].<br />
Apart from being useful to data scientist, a Jupyter D kernel would allow an intuitive exploration of the language for newcomers and people starting with new libraries.<br />
<br />
Existing works:<br />
- [https://github.com/dlang-community/drepl drepl] - simple REPL for D<br />
- [https://github.com/DlangScience/PydMagic PydMagic] - allows to write PyD extension in a notebook.<br />
<br />
Proposed Project Mentor: Sebastian Wilzbach<br />
<br />
=== Functional Reactive Programming ===<br />
----<br />
<br />
Functional reactive programming (FRP) is a programming paradigm for reactive programming (asynchronous dataflow programming) using the building blocks of functional programming (e.g. map, reduce, filter).<br />
The best-known FRP API is the [http://reactivex.io ReactiveX API] whose implementation in D this project would focus.<br />
Note that this project is closely related to the std.eventloop project.<br />
<br />
Proposed Project Mentors: Petar Kirov<br />
<br />
=== Java Native Interface (JNI) library ===<br />
----<br />
<br />
D's features allow to write cut down the boilerplate of wrapper drastically.<br />
See the recently published [https://dlang.org/blog/2017/05/31/project-highlight-excel-d excel-d] for a comparison between the C++ implementation for registering a function in Excel and the D way.<br />
Similarly a solid JNI library would open up new many new use cases and allow the Java community to profit even easier from D's features.<br />
<br />
Previous work: [https://github.com/Monnoroch/DJni DJni], [https://github.com/jamesmahler/djvm djvm]<br />
Proposed Project Mentor: TBA<br />
<br />
=== ORM mapping ===<br />
<br />
SQLAlchemy is an object-relational mapper which provides "a full suite of well known enterprise-level persistence patterns, designed for efficient and high-performing database access, adapted into a simple and Pythonic domain language".<br />
While there has been some attempts in implementing an ORM in D - none of these got close to the simplicity and usability of SQLAlchemy (see [[Database Libraries]]).<br />
However, with D's CTFE queries could - like std.format's strings - already be checked at compile-time and optimizations could be be applied to the parser and serializer.<br />
<br />
This project would be based on the [http://dconf.org/2016/talks/smith.html proposed std.database abstraction] and focus on creating a general-purpose ORM on top of it.<br />
<br />
See also: Martin Nowak's DConf16 talk about [http://dconf.org/2016/talks/nowak.html Object-Relational Mapper] <br />
<br />
Existing work:<br />
* [https://github.com/huntlabs/hunt-entity hunt-entity]<br />
<br />
Proposed Project Mentor: TBA<br />
<br />
<br />
=== Propose your own project ===<br />
----<br />
<br />
Do you have your own vision for improving D's success? That's great!<br />
Are you convinced that your project helps to advance open source technology related to the D programming language?<br />
Then simply get in touch with D's GSoC org admin (social (at) dlang (dot) org) and potential mentors for your project.<br />
<br />
If you are searching for inspiration, you might want to have a look at the [[DIPs| list of D Improvement Proposals (DIPs)]], the [[Vision/2018H1|high-level vision for this semester]] or the [[Wish_list|wish list]].<br />
<br />
<br />
== Ideas From Previous Years ==<br />
<br />
These GSoC idea pages from the past years which might provide more inspiration for proposing your own idea:<br />
<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2018 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2017 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2016_Ideas GSoC 2016 Ideas] (accepted, 4 slots)<br />
* [http://wiki.dlang.org/GSOC_2015_Ideas GSoC 2015 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2014_Ideas GSoC 2014 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2013_Ideas GSoC 2013 Ideas] (not accepted)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2012_Ideas GSoC 2012 Ideas] (accepted, 3 slots)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2011_Ideas GSoC 2011 Ideas]<br />
<br />
You may also want to have a look at [https://wiki.dlang.org/SAOC_2018_ideas the Symmetry Autumn of Code ideas page].<br />
<br />
== Tips for students ==<br />
<br />
Please see the "gsoc" articles at our [https://dlang.org/blog/category/gsoc/ official blog] which contain experience reports from students of previous years.<br />
<br />
Daniel Pocock has [http://danielpocock.com/getting-selected-for-google-summer-of-code-2015 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.<br />
<br />
<br />
== Tips for Mentors ==<br />
<br />
If you are interested in mentoring, please check out the [http://en.flossmanuals.net/GSoCMentoring/ organization administrator and mentor] manual for more information.<br />
<br />
[[Category:GSOC]]</div>Greenifyhttps://wiki.dlang.org/?title=GSOC_2019_Ideas&diff=9530GSOC 2019 Ideas2019-02-06T12:37:45Z<p>Greenify: Added more ideas</p>
<hr />
<div>This is the D Language Foundation's Google Summer of Code 2019 page.<br />
<br />
If you are interested in working on a D project as part of GSoC 2019, as either a student or mentor, please contact the GSoC admins at scoial@dlang.org. Include "GSoC 2019" in the email subject line.<br />
<br />
<br />
== Timeline ==<br />
The timeline for GSoC 2019 [https://developers.google.com/open-source/gsoc/timeline can be found here].<br />
<br />
== Ideas ==<br />
<br />
The D ecosystem is always in need of improvement through the revision of existing projects and the creation of new ones. The core projects like the([http://dlang.org/phobos/index.html standard library]) and the compilers ([[Compilers]]) are always in need of attention. Other important areas include GUI support, integration with other languages, improving and enhancing the tooling, IDE and editor support, and more.<br />
<br />
Please add your project ideas to the list below, being as descriptive as you can in the summaries. Students interested in participating can use the ideas listed here as jumping off points, so the more information you provide, the easier it will be for them to get started. If your idea is particularly complex or nuanced, consider leaving contact information so that interested parties may follow up.<br />
<br />
=== Graphics library for resource constrained embedded systems ===<br />
----<br />
<br />
Create a 2D rasterizer, rich drawing primitives, and 2D graphics library suitable for resource constrained embedded systems (e.g. ARM Cortex-M) to be used in industrial controls, home appliances, medical devices, consumer electronics, and IoT just to name a few. The end goal would be something similar to [https://www.segger.com/products/user-interface/emwin Segger's emWin]. The library would be used to drive LDCs similar to https://www.adafruit.com/product/3396<br />
Requirements:<br />
<br />
* Hardware agnostic; should simply render to a frame buffer<br />
* No dependencies (No Phobos, no C standard library, and no official D runtime).<br />
* Consider using -betterC, but a custom minimal D runtime is also a viable option<br />
<br />
Related work:<br />
<br />
* https://github.com/TurkeyMan/color<br />
* https://bitbucket.org/timosi/minlibd<br />
* https://github.com/JinShil/stm32f42_discovery_demo<br />
<br />
Proposed Project Mentors: TBA<br />
<br />
=== Tabular data container (data frames) ===<br />
----<br />
<br />
Pandas, R and Julia have made [https://github.com/mobileink/data.frame/wiki/What-is-a-Data-Frame%3F data frames] very popular.<br />
As D is getting more interest from data scientist (e.g. [https://github.com/eBay/tsv-utils eBay] or [http://tech.adroll.com/blog/data/2014/11/17/d-is-for-data-science.html AdRoll]) it would be very beneficial to use one language for the entire data analysis pipeline - especially considering that D (in contrast to popular languages like Python, R or Julia) - is compiled to native machine code and gets optimized by the sophisticated LLVM backend.<br />
<br />
Minimum requirements:<br />
<br />
* conversion to and from CSV<br />
* multi-indexing<br />
* column binary operations, e.g. `column1 * column2`<br />
* group-by on an arbitrary number of columns<br />
* column/group aggregations<br />
<br />
Proposed Project Mentor: Ilya Yaroshenko<br />
<br />
=== C++ interops ===<br />
----<br />
<br />
There are many experiments in transparently interfacing D with C++, notably:<br />
<br />
* [https://github.com/atilaneves/dpp dpp] by Atila Neves, that parses and translates headers on the fly<br />
* [https://wiki.dlang.org/Calypso Calypso] by Elie Morisse that bridges the two languages at the AST level.<br />
<br />
There is also a lot of work in bringing STL types to the DRuntime (see https://github.com/dlang/druntime/pull/2310).<br />
<br />
D would greatly benefit by seamlessly integrating the C++ ecosystem. There are many ways to accomplish this goal and it should be discussed with the community.<br />
Andrei already commented on the importance of a tool like Calypso in this thread:<br />
https://forum.dlang.org/post/m9s4cd$2s1v$1@digitalmars.com<br />
<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Persistent Data Structures ===<br />
----<br />
<br />
There is an ongoing effort to reduce the reliance of Phobos on the GC but the GC is not going anywhere given that it has many advantages over manual memory management.<br />
The community would greatly benefit from a wide range of functional programming techniques that have their roots in the usage of immutable and persistent data structures that heavily rely on the GC.<br />
Persistent Data Structures are heavily used in [http://docs.scala-lang.org/overviews/collections/overview.html Scala] and [http://clojure.org/reference/data_structures Clojure] and they allow the programmer to reason about interactivity, sharing and parallelism.<br />
<br />
The focus of this project would be to create a varying range of persistent data structures (sets, vectors, maps, strings, trees, lists, etc...) that respects the range interface and the semantics of Phobos.<br />
<br />
Related Work:<br />
<br />
* https://www.cs.cmu.edu/~rwh/theses/okasaki.pdf <br />
* https://www.worldcat.org/title/rrb-trees-efficient-immutable-vectors/oclc/820379112<br />
* https://www.youtube.com/watch?v=7BFF50BHPPo<br />
* https://www.infoq.com/presentations/Value-Values<br />
* https://github.com/arximboldi/immer<br />
<br />
Proposed Project Mentor: Andrei Alexandrescu<br />
<br />
=== Language Server Protocol for D ===<br />
----<br />
<br />
The [https://microsoft.github.io/language-server-protocol Language Server Protocol] (LSP) defines the protocol used between an editor or IDE and a language server that provides language features like auto complete, go to definition, find all references etc. Adding features like auto complete, go to definition, or documentation on hover for a programming language takes significant effort. Traditionally this work had to be repeated for each development tool, as each tool provides different APIs for implementing the same feature (see the list of [[Editors]] and [[IDEs]]).<br />
A Language Server is meant to provide the language-specific smarts and communicate with development tools over a protocol that enables inter-process communication.<br />
The idea behind the Language Server Protocol (LSP) is to standardize the protocol for how such servers and development tools communicate. This way, single D Language Server can be re-used in multiple development tools, which in turn can support multiple languages with minimal effort.<br />
<br />
Since summer of 2017 [https://dlang.org/blog/2017/08/01/a-dub-case-study-compiling-dmd-as-a-library DMD is available as a DUB package] and can be used for this challenge.<br />
<br />
Proposed Project Mentors: Jacob Carlborg, Sebastian Wilzbach<br />
<br />
=== Mir Project ===<br />
----<br />
<br />
The Mir project is developing numerical libraries for the upcoming numeric packages of<br />
the Dlang standard library. The are numerous projects an interested student could pursue:<br />
<br />
* University project. Your GSoC project can be combined with your scientific research.<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://julialang.org Julia] integration<br />
* [http://docs.algorithm.dlang.io/latest/mir_ndslice.html ndslice]>-<[http://www.numpy.org NumPy] integration<br />
* General purpose BetterC libraries<br />
** I/O betterC Dlang library<br />
** Async betterC Dlang library<br />
** String and format betterC library<br />
* mir-cpuid <br />
** ARM support<br />
** Advanced OS specific support<br />
* mir-glas<br />
** BLAS Level 2 subprograms<br />
** One BLAS Level 3 subprogram. It is OK to do only one! But it must be faster then OpenBLAS, and not slower then Intel MKL.<br />
** Multithreading support for BLAS Level 2<br />
** Multithreading support for BLAS Level 3<br />
<br />
You can get more details on projects related to Mir [https://github.com/libmir/mir/wiki/GSoC-2019 here].<br />
<br />
Its Good To Know:<br />
<br />
To work on the Mir you should be proficient with one of:<br />
<br />
* C<br />
* C++<br />
* LLVM<br />
* Fortran<br />
* Experience with D is not essential.<br />
<br />
To work on the Mir project requires a responsible and self-motivated student.<br />
<br />
Proposed Project Mentor: Ilya_Yaroshenko<br />
<br />
=== DUB: D's package manager ===<br />
----<br />
<br />
DUB - D's package manager - is one of the central infrastructure tools in the D world as a convenient build and package management tool for the D community.<br />
With D gaining more and more popularity, it's also a key tool to guarantee D's further adoption.<br />
Thus there are many great ideas to improve DUB:<br />
<br />
* [https://github.com/dlang/dub/wiki/DEP2 separate compilation and caching]<br />
* [https://github.com/dlang/dub/wiki/DEP3 extensibility through DUB]<br />
* [https://github.com/dlang/dub/wiki/DEP4 control flow directives]<br />
* [https://github.com/dlang/dub/wiki/DEP5 build system support for C/C++]<br />
* [https://github.com/dlang/dub/wiki/DEP6 git support]<br />
* support dub install for distributions<br />
* support building a {snap, Debian, Arch, ...} package out of DUB package<br />
<br />
Proposed Project Mentors: Sönke Ludwig, Sebastian Wilzbach<br />
<br />
=== std.benchmark ===<br />
----<br />
<br />
Ideally every function in Phobos should have its own benchmark suite which is run for every PR to check for performance improvements or regressions.<br />
* Additionally support for the new big O annotation [https://github.com/dlang/phobos/pull/4965 here] would be nice. <br />
* Existing work: [https://github.com/dlang/phobos/pull/794 here], and [https://github.com/dlang/phobos/pull/3695 here], and [https://github.com/atilaneves/unit-threaded/tree/master/source/unit_threaded/randomized here (QuickText-like testing)]. <br />
<br />
Proposed Project Mentors: Sebastian Wilzbach<br />
<br />
=== Jupyter notebook D kernel ===<br />
----<br />
<br />
The Jupyter Notebook is an open-source web application that allows you to create and share documents that contain live code, equations, visualizations and narrative text. Uses include: data cleaning and transformation, numerical simulation, statistical modeling, data visualization, machine learning, and much more.<br />
Jupyter notebooks are extremely popular among data scientist as they allow interactive progress and exploring a solution step by step.<br />
With a bit of work, a statically compiled language can be used in an interactive notebook e.g. [Cling https://blog.jupyter.org/interactive-workflows-for-c-with-jupyter-fe9b54227d92] and Go with<br />
[https://github.com/gopherdata/gophernotes gophernotes].<br />
Apart from being useful to data scientist, a Jupyter D kernel would allow an intuitive exploration of the language for newcomers and people starting with new libraries.<br />
<br />
Existing works:<br />
- [https://github.com/dlang-community/drepl drepl] - simple REPL for D<br />
- [https://github.com/DlangScience/PydMagic PydMagic] - allows to write PyD extension in a notebook.<br />
<br />
Proposed Project Mentor: Sebastian Wilzbach<br />
<br />
=== Functional Reactive Programming ===<br />
----<br />
<br />
Functional reactive programming (FRP) is a programming paradigm for reactive programming (asynchronous dataflow programming) using the building blocks of functional programming (e.g. map, reduce, filter).<br />
The best-known FRP API is the [http://reactivex.io ReactiveX API] whose implementation in D this project would focus.<br />
Note that this project is closely related to the std.eventloop project.<br />
<br />
Proposed Project Mentors: Petar Kirov<br />
<br />
=== Java Native Interface (JNI) library ===<br />
----<br />
<br />
D's features allow to write cut down the boilerplate of wrapper drastically.<br />
See the recently published [https://dlang.org/blog/2017/05/31/project-highlight-excel-d excel-d] for a comparison between the C++ implementation for registering a function in Excel and the D way.<br />
Similarly a solid JNI library would open up new many new use cases and allow the Java community to profit even easier from D's features.<br />
<br />
Previous work: [https://github.com/Monnoroch/DJni DJni], [https://github.com/jamesmahler/djvm djvm]<br />
Proposed Project Mentor: TBA<br />
<br />
=== ORM mapping ===<br />
<br />
SQLAlchemy is an object-relational mapper which provides "a full suite of well known enterprise-level persistence patterns, designed for efficient and high-performing database access, adapted into a simple and Pythonic domain language".<br />
While there has been some attempts in implementing an ORM in D - none of these got close to the simplicity and usability of SQLAlchemy (see [[Database Libraries]]).<br />
However, with D's CTFE queries could - like std.format's strings - already be checked at compile-time and optimizations could be be applied to the parser and serializer.<br />
<br />
This project would be based on the [http://dconf.org/2016/talks/smith.html proposed std.database abstraction] and focus on creating a general-purpose ORM on top of it.<br />
<br />
See also: Martin Nowak's DConf16 talk about [http://dconf.org/2016/talks/nowak.html Object-Relational Mapper] <br />
<br />
Existing work:<br />
* [https://github.com/huntlabs/hunt-entity hunt-entity]<br />
<br />
Proposed Project Mentor: TBA<br />
<br />
<br />
=== Propose your own project ===<br />
----<br />
<br />
Do you have your own vision for improving D's success? That's great!<br />
Are you convinced that your project helps to advance open source technology related to the D programming language?<br />
Then simply get in touch with D's GSoC org admin (social (at) dlang (dot) org) and potential mentors for your project.<br />
<br />
If you are searching for inspiration, you might want to have a look at the [[DIPs| list of D Improvement Proposals (DIPs)]], the [[Vision/2018H1|high-level vision for this semester]] or the [[Wish_list|wish list]].<br />
<br />
<br />
== Ideas From Previous Years ==<br />
<br />
These GSoC idea pages from the past years which might provide more inspiration for proposing your own idea:<br />
<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2018 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2017_Ideas GSoC 2017 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2016_Ideas GSoC 2016 Ideas] (accepted, 4 slots)<br />
* [http://wiki.dlang.org/GSOC_2015_Ideas GSoC 2015 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2014_Ideas GSoC 2014 Ideas] (not accepted)<br />
* [http://wiki.dlang.org/GSOC_2013_Ideas GSoC 2013 Ideas] (not accepted)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2012_Ideas GSoC 2012 Ideas] (accepted, 3 slots)<br />
* [http://www.prowiki.org/wiki4d/wiki.cgi?GSOC_2011_Ideas GSoC 2011 Ideas]<br />
<br />
You may also want to have a look at [https://wiki.dlang.org/SAOC_2018_ideas the Symmetry Autumn of Code ideas page].<br />
<br />
== Tips for students ==<br />
<br />
Please see the "gsoc" articles at our [https://dlang.org/blog/category/gsoc/ official blog] which contain experience reports from students of previous years.<br />
<br />
Daniel Pocock has [http://danielpocock.com/getting-selected-for-google-summer-of-code-2015 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.<br />
<br />
<br />
== Tips for Mentors ==<br />
<br />
If you are interested in mentoring, please check out the [http://en.flossmanuals.net/GSoCMentoring/ organization administrator and mentor] manual for more information.<br />
<br />
[[Category:GSOC]]</div>Greenifyhttps://wiki.dlang.org/?title=Template:Latest_DMD_Version_Raw&diff=9398Template:Latest DMD Version Raw2018-10-22T12:59:47Z<p>Greenify: Bump DMD version</p>
<hr />
<div>2.082.1</div>Greenifyhttps://wiki.dlang.org/?title=Phobos_and_Druntime_Style_Guide&diff=9337Phobos and Druntime Style Guide2018-08-15T11:07:23Z<p>Greenify: /* Comments */ Adjust example Ddoc to dlang.org/dstyle</p>
<hr />
<div>Many people have contributed to the core D library Druntime and the standard D library Phobos. Over the years, the codebases have accumulated a mix of styles. Whilst each particular style is entirely fine on its own, code containing a mishmash of styles is jarring. This document sets out a number of style guidelines that all new Phobos code should follow. The plan going forward is to automate these simple rules for new pull requests and later for the entire codebase.<br />
<br />
= Indentation and Bracing =<br />
<br />
* Indentation level is four spaces.<br />
* There is no fraction of an indent. All indentation is a multiple of 4 spaces.<br />
* Elaborate vertical alignment (i.e. tabulation) is to be avoided.<br />
* Multiple indent shall occur under specific circumstances enumerated later in this document.<br />
* When present on their own line, template constraints are not indented extra. Example:<br />
<br />
<syntaxhighlight lang="D"><br />
int fun(T)(T value)<br />
if (isIntegral!T)<br />
{<br />
...<br />
}<br />
</syntaxhighlight><br />
<br />
* Opening and closing braces for scopes and <tt>static if</tt> shall be on their own line. There is no other code on lines with such braces.<br />
* In contract code, <tt>in</tt>, <tt>out</tt>, <tt>body</tt> are not indented. Example:<br />
<br />
<syntaxhighlight lang="D"><br />
int fun(T)(T value)<br />
if (isIntegral!T)<br />
in<br />
{<br />
...<br />
}<br />
out<br />
{<br />
...<br />
}<br />
body<br />
{<br />
...<br />
}<br />
</syntaxhighlight><br />
<br />
* Long conditions inside the parens of <tt>for</tt>, <tt>foreach</tt>, <tt>foreach_reverse</tt>, <tt>if</tt>, <tt>switch</tt>, <tt>while</tt>, <tt>with</tt> shall be multiply indented proportionally to the depth of parentheses used. Connecting operators shall be at the end of the line. Example:<br />
<br />
<syntaxhighlight lang="D"><br />
if (one_very_very_super_extremely_long_condition &&<br />
another_very_very_super_extremely_long_condition &&<br />
(parenthesized_very_very_super_extremely_long_condition || <br />
extra_indented_because_of_parens_condition))<br />
{<br />
...<br />
}<br />
</syntaxhighlight><br />
<br />
= Whitespace =<br />
<br />
* No whitespace at end of line.<br />
* Use empty lines in functions sparingly. If too many, that's a sign the function is too long.<br />
* There shall not be two or more blank lines in any module.<br />
* An open paren cannot be followed by a space.<br />
* A closed paren cannot be preceded by a space.<br />
* Always insert a space (except if at the end of line) after the following: <tt>catch</tt>, <tt>do</tt>, <tt>else</tt>, <tt>enum</tt>, <tt>finally</tt>, <tt>for</tt>, <tt>foreach</tt>, <tt>foreach_reverse</tt>, <tt>if</tt>, <tt>in</tt>, <tt>is</tt>, <tt>return</tt>, <tt>switch</tt>, <tt>throw</tt>, <tt>try</tt>, <tt>while</tt>, <tt>with</tt>.<br />
* Always insert a space around all binary operators.<br />
* Always insert spaces around <tt>..</tt> (double dot).<br />
* Never insert a space between a unary operator and its argument.<br />
* No space after function name in a function call.<br />
* No space after <tt>cast</tt>, space after the closing paren in a <tt>cast</tt> expression. Example: <tt>cast(int) x</tt>.<br />
* Always insert a space after <tt>,</tt> (comma) except when comma is last in line.<br />
* Always insert either a space or a newline after <tt>;</tt> (semicolon).<br />
<br />
= Comments =<br />
<br />
Use:<br />
<br />
<syntaxhighlight lang="D"><br />
/***<br />
Ddoc comment<br />
more than one line long<br />
*/<br />
</syntaxhighlight><br />
<br />
for multiline Ddoc comments, not <tt>/++ +/</tt> or <tt>///</tt> comments.<br />
<br />
= Naming =<br />
<br />
* Module names are <tt>as_shown_here</tt>: valid D symbols containing only lowercase letters, digits, and underscores.<br />
* Value names are <tt>asShownHere</tt>. <br />
* Type and tempalte names are <tt>AsShownHere</tt>.<br />
* When a symbol may refer to a type and also a value, use the convention for values.<br />
* Generally avoid <tt>CAPS</tt> names even when abbreviations.<br />
<br />
= Parenthesizing =<br />
<br />
* Do not parenthesize single template arguments, i.e. use <tt>isInputRange!Range</tt> not <tt>isInputRange!(Range)</tt>.<br />
* Do not parenthesize the argument in single-argument lambdas, i.e. use <tt>a => a + 1</tt> not <tt>(a) => a + 1</tt>.<br />
* You may assume it's understood <tt>&&</tt> has precedence over <tt>||</tt> so no need to parenthesize <tt>a && b || c</tt>.<br />
* You may assume it's understood <tt></tt> and <tt></tt> have precedence over <tt></tt> and <tt></tt>, so no need to parenthesize around <tt>a + b * c</tt>.<br />
* You may assume it's understood <tt>==</tt>, <tt>!=</tt>, <tt><</tt>, <tt><=</tt>, <tt>></tt>, <tt>>=</tt> have lower precedence than <tt>+</tt>, <tt>-</tt>, <tt>*</tt>, <tt>/</tt>, <tt>%</tt>, so no need to parenthesize around <tt>a + b < c * d</tt>.<br />
* Everything else should be parenthesized in expressions.<br />
* Do not parenthesize <tt>return</tt> expressions, i.e. use <tt>return a + b;</tt> not <tt>return (a + b);</tt><br />
<br />
= Language Features =<br />
<br />
* Sort <tt>import</tt>s alphabetically, whether they're grouped in the same <tt>import</tt> statement or one per <tt>import</tt> statement.</div>Greenifyhttps://wiki.dlang.org/?title=Template:Latest_DMD_Version_Raw&diff=9234Template:Latest DMD Version Raw2018-07-03T22:25:33Z<p>Greenify: bump to 2.081.0</p>
<hr />
<div>2.081.0</div>Greenifyhttps://wiki.dlang.org/?title=Template:Latest_DMD_Version_Raw&diff=9232Template:Latest DMD Version Raw2018-07-03T18:02:19Z<p>Greenify: Bump to 2.080.1</p>
<hr />
<div>2.080.1</div>Greenifyhttps://wiki.dlang.org/?title=DMD_development&diff=9174DMD development2018-05-07T20:43:52Z<p>Greenify: Added a first start at explaining the run.d target</p>
<hr />
<div>Welcome to the D community and thanks for your interest in contributing!<br />
If you need help you can ask questions on <code>#d</code> IRC channel on freenode.org ([https://kiwiirc.com/client/irc.freenode.net/d web interface]) or on [http://forum.dlang.org/ our forum].<br />
<br />
This section explains commonly commands which are commonly used to test the [[DMD|dmd]] D Programming Language compiler.<br />
<br />
== Tests ==<br />
<br />
The testsuite is in <code>~/dlang/dmd/test</code>. Please go to this directory.<br />
<br />
<syntaxhighlight lang=bash><br />
cd ~/dlang/dmd/test<br />
</syntaxhighlight><br />
<br />
The testsuite will always print the exact command used to run a test, s.t. it's easy to single out and reproduce a failure.<br />
<br />
=== Running all tests ===<br />
<br />
<syntaxhighlight lang=bash><br />
./run.d<br />
</syntaxhighlight><br />
<br />
The testsuite runner will automatically use all available threads. You can use e.g. <code>-j1</code> to e.g. use one thread.<br />
<br />
=== Run a specific test category ===<br />
<br />
<syntaxhighlight lang=bash><br />
./run.d fail_compilation<br />
</syntaxhighlight><br />
<br />
=== Run a specific test ===<br />
<br />
<syntaxhighlight lang=bash><br />
./run.d fail_compilation/ice12673.d<br />
</syntaxhighlight><br />
<br />
=== Run a set of specific tests ===<br />
<br />
<syntaxhighlight lang=bash><br />
./run.d fail_compilation/ice*<br />
</syntaxhighlight><br />
<br />
=== Automatically update the OUTPUT text ===<br />
<br />
<syntaxhighlight lang=bash><br />
./run.d fail_compilation AUTO_UPDATE=1<br />
</syntaxhighlight><br />
<br />
A second run might be required.<br />
<br />
=== Remove test states ===<br />
<br />
<syntaxhighlight lang=bash><br />
./run.d clean<br />
</syntaxhighlight><br />
<br />
=== Run unittests within the compiler ===<br />
<br />
There are a few [[Unittest|unittest]] blocks within the compiler and there usage is increasing.<br />
They can be tested with:<br />
<br />
<syntaxhighlight lang=bash><br />
cd ~/dlang/dmd/src<br />
make -f posix.mak unittest<br />
</syntaxhighlight><br />
<br />
<br />
== Old Makefile targets ==<br />
<br />
The following section explains the Makefile rules of the <code>test/Makefile</code>. It has been replaced by <code>test/run.d</code> and is only listed here for users who experience problems during the transition to <pre>run.d</pre><br />
<br />
=== Running the testsuite on Windows ===<br />
<br />
If you run the testsuite on Windows, make sure you install have the following installed:<br />
<br />
* Bash environment (e.g. [https://git-scm.com/download/win Git for Windows] or [https://github.com/golang/go/wiki/WindowsBuild#install-mingwmsys MYS])<br />
* GNUMake (a bit harder to find, see the built binaries of [https://github.com/dlang/installer/pull/311 this PR] or use <code>mingw32-make.exe</code> from a MinGW binary)<br />
<br />
[https://github.com/CyberShadow/Digger Digger] can install this automatically for you.<br />
<br />
If you are looking for an automated way to turn a VirtualBox in a Development Machine, follow [https://gist.github.com/MartinNowak/8270666 these instructions] to create a ssh-accessible Windows box.<br />
<br />
'''Important:''' you need to use GNU <code>make</code> to run the <code>Makefile</code> in <code>test</code> - not the DigitalMars <code>make</code> that is bundled with D's Windows binaries.<br />
DigitalMars make is only required for <code>win32.mak</code> and <code>win64.mak</code>.<br />
<br />
=== Run all tests which haven't been run before ===<br />
<br />
<syntaxhighlight lang=bash><br />
make all -j8<br />
</syntaxhighlight><br />
<br />
If you you now rerun this command, the testsuite won't execute anything:<br />
<br />
<syntaxhighlight lang=bash><br />
make all -j8<br />
</syntaxhighlight><br />
<br />
However, if you modified the compiler, it will only rerun the failing tests as these don't have an output stored.<br />
<br />
=== Remove test states ===<br />
<br />
The test suite stores the results of run tests to allow re-running only the failed tests.<br />
This state is stored in `~/dlang/dmd/test/test_results` and can be removed with:<br />
<br />
<syntaxhighlight lang=bash><br />
make clean<br />
</syntaxhighlight><br />
<br />
=== Always run all tests ===<br />
<br />
<syntaxhighlight lang=bash><br />
make run_tests -j8<br />
</syntaxhighlight><br />
<br />
== Run an individual test ==<br />
<br />
Sometimes it can be helpful to rerun only a single test which tests the fix or feature one is working on:<br />
<br />
<syntaxhighlight lang=bash><br />
make test_results/compilable/test10066.d.out<br />
</syntaxhighlight><br />
<br />
If you want to force re-evaluation of a single test, simply remove the respective file:<br />
<br />
<syntaxhighlight lang=bash><br />
rm test_results/compilable/test10066.d.out<br />
make test_results/compilable/test10066.d.out<br />
</syntaxhighlight><br />
<br />
=== Run quick test ===<br />
<br />
Often one makes a small change and wants to quickly know whether this change completely broke the compiler.<br />
For this, the target <tt>make quick</tt> exists:<br />
<br />
<syntaxhighlight lang=bash><br />
make quick<br />
</syntaxhighlight><br />
<br />
=== Run group of tests ===<br />
<br />
Sometimes it can be useful to run only a subset of tests. The testsuite groups the test in three groups: <tt>runnable</tt>, <tt>compilable</tt> and <tt>failed_compilation</tt>.<br />
They can be run individually:<br />
<br />
<syntaxhighlight lang=bash><br />
make run_runnable_tests: # run just the runnable tests<br />
make run_compilable_tests: # run just the compilable tests<br />
make run_fail_compilation_tests # run just the fail compilation tests<br />
</syntaxhighlight><br />
<br />
<br />
<br />
[[Category:Contribution Guidelines]]</div>Greenifyhttps://wiki.dlang.org/?title=DRuntime_development&diff=9173DRuntime development2018-05-07T15:35:20Z<p>Greenify: add common build targets</p>
<hr />
<div>Welcome to the D community and thanks for your interest in contributing!<br />
If you need help you can ask questions on <code>#d</code> IRC channel on freenode.org ([https://kiwiirc.com/client/irc.freenode.net/d web interface]) or on [http://forum.dlang.org/ our forum].<br />
<br />
== Common build target ===<br />
<br />
=== Build everything ===<br />
<br />
<syntaxhighlight lang=bash><br />
make -f posix.mak -j4<br />
</syntaxhighlight><br />
<br />
=== Build with debug symbols ===<br />
<br />
<syntaxhighlight lang=bash><br />
make -f posix.mak -j4 BUILD=debug<br />
</syntaxhighlight><br />
<br />
=== Build only as a shared library ===<br />
<br />
<syntaxhighlight lang=bash><br />
make -f posix.mak dll -j4<br />
</syntaxhighlight><br />
<br />
=== Build only as a static library ===<br />
<br />
<syntaxhighlight lang=bash><br />
make -f posix.mak lib -j4<br />
</syntaxhighlight><br />
<br />
== Testing ==<br />
<br />
This section explains commonly commands which are commonly used to test the low level runtime library for the D programming language.<br />
<br />
=== Run all tests ===<br />
<br />
The entire druntime testsuite can be run with the <tt>unittest</tt> target:<br />
<br />
<syntaxhighlight lang=bash><br />
make -f posix.mak unittest -j4<br />
</syntaxhighlight><br />
<br />
=== Run an individual test ===<br />
<br />
Sometimes it can be helpful to rerun only a single test which tests the module or feature one is working on.<br />
For example:<br />
<br />
<syntaxhighlight lang=bash><br />
make -f posix.mak test/coverage/.run<br />
</syntaxhighlight><br />
<br />
There are also unittest which have a different behavior when built in <tt>debug</tt>.<br />
To test this, you can set the <tt>BUILD</tt> mode:<br />
<br />
<syntaxhighlight lang=bash><br />
make -f posix.mak test/exceptions/.run BUILD=debug<br />
</syntaxhighlight><br />
<br />
When you execute the <tt>unittest</tt> target, <tt>unittest-debug</tt> and <tt>unittest-release</tt> are tested.<br />
<br />
== Benchmarking ==<br />
<br />
If you are making a bigger change or want to improve the performance of a specific function in druntime, you should run the included benchmark script:<br />
<br />
<syntaxhighlight lang=bash><br />
rdmd benchmark/runbench.d<br />
</syntaxhighlight><br />
<br />
[[Category:Contribution Guidelines]]</div>Greenifyhttps://wiki.dlang.org/?title=Building_under_Windows&diff=9152Building under Windows2018-04-07T14:21:22Z<p>Greenify: Mention Digger as the go-to solution</p>
<hr />
<div>== Automation ==<br />
<br />
[https://github.com/CyberShadow/Digger Digger] can checkout and build any D version automatically for you. Only a D compiler is required. Digger will download all required dependencies by itself.<br />
<br />
<syntaxhighlight lang=bash><br />
dub fetch digger<br />
dub run digger<br />
</syntaxhighlight><br />
<br />
Among many other features, Digger can build older compiler versions or versions with a specific pull request added:<br />
<br />
<syntaxhighlight lang=bash><br />
# build a specific D version<br />
$ dub run digger -- build v2.064.2<br />
<br />
# build for x86-64<br />
$ dub run digger -- build --model=64 v2.064.2<br />
<br />
# build commit from a point in time<br />
$ dub run digger -- build "@ 3 weeks ago"<br />
<br />
# build specified branch from a point in time<br />
$ dub run digger -- build "2.065 @ 3 weeks ago"<br />
<br />
# build with an added pull request<br />
$ dub run digger -- build "master + dmd#123"<br />
</syntaxhighlight><br />
<br />
== Prerequisites ==<br />
<br />
On Windows, you will need [https://git-scm.com/ Git for Windows], [http://dlang.org/download.html#dmd D compiler], [http://ftp.digitalmars.com/dmc.zip the DigitalMars C++ compiler], and, for 64-bit or 32-bit COFF builds, the [https://www.microsoft.com/en-us/download/details.aspx?id=8279 Microsoft Windows SDK].<br />
<br />
Assuming that {{code|make}}, {{code|dmc}} and {{code|dmd}} from digital mars are in your path and your sources are checked out into {{code|C:\D\dmd2\src}} which has the following structure:<br />
<syntaxhighlight lang=dos><br />
C:\D\dmd2\src\dmd<br />
C:\D\dmd2\src\druntime<br />
C:\D\dmd2\src\phobos<br />
C:\D\dmd2\src\tools<br />
</syntaxhighlight><br />
<br />
=== git Configuration ===<br />
<br />
When cloning from the GitHub repositories you may encounter problems if your git configuration on Windows replaces line endings with the Windows variant (i.e. {{code|\r\n}}) instead of leaving it as {{code|\n}}, which is what D repositories require.<br />
<br />
To check your settings, run {{code|git config core.autocrlf}}. If it prints {{code|true}}, set it to {{code|false}} with {{code|git config config --global core.autocrlf false}}.<br />
<br />
== Building D ==<br />
<br />
The following instructions work for win32. May or may not work with win64. This scheme is a suggestion. These instructions should work when building from a clean repository, however, this repository contains autogenerated code that may be left behind after switching branches so running a git clean after switching branches is a good idea:<br />
<br />
<syntaxhighlight lang=dos><br />
git clean -xfd<br />
</syntaxhighlight><br />
<br />
=== Building DMD ===<br />
<br />
To build DMD compiler you should run the following commands ({{code|win32.mak}} file expects that {{code|HOST_DC}} variable is set to {{code|dmd}}):<br />
<syntaxhighlight lang=dos><br />
set DM_HOME=C:\D<br />
cd %DM_HOME%\dmd2\src\dmd\src<br />
set HOST_DC=dmd<br />
make -fwin32.mak release<br />
</syntaxhighlight><br />
<br />
From there, it is suggested to move the built binaries into your {{code|%DM_HOME%\windows\bin}} directory, and add that to your path:<br />
<syntaxhighlight lang=dos><br />
mkdir %DM_HOME%\dmd2\windows\bin<br />
copy *.exe %DM_HOME%\dmd2\windows\bin<br />
set path=%DM_HOME%\dmd2\windows\bin;%path%<br />
</syntaxhighlight><br />
<br />
From there, you have to create a {{code|sc.ini}} in your {{code|%DM_HOME%\dmd2\windows\bin}} directory (where {{code|dmd.exe}} is). It is suggested to just copy paste the one provided in the packaged {{Latest DMD Version Raw}}, instead of writing your own, like:<br />
<syntaxhighlight lang=dos><br />
copy "C:\Program Files\D\dmd2\windows\bin\sc.ini" %DM_HOME%\dmd2\windows\bin<br />
</syntaxhighlight><br />
<br />
=== Building D runtime ===<br />
<br />
Make sure that you are using {{code|dmd}} compiled in previous step because older compiler might not compile the latest druntime code.<br />
<br />
To build D runtime you should run the following commands:<br />
<syntaxhighlight lang=dos><br />
cd %DM_HOME%\dmd2\src\druntime<br />
make -fwin32.mak<br />
</syntaxhighlight><br />
<br />
=== Building Phobos ===<br />
<br />
Make sure that you are using {{code|dmd}} compiled in previous step because older compiler might not compile the latest phobos code.<br />
<br />
To build Phobos you should run the following commands:<br />
<syntaxhighlight lang=dos><br />
cd %DM_HOME%\dmd2\src\phobos<br />
make -fwin32.mak<br />
</syntaxhighlight><br />
<br />
You should copy phobos lib into your {{code|%DM_HOME%\windows\lib}} folder:<br />
<syntaxhighlight lang=dos><br />
mkdir %DM_HOME%\dmd2\windows\lib<br />
copy phobos.lib %DM_HOME%\dmd2\windows\lib<br />
</syntaxhighlight><br />
<br />
=== Building rdmd ===<br />
<br />
Optionally, you can build rdmd from source if you have checked out {{code|tools}} in your sources. Some additional libs might be required for build and can simply be copy pasted from the {{Latest DMD Version Raw}} package without overwriting your {{code|phobos.lib}}.<br />
<br />
To build rdmd you should run the following commands:<br />
<syntaxhighlight lang=dos><br />
cd %DM_HOME%\dmd2\src\tools<br />
make -fwin32.mak rdmd<br />
</syntaxhighlight><br />
<br />
You should copy rdmd into your {{code|%DM_HOME%\windows\bin}} folder:<br />
<syntaxhighlight lang=dos><br />
mkdir %DM_HOME%\dmd2\windows\lib<br />
copy generated\windows\32\*.exe %DM_HOME%\dmd2\windows\bin<br />
</syntaxhighlight><br />
<br />
=== Thirdparty libraries ===<br />
<br />
The last step is getting the additional libs. curl for D2 can be found at the bottom of the download section of dlang.org: [[http://dlang.org/download.html download]].<br />
<br />
Additional libs that are necessary can simply be copy pasted from the {{Latest DMD Version Raw}} package (without overwriting your {{code|phobos.lib}}).<br />
<br />
=== Verifying ===<br />
<br />
The very last step is to verify that everything works by unittesting phobos:<br />
<syntaxhighlight lang=dos><br />
cd %DM_HOME%\dmd2\src\phobos<br />
make -fwin32.mak unittest<br />
</syntaxhighlight><br />
<br />
== Common Windows issues ==<br />
<br />
=== Missing MASM386===<br />
<br />
If when building druntime you get errors about missing MASM386, it's due to a required assembling of a file called '''minit.asm'''. However the druntime repository includes a prebuilt minit.obj file so you shouldn't need to assemble it again. As a workaround for the make error create an empty '''masm386.bat''' file and put it in a directory that's in your '''PATH'''.<br />
<br />
It's also recommended that you use the cmd.exe terminal. Others, like PowerShell, are known to experience issues with legacy tools.<br />
<br />
=== Intermediate files lead to several errors ===<br />
<br />
The three main components (dmd, druntime, phobos) should always be built together with matching versions. The intermediate files generated by a previous build can lead to a failure so it's advisable to run<br />
<br />
<syntaxhighlight lang=dos><br />
make -fwin32.mak clean<br />
</syntaxhighlight><br />
<br />
on each component before starting the process.<br />
<br />
=== Using DigitalMars <code>make</code> for running the test suite ===<br />
<br />
DMD's testsuite can't be run with DigitalMars <code>make</code> - use GNUMake.<br />
Refer to the instructions in [[DMD_development#Running_the_testsuite_on_Windows | Running the test suite on Windows]].<br />
<br />
== Where to go from here ==<br />
<br />
If you want to contribute to a D project, please continue with the [[Starting_as_a_Contributor| starting as a contributor]] guide.<br />
If you want to contribute to Phobos, you may also read the [[Contributing to Phobos|contributing to Phobos guide]].<br />
<br />
[[Category:Windows]]</div>Greenifyhttps://wiki.dlang.org/?title=DMD_development&diff=9151DMD development2018-04-07T14:04:30Z<p>Greenify: /* Running the testsuite on Windows */ add reminder about using GNUmake</p>
<hr />
<div>Welcome to the D community and thanks for your interest in contributing!<br />
If you need help you can ask questions on <code>#d</code> IRC channel on freenode.org ([https://kiwiirc.com/client/irc.freenode.net/d web interface]) or on [http://forum.dlang.org/ our forum].<br />
<br />
This section explains commonly commands which are commonly used to test the [[DMD|dmd]] D Programming Language compiler.<br />
<br />
== Tests ==<br />
<br />
The testsuite is in `~/dlang/dmd/test`. Please go to this directory.<br />
<br />
<syntaxhighlight lang=bash><br />
cd ~/dlang/dmd/test<br />
</syntaxhighlight><br />
<br />
The testsuite will always print the exact command used to run a test, s.t. it's easy to single out and reproduce a failure.<br />
<br />
=== Running the testsuite on Windows ===<br />
<br />
If you run the testsuite on Windows, make sure you install have the following installed:<br />
<br />
* Bash environment (e.g. [https://git-scm.com/download/win Git for Windows] or [https://github.com/golang/go/wiki/WindowsBuild#install-mingwmsys MYS])<br />
* GNUMake (a bit harder to find, see the built binaries of [https://github.com/dlang/installer/pull/311 this PR] or use <code>mingw32-make.exe</code> from a MinGW binary)<br />
<br />
[https://github.com/CyberShadow/Digger Digger] can install this automatically for you.<br />
<br />
If you are looking for an automated way to turn a VirtualBox in a Development Machine, follow [https://gist.github.com/MartinNowak/8270666 these instructions] to create a ssh-accessible Windows box.<br />
<br />
'''Important:''' you need to use GNU <code>make</code> to run the <code>Makefile</code> in <code>test</code> - not the DigitalMars <code>make</code> that is bundled with D's Windows binaries.<br />
DigitalMars make is only required for <code>win32.mak</code> and <code>win64.mak</code>.<br />
<br />
=== Run all tests which haven't been run before ===<br />
<br />
<syntaxhighlight lang=bash><br />
make all -j8<br />
</syntaxhighlight><br />
<br />
If you you now rerun this command, the testsuite won't execute anything:<br />
<br />
<syntaxhighlight lang=bash><br />
make all -j8<br />
</syntaxhighlight><br />
<br />
However, if you modified the compiler, it will only rerun the failing tests as these don't have an output stored.<br />
<br />
=== Remove test states ===<br />
<br />
The test suite stores the results of run tests to allow re-running only the failed tests.<br />
This state is stored in `~/dlang/dmd/test/test_results` and can be removed with:<br />
<br />
<syntaxhighlight lang=bash><br />
make clean<br />
</syntaxhighlight><br />
<br />
=== Always run all tests ===<br />
<br />
<syntaxhighlight lang=bash><br />
make run_tests -j8<br />
</syntaxhighlight><br />
<br />
== Run an individual test ==<br />
<br />
Sometimes it can be helpful to rerun only a single test which tests the fix or feature one is working on:<br />
<br />
<syntaxhighlight lang=bash><br />
make test_results/compilable/test10066.d.out<br />
</syntaxhighlight><br />
<br />
If you want to force re-evaluation of a single test, simply remove the respective file:<br />
<br />
<syntaxhighlight lang=bash><br />
rm test_results/compilable/test10066.d.out<br />
make test_results/compilable/test10066.d.out<br />
</syntaxhighlight><br />
<br />
=== Run quick test ===<br />
<br />
Often one makes a small change and wants to quickly know whether this change completely broke the compiler.<br />
For this, the target <tt>make quick</tt> exists:<br />
<br />
<syntaxhighlight lang=bash><br />
make quick<br />
</syntaxhighlight><br />
<br />
=== Run group of tests ===<br />
<br />
Sometimes it can be useful to run only a subset of tests. The testsuite groups the test in three groups: <tt>runnable</tt>, <tt>compilable</tt> and <tt>failed_compilation</tt>.<br />
They can be run individually:<br />
<br />
<syntaxhighlight lang=bash><br />
make run_runnable_tests: # run just the runnable tests<br />
make run_compilable_tests: # run just the compilable tests<br />
make run_fail_compilation_tests # run just the fail compilation tests<br />
</syntaxhighlight><br />
<br />
=== Run unittests within the compiler ===<br />
<br />
There are a few [[Unittest|unittest]] blocks within the compiler and there usage is increasing.<br />
They can be tested with:<br />
<br />
<syntaxhighlight lang=bash><br />
cd ~/dlang/dmd/src<br />
make -f posix.mak unittest<br />
</syntaxhighlight><br />
<br />
<br />
[[Category:Contribution Guidelines]]</div>Greenifyhttps://wiki.dlang.org/?title=DMD_development&diff=9150DMD development2018-04-07T13:59:07Z<p>Greenify: </p>
<hr />
<div>Welcome to the D community and thanks for your interest in contributing!<br />
If you need help you can ask questions on <code>#d</code> IRC channel on freenode.org ([https://kiwiirc.com/client/irc.freenode.net/d web interface]) or on [http://forum.dlang.org/ our forum].<br />
<br />
This section explains commonly commands which are commonly used to test the [[DMD|dmd]] D Programming Language compiler.<br />
<br />
== Tests ==<br />
<br />
The testsuite is in `~/dlang/dmd/test`. Please go to this directory.<br />
<br />
<syntaxhighlight lang=bash><br />
cd ~/dlang/dmd/test<br />
</syntaxhighlight><br />
<br />
The testsuite will always print the exact command used to run a test, s.t. it's easy to single out and reproduce a failure.<br />
<br />
=== Running the testsuite on Windows ===<br />
<br />
If you run the testsuite on Windows, make sure you install<br />
<br />
- Bash environment (e.g. [https://git-scm.com/download/win Git for Windows] or [https://github.com/golang/go/wiki/WindowsBuild#install-mingwmsys MYS])<br />
- GNUMake (a bit harder to find, see the built binaries of [https://github.com/dlang/installer/pull/311 this PR] or use <pre>mingw32-make.exe</pre> from a MinGW binary)<br />
<br />
[https://github.com/CyberShadow/Digger Digger] can install this automatically for you.<br />
If you are looking for an automated way to turn a VirtualBox in a Development Machine, follow [https://gist.github.com/MartinNowak/8270666 these instructions] to create a ssh-accessible Windows box.<br />
<br />
=== Run all tests which haven't been run before ===<br />
<br />
<syntaxhighlight lang=bash><br />
make all -j8<br />
</syntaxhighlight><br />
<br />
If you you now rerun this command, the testsuite won't execute anything:<br />
<br />
<syntaxhighlight lang=bash><br />
make all -j8<br />
</syntaxhighlight><br />
<br />
However, if you modified the compiler, it will only rerun the failing tests as these don't have an output stored.<br />
<br />
=== Remove test states ===<br />
<br />
The test suite stores the results of run tests to allow re-running only the failed tests.<br />
This state is stored in `~/dlang/dmd/test/test_results` and can be removed with:<br />
<br />
<syntaxhighlight lang=bash><br />
make clean<br />
</syntaxhighlight><br />
<br />
=== Always run all tests ===<br />
<br />
<syntaxhighlight lang=bash><br />
make run_tests -j8<br />
</syntaxhighlight><br />
<br />
== Run an individual test ==<br />
<br />
Sometimes it can be helpful to rerun only a single test which tests the fix or feature one is working on:<br />
<br />
<syntaxhighlight lang=bash><br />
make test_results/compilable/test10066.d.out<br />
</syntaxhighlight><br />
<br />
If you want to force re-evaluation of a single test, simply remove the respective file:<br />
<br />
<syntaxhighlight lang=bash><br />
rm test_results/compilable/test10066.d.out<br />
make test_results/compilable/test10066.d.out<br />
</syntaxhighlight><br />
<br />
=== Run quick test ===<br />
<br />
Often one makes a small change and wants to quickly know whether this change completely broke the compiler.<br />
For this, the target <tt>make quick</tt> exists:<br />
<br />
<syntaxhighlight lang=bash><br />
make quick<br />
</syntaxhighlight><br />
<br />
=== Run group of tests ===<br />
<br />
Sometimes it can be useful to run only a subset of tests. The testsuite groups the test in three groups: <tt>runnable</tt>, <tt>compilable</tt> and <tt>failed_compilation</tt>.<br />
They can be run individually:<br />
<br />
<syntaxhighlight lang=bash><br />
make run_runnable_tests: # run just the runnable tests<br />
make run_compilable_tests: # run just the compilable tests<br />
make run_fail_compilation_tests # run just the fail compilation tests<br />
</syntaxhighlight><br />
<br />
=== Run unittests within the compiler ===<br />
<br />
There are a few [[Unittest|unittest]] blocks within the compiler and there usage is increasing.<br />
They can be tested with:<br />
<br />
<syntaxhighlight lang=bash><br />
cd ~/dlang/dmd/src<br />
make -f posix.mak unittest<br />
</syntaxhighlight><br />
<br />
<br />
[[Category:Contribution Guidelines]]</div>Greenifyhttps://wiki.dlang.org/?title=Template:Latest_DMD_Version_Raw&diff=9074Template:Latest DMD Version Raw2018-03-13T10:49:47Z<p>Greenify: auto bump</p>
<hr />
<div>2.079.0</div>Greenifyhttps://wiki.dlang.org/?title=The_D_Programming_Language&diff=9073The D Programming Language2018-03-13T10:48:00Z<p>Greenify: update "Run code" URL</p>
<hr />
<div>__NOTOC__<br />
<table cellspacing="10" style="width:100%; margin-top:-3em;"><br />
<tr><br />
<td><br />
[http://dlang.org/index.html The D Programming Language] has been said to be "what C++ wanted to be," which is a better C. D is developed with system level programming in mind, but brings to the table modern language design with a simple C-like syntax. For these reasons D makes for a good language choice for both performance code and application development.<br />
<br />
D is rapidly reaching a stable [http://dlang.org/spec.html specification] and [http://dlang.org/download.html implementation].<br />
<br />
[http://www.amazon.com/exec/obidos/ASIN/0321635361/classicempire "The D Programming Language"] by Andrei Alexandrescu is available on Amazon and other locations. <br />
<br />
</td><br />
<td><br />
<table cellspacing="10" style="width:100%;"><br />
<tr><br />
<td style="vertical-align:top;"><br />
== Hello World ==<br />
<br />
<syntaxhighlight lang="D">import std.stdio;<br />
<br />
void main()<br />
{<br />
writeln("Hello, world!");<br />
}</syntaxhighlight><br />
[https://run.dlang.io &#9654; Run code]<br />
<br />
</td><br />
</tr><br />
<tr><br />
<td><br />
[[File:Dconf_logo_2018.jpg|left|448px|link=http://dconf.org/2018/index.html]]<br />
</td><br />
</tr><br />
</table><br />
</td><br />
</tr><br />
<br />
</table><br />
<br />
<table style="width:100%;"><br />
<tr><br />
<td style="vertical-align:top; width:50%;"><br />
<table cellspacing="10" style="width:100%;"><br />
<br />
<tr><br />
<td style="margin:0; margin-top:10px; margin-right:10px; border:1px solid #e9e7d4; border-bottom: 2px solid #c9c7b4; border-top: 1px solid #fff; padding:0 1em 1em 1em; background-color: #f9f7e4; align:right;vertical-align:top;"><br />
== [[File:Icon intro 32.png|link=Why program in D]] Introduction ==<br />
* [[Why program in D|Why program in D?]]<br />
* [https://tour.dlang.org Take the tour]<br />
* [[Getting Started | Getting started]]<br />
* [[First Language | Learning D as a first language]] &mdash; [[Coming From | As a second language]]<br />
* [https://dlang.org/orgs-using-d.html Current uses of D] by organizations and notable projects <br />
</td><br />
</tr><br />
<br />
<tr><br />
<td style="margin:0; margin-top:10px; margin-right:10px; border:1px solid #c0d9e2; border-bottom: 2px solid #a0b9c2; border-top: 1px solid #fff; padding:0 1em 1em 1em; background-color: #e4f4f9; align:right;vertical-align:top;"><br />
<br />
== [[File:Icon community 32.png|link=http://forum.dlang.org]] Community ==<br />
* [http://forum.dlang.org Forums] / [news://news.digitalmars.com Newsgroup] / [http://lists.puremagic.com/mailman/listinfo Mailing lists] (Same content)<br />
* [http://dlang.org/orgs-using-d.html Organizations using D]<br />
* [irc://irc.freenode.net/d IRC: Join <tt>#d</tt>] on [http://freenode.net Freenode]<br />
* [https://dlang.org/blog Official blog]<br />
* [http://planet.dsource.org/ Planet D]<br />
* [http://arsdnet.net/this-week-in-d/ This Week in D]<br />
* [http://www.linkedin.com/groups/D-Developer-Network-3923820 LinkedIn: D Developer Network (DDN)]<br />
* [https://plus.google.com/communities/100033468228217743303 Google+: D Programming Enthusiasts]<br />
* [https://www.facebook.com/dlang.org Facebook: D Programming Language]<br />
* [https://www.xing.com/net/dlang XING - D Programming Language]<br />
* [https://www.meetup.com/topics/dpl/|D User Groups (DUGs)] — [[Events]]<br />
* [http://stackoverflow.com/questions/tagged/d D on StackOverflow]<br />
* [http://rosettacode.org/wiki/Category:D D on RosettaCode] - See solutions of common programming tasks in the D programming language.<br />
* [http://www.reddit.com/r/d_language/ reddit: /r/d_language]<br />
* [[GSOC_2018_Ideas | Google Summer of Code 2018 (GSoC)]]<br />
* [[Research_scholarship | Research Scholarship]]<br />
</td><br />
</tr><br />
<br />
<tr><br />
<td style="margin:0; margin-top:10px; margin-right:10px; border:1px solid #dddddd; border-bottom: 2px solid #bbb; border-top: 1px solid #fff; padding:0 1em 1em 1em; background-color:#f2f2f2; align:right;vertical-align:top;"><br />
<br />
== [[File:Icon dev 32.png|link=Get involved]] Contributing ==<br />
* [[Get involved]]<br />
* [https://trello.com/dlang Trello Board]<br />
* [[DIPs|D Improvement Proposals]] (DIPs)<br />
* [[Review Queue]]<br />
* [[Runtime internals]]<br />
* [[Vision/2018H1|High-level vision for 2018 1nd half]]<br />
* [[Beta Testing]]<br />
* [[Language_issues | Language Issues]]<br />
* [[Language_design_discussions | Language Design Discussions]]<br />
* [[Wish_list | Wish list and action list]]<br />
* [https://www.bountysource.com/teams/d/issues Bounties]<br />
</tr><br />
<br />
</table><br />
</td><br />
<td style="vertical-align:top; width:50%;"><br />
<table cellspacing="10" style="width:100%;"><br />
<br />
<tr><br />
<td style="margin:0; margin-top:10px; margin-right:10px; border:1px solid #d0e2c0; border-bottom: 2px solid #b0c2a0; border-top: 1px solid #fff; padding:0 1em 1em 1em; background-color: #eaf7df; align:right;vertical-align:top;"><br />
<br />
== [[File:Icon docs 32.png|link=http://dlang.org/spec.html]] Documentation ==<br />
* [http://dlang.org/spec.html D Language Specification]<br />
* [http://dlang.org/phobos/index.html Standard Library Reference (Phobos)]<br />
<!--* [http://ddocs.org Third-party library documentation]--><br />
* [[Commonly-Used Acronyms]]<br />
* [[Books|Books (Online and printed)]]<br />
* [[Articles]] — [[Tutorials]] — [[Cookbook]]<br />
* [[ResearchPapers| Research papers]]<br />
* [[Language Designs Explained]]<br />
* [[Language History and Future]]<br />
</td><br />
</tr><br />
<br />
<tr><br />
<td style="margin:0; margin-top:10px; margin-right:10px; border:1px solid #e9e7d4; border-bottom: 2px solid #c9c7b4; border-top: 1px solid #fff; padding:0 1em 1em 1em; background-color: #f1f7df; align:right;vertical-align:top;"><br />
<br />
== [[File:Icon tools 32.png|link=Compilers]] Compilers &amp; Tools ==<br />
* [[Compilers | D Compilers]] ([[DMD]], [[GDC]], [[LDC]])<br />
* [[Experimental compilers]] ([[SDC]], [[DIL]])<br />
* [[IDEs]] &mdash; [[Editors | Text Editors ]]<br />
* [[Development tools]]<br />
* [[Lexers Parsers | Lexers, Parsers]]<br />
* [[Build Tools|Build tools]]<br />
* [[Debuggers]] <br />
* [[Continuous Integration | Continuous Integration services]]<br />
* [[Online compilers|Online compilers and disassemblers]]<br />
</td><br />
</tr><br />
<br />
<tr><br />
<td style="margin:0; margin-top:10px; margin-right:10px; border:1px solid #dde0e9; border-bottom: 2px solid #bdc0c9; border-top: 1px solid #fff; padding:0 1em 1em 1em; background-color: #edf0f9; align:right;vertical-align:top;"><br />
<br />
== [[File:Icon resources 32.png|link=Libraries and Frameworks]] Resources & Directory ==<br />
* [https://code.dlang.org/ Official package repository]<br />
* [[Libraries and Frameworks]]<br />
* [[Open Source Projects]]<br />
* [[Bindings]]<br />
* [[Videos]]<br />
* [[Websites]] ([[Websites/Blogs|Blogs]])<br />
* [[People]] ([[People/Github|On Github]])<br />
* [[BenchMarks]]<br />
* [[Art]] (Logos, etc...)<br />
</td><br />
</tr><br />
<br />
<tr><br />
<td style="margin:0; margin-top:10px; margin-right:10px; border:1px solid #eee; border-top: 2px solid #ccc; border-bottom: 1px solid #f6f6f6; padding:0 1em 1em 1em; background-color:#fff; align:right;vertical-align:top;"><br />
<br />
== [[File:Icon meta 32.png|link=Meta]] <span style="color:#999;">Meta</span> ==<br />
* [[DWiki:General discussion|Discuss this wiki]] <span style="color:#999;">(Criticise, suggest improvements etc.)</span><br />
* [[DWiki:Community portal|DWiki Community Portal]]<br />
</td><br />
</tr><br />
<br />
</table><br />
</td><br />
</tr><br />
</table><br />
<br />
{{:DMD Widget}}</div>Greenifyhttps://wiki.dlang.org/?title=The_D_Programming_Language&diff=9072The D Programming Language2018-03-13T10:34:29Z<p>Greenify: /* link=http://forum.dlang.org Community */ add dblog to community</p>
<hr />
<div>__NOTOC__<br />
<table cellspacing="10" style="width:100%; margin-top:-3em;"><br />
<tr><br />
<td><br />
[http://dlang.org/index.html The D Programming Language] has been said to be "what C++ wanted to be," which is a better C. D is developed with system level programming in mind, but brings to the table modern language design with a simple C-like syntax. For these reasons D makes for a good language choice for both performance code and application development.<br />
<br />
D is rapidly reaching a stable [http://dlang.org/spec.html specification] and [http://dlang.org/download.html implementation].<br />
<br />
[http://www.amazon.com/exec/obidos/ASIN/0321635361/classicempire "The D Programming Language"] by Andrei Alexandrescu is available on Amazon and other locations. <br />
<br />
</td><br />
<td><br />
<table cellspacing="10" style="width:100%;"><br />
<tr><br />
<td style="vertical-align:top;"><br />
== Hello World ==<br />
<br />
<syntaxhighlight lang="D">import std.stdio;<br />
<br />
void main()<br />
{<br />
writeln("Hello, world!");<br />
}</syntaxhighlight><br />
[http://dpaste.dzfl.pl/97ec8a2c &#9654; Run code]<br />
<br />
</td><br />
</tr><br />
<tr><br />
<td><br />
[[File:Dconf_logo_2018.jpg|left|448px|link=http://dconf.org/2018/index.html]]<br />
</td><br />
</tr><br />
</table><br />
</td><br />
</tr><br />
<br />
</table><br />
<br />
<table style="width:100%;"><br />
<tr><br />
<td style="vertical-align:top; width:50%;"><br />
<table cellspacing="10" style="width:100%;"><br />
<br />
<tr><br />
<td style="margin:0; margin-top:10px; margin-right:10px; border:1px solid #e9e7d4; border-bottom: 2px solid #c9c7b4; border-top: 1px solid #fff; padding:0 1em 1em 1em; background-color: #f9f7e4; align:right;vertical-align:top;"><br />
== [[File:Icon intro 32.png|link=Why program in D]] Introduction ==<br />
* [[Why program in D|Why program in D?]]<br />
* [https://tour.dlang.org Take the tour]<br />
* [[Getting Started | Getting started]]<br />
* [[First Language | Learning D as a first language]] &mdash; [[Coming From | As a second language]]<br />
* [https://dlang.org/orgs-using-d.html Current uses of D] by organizations and notable projects <br />
</td><br />
</tr><br />
<br />
<tr><br />
<td style="margin:0; margin-top:10px; margin-right:10px; border:1px solid #c0d9e2; border-bottom: 2px solid #a0b9c2; border-top: 1px solid #fff; padding:0 1em 1em 1em; background-color: #e4f4f9; align:right;vertical-align:top;"><br />
<br />
== [[File:Icon community 32.png|link=http://forum.dlang.org]] Community ==<br />
* [http://forum.dlang.org Forums] / [news://news.digitalmars.com Newsgroup] / [http://lists.puremagic.com/mailman/listinfo Mailing lists] (Same content)<br />
* [http://dlang.org/orgs-using-d.html Organizations using D]<br />
* [irc://irc.freenode.net/d IRC: Join <tt>#d</tt>] on [http://freenode.net Freenode]<br />
* [https://dlang.org/blog Official blog]<br />
* [http://planet.dsource.org/ Planet D]<br />
* [http://arsdnet.net/this-week-in-d/ This Week in D]<br />
* [http://www.linkedin.com/groups/D-Developer-Network-3923820 LinkedIn: D Developer Network (DDN)]<br />
* [https://plus.google.com/communities/100033468228217743303 Google+: D Programming Enthusiasts]<br />
* [https://www.facebook.com/dlang.org Facebook: D Programming Language]<br />
* [https://www.xing.com/net/dlang XING - D Programming Language]<br />
* [https://www.meetup.com/topics/dpl/|D User Groups (DUGs)] — [[Events]]<br />
* [http://stackoverflow.com/questions/tagged/d D on StackOverflow]<br />
* [http://rosettacode.org/wiki/Category:D D on RosettaCode] - See solutions of common programming tasks in the D programming language.<br />
* [http://www.reddit.com/r/d_language/ reddit: /r/d_language]<br />
* [[GSOC_2018_Ideas | Google Summer of Code 2018 (GSoC)]]<br />
* [[Research_scholarship | Research Scholarship]]<br />
</td><br />
</tr><br />
<br />
<tr><br />
<td style="margin:0; margin-top:10px; margin-right:10px; border:1px solid #dddddd; border-bottom: 2px solid #bbb; border-top: 1px solid #fff; padding:0 1em 1em 1em; background-color:#f2f2f2; align:right;vertical-align:top;"><br />
<br />
== [[File:Icon dev 32.png|link=Get involved]] Contributing ==<br />
* [[Get involved]]<br />
* [https://trello.com/dlang Trello Board]<br />
* [[DIPs|D Improvement Proposals]] (DIPs)<br />
* [[Review Queue]]<br />
* [[Runtime internals]]<br />
* [[Vision/2018H1|High-level vision for 2018 1nd half]]<br />
* [[Beta Testing]]<br />
* [[Language_issues | Language Issues]]<br />
* [[Language_design_discussions | Language Design Discussions]]<br />
* [[Wish_list | Wish list and action list]]<br />
* [https://www.bountysource.com/teams/d/issues Bounties]<br />
</tr><br />
<br />
</table><br />
</td><br />
<td style="vertical-align:top; width:50%;"><br />
<table cellspacing="10" style="width:100%;"><br />
<br />
<tr><br />
<td style="margin:0; margin-top:10px; margin-right:10px; border:1px solid #d0e2c0; border-bottom: 2px solid #b0c2a0; border-top: 1px solid #fff; padding:0 1em 1em 1em; background-color: #eaf7df; align:right;vertical-align:top;"><br />
<br />
== [[File:Icon docs 32.png|link=http://dlang.org/spec.html]] Documentation ==<br />
* [http://dlang.org/spec.html D Language Specification]<br />
* [http://dlang.org/phobos/index.html Standard Library Reference (Phobos)]<br />
<!--* [http://ddocs.org Third-party library documentation]--><br />
* [[Commonly-Used Acronyms]]<br />
* [[Books|Books (Online and printed)]]<br />
* [[Articles]] — [[Tutorials]] — [[Cookbook]]<br />
* [[ResearchPapers| Research papers]]<br />
* [[Language Designs Explained]]<br />
* [[Language History and Future]]<br />
</td><br />
</tr><br />
<br />
<tr><br />
<td style="margin:0; margin-top:10px; margin-right:10px; border:1px solid #e9e7d4; border-bottom: 2px solid #c9c7b4; border-top: 1px solid #fff; padding:0 1em 1em 1em; background-color: #f1f7df; align:right;vertical-align:top;"><br />
<br />
== [[File:Icon tools 32.png|link=Compilers]] Compilers &amp; Tools ==<br />
* [[Compilers | D Compilers]] ([[DMD]], [[GDC]], [[LDC]])<br />
* [[Experimental compilers]] ([[SDC]], [[DIL]])<br />
* [[IDEs]] &mdash; [[Editors | Text Editors ]]<br />
* [[Development tools]]<br />
* [[Lexers Parsers | Lexers, Parsers]]<br />
* [[Build Tools|Build tools]]<br />
* [[Debuggers]] <br />
* [[Continuous Integration | Continuous Integration services]]<br />
* [[Online compilers|Online compilers and disassemblers]]<br />
</td><br />
</tr><br />
<br />
<tr><br />
<td style="margin:0; margin-top:10px; margin-right:10px; border:1px solid #dde0e9; border-bottom: 2px solid #bdc0c9; border-top: 1px solid #fff; padding:0 1em 1em 1em; background-color: #edf0f9; align:right;vertical-align:top;"><br />
<br />
== [[File:Icon resources 32.png|link=Libraries and Frameworks]] Resources & Directory ==<br />
* [https://code.dlang.org/ Official package repository]<br />
* [[Libraries and Frameworks]]<br />
* [[Open Source Projects]]<br />
* [[Bindings]]<br />
* [[Videos]]<br />
* [[Websites]] ([[Websites/Blogs|Blogs]])<br />
* [[People]] ([[People/Github|On Github]])<br />
* [[BenchMarks]]<br />
* [[Art]] (Logos, etc...)<br />
</td><br />
</tr><br />
<br />
<tr><br />
<td style="margin:0; margin-top:10px; margin-right:10px; border:1px solid #eee; border-top: 2px solid #ccc; border-bottom: 1px solid #f6f6f6; padding:0 1em 1em 1em; background-color:#fff; align:right;vertical-align:top;"><br />
<br />
== [[File:Icon meta 32.png|link=Meta]] <span style="color:#999;">Meta</span> ==<br />
* [[DWiki:General discussion|Discuss this wiki]] <span style="color:#999;">(Criticise, suggest improvements etc.)</span><br />
* [[DWiki:Community portal|DWiki Community Portal]]<br />
</td><br />
</tr><br />
<br />
</table><br />
</td><br />
</tr><br />
</table><br />
<br />
{{:DMD Widget}}</div>Greenifyhttps://wiki.dlang.org/?title=The_D_Programming_Language&diff=9071The D Programming Language2018-03-12T20:23:12Z<p>Greenify: /* link=Get involved Contributing */ update high-level vision link</p>
<hr />
<div>__NOTOC__<br />
<table cellspacing="10" style="width:100%; margin-top:-3em;"><br />
<tr><br />
<td><br />
[http://dlang.org/index.html The D Programming Language] has been said to be "what C++ wanted to be," which is a better C. D is developed with system level programming in mind, but brings to the table modern language design with a simple C-like syntax. For these reasons D makes for a good language choice for both performance code and application development.<br />
<br />
D is rapidly reaching a stable [http://dlang.org/spec.html specification] and [http://dlang.org/download.html implementation].<br />
<br />
[http://www.amazon.com/exec/obidos/ASIN/0321635361/classicempire "The D Programming Language"] by Andrei Alexandrescu is available on Amazon and other locations. <br />
<br />
</td><br />
<td><br />
<table cellspacing="10" style="width:100%;"><br />
<tr><br />
<td style="vertical-align:top;"><br />
== Hello World ==<br />
<br />
<syntaxhighlight lang="D">import std.stdio;<br />
<br />
void main()<br />
{<br />
writeln("Hello, world!");<br />
}</syntaxhighlight><br />
[http://dpaste.dzfl.pl/97ec8a2c &#9654; Run code]<br />
<br />
</td><br />
</tr><br />
<tr><br />
<td><br />
[[File:Dconf_logo_2018.jpg|left|448px|link=http://dconf.org/2018/index.html]]<br />
</td><br />
</tr><br />
</table><br />
</td><br />
</tr><br />
<br />
</table><br />
<br />
<table style="width:100%;"><br />
<tr><br />
<td style="vertical-align:top; width:50%;"><br />
<table cellspacing="10" style="width:100%;"><br />
<br />
<tr><br />
<td style="margin:0; margin-top:10px; margin-right:10px; border:1px solid #e9e7d4; border-bottom: 2px solid #c9c7b4; border-top: 1px solid #fff; padding:0 1em 1em 1em; background-color: #f9f7e4; align:right;vertical-align:top;"><br />
== [[File:Icon intro 32.png|link=Why program in D]] Introduction ==<br />
* [[Why program in D|Why program in D?]]<br />
* [https://tour.dlang.org Take the tour]<br />
* [[Getting Started | Getting started]]<br />
* [[First Language | Learning D as a first language]] &mdash; [[Coming From | As a second language]]<br />
* [https://dlang.org/orgs-using-d.html Current uses of D] by organizations and notable projects <br />
</td><br />
</tr><br />
<br />
<tr><br />
<td style="margin:0; margin-top:10px; margin-right:10px; border:1px solid #c0d9e2; border-bottom: 2px solid #a0b9c2; border-top: 1px solid #fff; padding:0 1em 1em 1em; background-color: #e4f4f9; align:right;vertical-align:top;"><br />
<br />
== [[File:Icon community 32.png|link=http://forum.dlang.org]] Community ==<br />
* [http://forum.dlang.org Forums] / [news://news.digitalmars.com Newsgroup] / [http://lists.puremagic.com/mailman/listinfo Mailing lists] (Same content)<br />
* [http://dlang.org/orgs-using-d.html Organizations using D]<br />
* [irc://irc.freenode.net/d IRC: Join <tt>#d</tt>] on [http://freenode.net Freenode]<br />
* [http://planet.dsource.org/ Planet D]<br />
* [http://arsdnet.net/this-week-in-d/ This Week in D]<br />
* [http://www.linkedin.com/groups/D-Developer-Network-3923820 LinkedIn: D Developer Network (DDN)]<br />
* [https://plus.google.com/communities/100033468228217743303 Google+: D Programming Enthusiasts]<br />
* [https://www.facebook.com/dlang.org Facebook: D Programming Language]<br />
* [https://www.xing.com/net/dlang XING - D Programming Language]<br />
* [https://www.meetup.com/topics/dpl/|D User Groups (DUGs)] — [[Events]]<br />
* [http://stackoverflow.com/questions/tagged/d D on StackOverflow]<br />
* [http://rosettacode.org/wiki/Category:D D on RosettaCode] - See solutions of common programming tasks in the D programming language.<br />
* [http://www.reddit.com/r/d_language/ reddit: /r/d_language]<br />
* [[GSOC_2018_Ideas | Google Summer of Code 2018 (GSoC)]]<br />
* [[Research_scholarship | Research Scholarship]]<br />
</td><br />
</tr><br />
<br />
<tr><br />
<td style="margin:0; margin-top:10px; margin-right:10px; border:1px solid #dddddd; border-bottom: 2px solid #bbb; border-top: 1px solid #fff; padding:0 1em 1em 1em; background-color:#f2f2f2; align:right;vertical-align:top;"><br />
<br />
== [[File:Icon dev 32.png|link=Get involved]] Contributing ==<br />
* [[Get involved]]<br />
* [https://trello.com/dlang Trello Board]<br />
* [[DIPs|D Improvement Proposals]] (DIPs)<br />
* [[Review Queue]]<br />
* [[Runtime internals]]<br />
* [[Vision/2018H1|High-level vision for 2018 1nd half]]<br />
* [[Beta Testing]]<br />
* [[Language_issues | Language Issues]]<br />
* [[Language_design_discussions | Language Design Discussions]]<br />
* [[Wish_list | Wish list and action list]]<br />
* [https://www.bountysource.com/teams/d/issues Bounties]<br />
</tr><br />
<br />
</table><br />
</td><br />
<td style="vertical-align:top; width:50%;"><br />
<table cellspacing="10" style="width:100%;"><br />
<br />
<tr><br />
<td style="margin:0; margin-top:10px; margin-right:10px; border:1px solid #d0e2c0; border-bottom: 2px solid #b0c2a0; border-top: 1px solid #fff; padding:0 1em 1em 1em; background-color: #eaf7df; align:right;vertical-align:top;"><br />
<br />
== [[File:Icon docs 32.png|link=http://dlang.org/spec.html]] Documentation ==<br />
* [http://dlang.org/spec.html D Language Specification]<br />
* [http://dlang.org/phobos/index.html Standard Library Reference (Phobos)]<br />
<!--* [http://ddocs.org Third-party library documentation]--><br />
* [[Commonly-Used Acronyms]]<br />
* [[Books|Books (Online and printed)]]<br />
* [[Articles]] — [[Tutorials]] — [[Cookbook]]<br />
* [[ResearchPapers| Research papers]]<br />
* [[Language Designs Explained]]<br />
* [[Language History and Future]]<br />
</td><br />
</tr><br />
<br />
<tr><br />
<td style="margin:0; margin-top:10px; margin-right:10px; border:1px solid #e9e7d4; border-bottom: 2px solid #c9c7b4; border-top: 1px solid #fff; padding:0 1em 1em 1em; background-color: #f1f7df; align:right;vertical-align:top;"><br />
<br />
== [[File:Icon tools 32.png|link=Compilers]] Compilers &amp; Tools ==<br />
* [[Compilers | D Compilers]] ([[DMD]], [[GDC]], [[LDC]])<br />
* [[Experimental compilers]] ([[SDC]], [[DIL]])<br />
* [[IDEs]] &mdash; [[Editors | Text Editors ]]<br />
* [[Development tools]]<br />
* [[Lexers Parsers | Lexers, Parsers]]<br />
* [[Build Tools|Build tools]]<br />
* [[Debuggers]] <br />
* [[Continuous Integration | Continuous Integration services]]<br />
* [[Online compilers|Online compilers and disassemblers]]<br />
</td><br />
</tr><br />
<br />
<tr><br />
<td style="margin:0; margin-top:10px; margin-right:10px; border:1px solid #dde0e9; border-bottom: 2px solid #bdc0c9; border-top: 1px solid #fff; padding:0 1em 1em 1em; background-color: #edf0f9; align:right;vertical-align:top;"><br />
<br />
== [[File:Icon resources 32.png|link=Libraries and Frameworks]] Resources & Directory ==<br />
* [https://code.dlang.org/ Official package repository]<br />
* [[Libraries and Frameworks]]<br />
* [[Open Source Projects]]<br />
* [[Bindings]]<br />
* [[Videos]]<br />
* [[Websites]] ([[Websites/Blogs|Blogs]])<br />
* [[People]] ([[People/Github|On Github]])<br />
* [[BenchMarks]]<br />
* [[Art]] (Logos, etc...)<br />
</td><br />
</tr><br />
<br />
<tr><br />
<td style="margin:0; margin-top:10px; margin-right:10px; border:1px solid #eee; border-top: 2px solid #ccc; border-bottom: 1px solid #f6f6f6; padding:0 1em 1em 1em; background-color:#fff; align:right;vertical-align:top;"><br />
<br />
== [[File:Icon meta 32.png|link=Meta]] <span style="color:#999;">Meta</span> ==<br />
* [[DWiki:General discussion|Discuss this wiki]] <span style="color:#999;">(Criticise, suggest improvements etc.)</span><br />
* [[DWiki:Community portal|DWiki Community Portal]]<br />
</td><br />
</tr><br />
<br />
</table><br />
</td><br />
</tr><br />
</table><br />
<br />
{{:DMD Widget}}</div>Greenifyhttps://wiki.dlang.org/?title=DMD_development&diff=9070DMD development2018-03-12T06:41:47Z<p>Greenify: fix formatting</p>
<hr />
<div>Welcome to the D community and thanks for your interest in contributing!<br />
If you need help you can ask questions on <code>#d</code> IRC channel on freenode.org ([https://kiwiirc.com/client/irc.freenode.net/d web interface]) or on [http://forum.dlang.org/ our forum].<br />
<br />
This section explains commonly commands which are commonly used to test the [[DMD|dmd]] D Programming Language compiler.<br />
<br />
== Tests ==<br />
<br />
The testsuite is in `~/dlang/dmd/test`. Please go to this directory.<br />
<br />
<syntaxhighlight lang=bash><br />
cd ~/dlang/dmd/test<br />
</syntaxhighlight><br />
<br />
The testsuite will always print the exact command used to run a test, s.t. it's easy to single out and reproduce a failure.<br />
<br />
=== Running the testsuite on Windows ===<br />
<br />
If you run the testsuite on Windows, make sure to use GNU make (and not DigitalMars make). You can grab GNU make [https://ftp.gnu.org/gnu/make/ here].<br />
It's often easier to use the [https://docs.microsoft.com/en-us/windows/wsl/about Linux Subsystem], a Posix machine or the CIs at dlang/dmd which will automatically test your pull request on all supported platforms.<br />
<br />
=== Run all tests which haven't been run before ===<br />
<br />
<syntaxhighlight lang=bash><br />
make all -j8<br />
</syntaxhighlight><br />
<br />
If you you now rerun this command, the testsuite won't execute anything:<br />
<br />
<syntaxhighlight lang=bash><br />
make all -j8<br />
</syntaxhighlight><br />
<br />
However, if you modified the compiler, it will only rerun the failing tests as these don't have an output stored.<br />
<br />
=== Remove test states ===<br />
<br />
The test suite stores the results of run tests to allow re-running only the failed tests.<br />
This state is stored in `~/dlang/dmd/test/test_results` and can be removed with:<br />
<br />
<syntaxhighlight lang=bash><br />
make clean<br />
</syntaxhighlight><br />
<br />
=== Always run all tests ===<br />
<br />
<syntaxhighlight lang=bash><br />
make run_tests -j8<br />
</syntaxhighlight><br />
<br />
== Run an individual test ==<br />
<br />
Sometimes it can be helpful to rerun only a single test which tests the fix or feature one is working on:<br />
<br />
<syntaxhighlight lang=bash><br />
make test_results/compilable/test10066.d.out<br />
</syntaxhighlight><br />
<br />
If you want to force re-evaluation of a single test, simply remove the respective file:<br />
<br />
<syntaxhighlight lang=bash><br />
rm test_results/compilable/test10066.d.out<br />
make test_results/compilable/test10066.d.out<br />
</syntaxhighlight><br />
<br />
=== Run quick test ===<br />
<br />
Often one makes a small change and wants to quickly know whether this change completely broke the compiler.<br />
For this, the target <tt>make quick</tt> exists:<br />
<br />
<syntaxhighlight lang=bash><br />
make quick<br />
</syntaxhighlight><br />
<br />
=== Run group of tests ===<br />
<br />
Sometimes it can be useful to run only a subset of tests. The testsuite groups the test in three groups: <tt>runnable</tt>, <tt>compilable</tt> and <tt>failed_compilation</tt>.<br />
They can be run individually:<br />
<br />
<syntaxhighlight lang=bash><br />
make run_runnable_tests: # run just the runnable tests<br />
make run_compilable_tests: # run just the compilable tests<br />
make run_fail_compilation_tests # run just the fail compilation tests<br />
</syntaxhighlight><br />
<br />
=== Run unittests within the compiler ===<br />
<br />
There are a few [[Unittest|unittest]] blocks within the compiler and there usage is increasing.<br />
They can be tested with:<br />
<br />
<syntaxhighlight lang=bash><br />
cd ~/dlang/dmd/src<br />
make -f posix.mak unittest<br />
</syntaxhighlight><br />
<br />
<br />
[[Category:Contribution Guidelines]]</div>Greenifyhttps://wiki.dlang.org/?title=DMD_development&diff=9069DMD development2018-03-12T06:41:19Z<p>Greenify: Add a reminder about using GNUmake (and not DigitalMars make) for the testsuite</p>
<hr />
<div>Welcome to the D community and thanks for your interest in contributing!<br />
If you need help you can ask questions on <code>#d</code> IRC channel on freenode.org ([https://kiwiirc.com/client/irc.freenode.net/d web interface]) or on [http://forum.dlang.org/ our forum].<br />
<br />
This section explains commonly commands which are commonly used to test the [[DMD|dmd]] D Programming Language compiler.<br />
<br />
== Tests ==<br />
<br />
The testsuite is in `~/dlang/dmd/test`. Please go to this directory.<br />
<br />
<syntaxhighlight lang=bash><br />
cd ~/dlang/dmd/test<br />
</syntaxhighlight><br />
<br />
The testsuite will always print the exact command used to run a test, s.t. it's easy to single out and reproduce a failure.<br />
<br />
=== Running the testsuite on Windows<br />
<br />
If you run the testsuite on Windows, make sure to use GNU make (and not DigitalMars make). You can grab GNU make [https://ftp.gnu.org/gnu/make/ here].<br />
It's often easier to use the [https://docs.microsoft.com/en-us/windows/wsl/about Linux Subsystem], a Posix machine or the CIs at dlang/dmd which will automatically test your pull request on all supported platforms.<br />
<br />
=== Run all tests which haven't been run before ===<br />
<br />
<syntaxhighlight lang=bash><br />
make all -j8<br />
</syntaxhighlight><br />
<br />
If you you now rerun this command, the testsuite won't execute anything:<br />
<br />
<syntaxhighlight lang=bash><br />
make all -j8<br />
</syntaxhighlight><br />
<br />
However, if you modified the compiler, it will only rerun the failing tests as these don't have an output stored.<br />
<br />
=== Remove test states ===<br />
<br />
The test suite stores the results of run tests to allow re-running only the failed tests.<br />
This state is stored in `~/dlang/dmd/test/test_results` and can be removed with:<br />
<br />
<syntaxhighlight lang=bash><br />
make clean<br />
</syntaxhighlight><br />
<br />
=== Always run all tests ===<br />
<br />
<syntaxhighlight lang=bash><br />
make run_tests -j8<br />
</syntaxhighlight><br />
<br />
== Run an individual test ==<br />
<br />
Sometimes it can be helpful to rerun only a single test which tests the fix or feature one is working on:<br />
<br />
<syntaxhighlight lang=bash><br />
make test_results/compilable/test10066.d.out<br />
</syntaxhighlight><br />
<br />
If you want to force re-evaluation of a single test, simply remove the respective file:<br />
<br />
<syntaxhighlight lang=bash><br />
rm test_results/compilable/test10066.d.out<br />
make test_results/compilable/test10066.d.out<br />
</syntaxhighlight><br />
<br />
=== Run quick test ===<br />
<br />
Often one makes a small change and wants to quickly know whether this change completely broke the compiler.<br />
For this, the target <tt>make quick</tt> exists:<br />
<br />
<syntaxhighlight lang=bash><br />
make quick<br />
</syntaxhighlight><br />
<br />
=== Run group of tests ===<br />
<br />
Sometimes it can be useful to run only a subset of tests. The testsuite groups the test in three groups: <tt>runnable</tt>, <tt>compilable</tt> and <tt>failed_compilation</tt>.<br />
They can be run individually:<br />
<br />
<syntaxhighlight lang=bash><br />
make run_runnable_tests: # run just the runnable tests<br />
make run_compilable_tests: # run just the compilable tests<br />
make run_fail_compilation_tests # run just the fail compilation tests<br />
</syntaxhighlight><br />
<br />
=== Run unittests within the compiler ===<br />
<br />
There are a few [[Unittest|unittest]] blocks within the compiler and there usage is increasing.<br />
They can be tested with:<br />
<br />
<syntaxhighlight lang=bash><br />
cd ~/dlang/dmd/src<br />
make -f posix.mak unittest<br />
</syntaxhighlight><br />
<br />
<br />
[[Category:Contribution Guidelines]]</div>Greenifyhttps://wiki.dlang.org/?title=Template:Latest_DMD_Version_Raw&diff=9022Template:Latest DMD Version Raw2018-02-24T23:52:00Z<p>Greenify: auto bump</p>
<hr />
<div>2.078.3</div>Greenifyhttps://wiki.dlang.org/?title=Online_compilers&diff=8987Online compilers2018-02-13T20:45:52Z<p>Greenify: update run.dlang.io - it supports disassembly</p>
<hr />
<div>List of known online D compilers / disassemblers:<br />
<br />
{| class="wikitable" style="text-align:center" |<br />
! Name || DMD || DMD-nightly || GDC || LDC || Disassembly || Runs code<br />
|-<br />
| [https://run.dlang.io/ run.dlang.io] || {{yes}} || {{yes}} || - || {{yes}} || {{yes}} || {{yes}}<br />
|-<br />
| [https://dpaste.dzfl.pl/ DPaste] || {{yes}} || - || - || {{yes}} || {{yes}} || {{yes}}<br />
|-<br />
| [http://asm.dlang.org/ asm.dlang.org] || {{yes}} || {{yes}} || - || - || {{yes}} || {{no}}<br />
|-<br />
| [https://explore.dgnu.org/ explore.dgnu.org] || - || - || {{yes}} || - || {{yes}} || {{no}}<br />
|-<br />
| [https://d.godbolt.org/ d.godbolt.org] || - || - || {{yes}} || {{yes}} || {{yes}} || {{no}}<br />
|-<br />
| [https://paiza.IO/ paiza.IO] || - || - || - || {{yes}} || {{no}} || {{yes}}<br />
|-<br />
| [http://melpon.org/wandbox/ Wandbox (GDC)] || {{yes}} || - || {{yes}} || - || {{no}} || {{yes}}<br />
|-<br />
| [http://www.tutorialspoint.com/compile_d_online.php tutorialspoint.com] || {{yes}} || - || - || - || {{no}} || {{yes}}<br />
|-<br />
| [http://codepad.org/ codepad.org] || {{yes}} || - || - || - || {{no}} || {{yes}}<br />
|-<br />
| [http://ideone.com/ ideone.com] || {{yes}} || - || {{yes}} || {{yes}} || {{no}} || {{yes}}<br />
|-<br />
| [https://glot.io/new/d glot.io] || {{yes}} || - || - || - || {{no}} || {{yes}}<br />
|}</div>Greenify