|
| 1 | +--- |
| 2 | +layout: page |
| 3 | +title: "Google Summer of Code 2017 Scala Projects" |
| 4 | +--- |
| 5 | + |
| 6 | +*This page is work in progress for the upcoming GSOC 2017* |
| 7 | + |
| 8 | +## Google Summer of Code |
| 9 | + |
| 10 | +**This year the Scala team applied again for the [Google Summer of |
| 11 | + Code](https://developers.google.com/open-source/gsoc/) |
| 12 | + program to work with enthusiastic students on challenging Scala |
| 13 | + projects** |
| 14 | + |
| 15 | +This page provides a list of project ideas. The suggestions are only a |
| 16 | +starting point for students. We expect students to explore the ideas |
| 17 | +in much more detail, preferably with their own suggestions and |
| 18 | +detailed plans on how they want to proceed. Don't feel constrained by |
| 19 | +the provided list! We welcome any of your own challenging ideas, but |
| 20 | +make sure that the proposed project satisfies the [main |
| 21 | +requirements](#requirements-and-guidelines) mentioned below. |
| 22 | + |
| 23 | +### How to get involved |
| 24 | + |
| 25 | +The best place to propose and discuss your proposals is our |
| 26 | +["contributors"](http://contributors.scala-lang.org/) |
| 27 | +discussion forum. This way you will get quickly responses from the whole |
| 28 | +Scala community. |
| 29 | + |
| 30 | +### Previous Summer of Code |
| 31 | + |
| 32 | +We encourage you to have a look at our |
| 33 | +[2016](http://scala-lang.org/gsoc/2016.html), |
| 34 | +[2015](http://scala-lang.org/gsoc/2015.html), |
| 35 | +[2014](http://scala-lang.org/gsoc/2014.html), |
| 36 | +[2013](http://www.scala-lang.org/news/2013/03/20/gsoc13.html), |
| 37 | +[2012](http://www.scala-lang.org/gsoc2012#), |
| 38 | +[2011](http://www.scala-lang.org/gsoc2011#), |
| 39 | +[Summer of Code 2010](http://www.scala-lang.org/gsoc2010#) |
| 40 | +pages to get an idea on what we and you can expect while working on Scala. |
| 41 | + |
| 42 | +## Project Ideas |
| 43 | + |
| 44 | +Here are some project ideas. The list is non-binding and any reasonable |
| 45 | +project related to Scala that is proposed by a student will be thoroughly |
| 46 | +reviewed. |
| 47 | + |
| 48 | +### String interpolator for XML literals |
| 49 | + |
| 50 | +We have wanted for a long time to deprecate XML literals in Scala and replace them by a string interpolator. That is, instead of |
| 51 | + |
| 52 | + <body> |
| 53 | + ... |
| 54 | + </body> |
| 55 | + |
| 56 | +future Scala programs would use an interpolated string |
| 57 | + |
| 58 | + xml""" |
| 59 | + <body> |
| 60 | + ... |
| 61 | + </body> |
| 62 | + """ |
| 63 | + |
| 64 | +This project should turn the wish into reality by implementing the |
| 65 | +`xml` interpolator. The implementation should re-use most of the |
| 66 | +existing infrastructure for xml literals. It would probably be a good |
| 67 | +idea to re-package the existing XML parser in the Scala compiler, and |
| 68 | +to map interpolated strings to constructors from the existing |
| 69 | +`scala.xml` library. Some other aspects need to be re-thought. In |
| 70 | +particular name-space management should be handled by implicts |
| 71 | +instead of being hard-coded in the Scala typer. |
| 72 | + |
| 73 | +The project is a success if it can support essentially all legal XML |
| 74 | +expressions in Scala as interpolated strings. By contrast, support for |
| 75 | +XML patterns is optional: it would be nice if we could do it, but it's |
| 76 | +not required. |
| 77 | + |
| 78 | +This project is ideal for someone who knows XML basics, and is |
| 79 | +interested to learn enough about aspects of the compiler (either Scala 2.12 |
| 80 | +or Dotty) to identify what can be re-used. |
| 81 | + |
| 82 | +Supervised by [@densh](http://github.com/densh) |
| 83 | + |
| 84 | +### Dotty Documentation Compiler ### |
| 85 | + |
| 86 | +[Dotty](http://dotty.epfl.ch) is the future Scala compiler developed at EPFL. |
| 87 | +Getting in to compiler development is usually a very difficult especially when |
| 88 | +it comes to compilers for advanced languages like Scala. |
| 89 | + |
| 90 | +Luckily, there are two compilers in the Dotty project. One for the language and |
| 91 | +one which acts as a documentation compiler. The docs compiler, alias |
| 92 | +"Dottydoc", uses parts of the main compiler to collect semantic information |
| 93 | +about the user's source files, it then creates a full-blown static site similar |
| 94 | +to Jekyll - featuring an API reference, markdown parsing for documentation, |
| 95 | +cross-referencing between docs and API and a blog. Gone is the divide between |
| 96 | +what is API and what is documentation. If you visited the Dotty |
| 97 | +[website](http://dotty.epfl.ch), then you've seen Dottydoc - that entire site |
| 98 | +was generated by it. |
| 99 | + |
| 100 | +If you feel that you want to help shape the future of Scala, either by |
| 101 | +contributing to the Dotty compiler or by dramatically improving the tooling |
| 102 | +surrounding the Scala language, this is the place to start. |
| 103 | + |
| 104 | +Supervised by [@felixmulder](http://github.com/felixmulder) |
| 105 | + |
| 106 | +### Auto-completion and type information in Scastie |
| 107 | + |
| 108 | +Scastie is an online Scala programming environment. This project would |
| 109 | +add support for auto-completion and type information to the online code editor. |
| 110 | +That would require to perform calls to the presentation compiler running |
| 111 | +on the server-side to retrieve the required informations. |
| 112 | + |
| 113 | +[https://github.com/scalacenter/scastie](https://github.com/scalacenter/scastie) |
| 114 | + |
| 115 | +Supervised by [@MasseGuillaume](https://github.com/MasseGuillaume) and/or |
| 116 | +[@julienrf](https://github.com/julienrf) |
| 117 | + |
| 118 | +### Writing interactive programs with Scastie |
| 119 | + |
| 120 | +Scastie is an online Scala programming environment. Currently, programs |
| 121 | +written in scastie have limited means of showing an output to users. |
| 122 | +This project would add support for writing programs showing images and |
| 123 | +interactive animations running in the browser. |
| 124 | + |
| 125 | +[https://github.com/scalacenter/scastie](https://github.com/scalacenter/scastie) |
| 126 | + |
| 127 | +Supervised by [@MasseGuillaume](https://github.com/MasseGuillaume) and/or |
| 128 | +[@julienrf](https://github.com/julienrf) |
| 129 | + |
| 130 | +### Reimplement the JDK in Scala-Native |
| 131 | + |
| 132 | +Scala-Native is a new target for Scala. Instead of compiling to bytecode and running on the JVM, we |
| 133 | +use llvm to generate native assembly code. We currently do not compile Java to llvm. Therefore we need |
| 134 | +to reimplement some parts of JDK such as `java.net.*`, `java.io.*`, `java.nio.*` and `java.util.*`. We are already |
| 135 | +reimplementing the JDK and we need your help to increase our coverage. It'a unique chance to learn |
| 136 | +how to implement the java api and write low level Scala code. |
| 137 | + |
| 138 | +Supervised by [@MasseGuillaume](https://github.com/MasseGuillaume) |
| 139 | + |
| 140 | +### Slick bug and feature hunt |
| 141 | + |
| 142 | +There are lots of open tickets in the Slick issue tracker. Some which have long |
| 143 | +time fallen behind. This project would be about tackling as many of them as |
| 144 | +time permits. |
| 145 | + |
| 146 | +[https://github.com/slick/slick/issues](https://github.com/slick/slick/issues) |
| 147 | + |
| 148 | +Supervised by [@cvogt](https://github.com/cvogt) and/or [@szeiger](https://github.com/szeiger) |
| 149 | + |
| 150 | +### CBT plugin initiative |
| 151 | + |
| 152 | +CBT, the new build tool for Scala is making fast progress. In order to be a |
| 153 | +viable alternative to the existing choices, many people will need plugins, |
| 154 | +which often do not exist yet for CBT. The focus of this project will be |
| 155 | +converting builds of popular Scala libraries to CBT and writing whatever |
| 156 | +plugins necessary to pull it off. This project gives you the chance to play |
| 157 | +with one of the new exciting tools in the Scala world, work on a fairly elegant |
| 158 | +Scala code base and sharpen your proficiency in parts of the JDK often |
| 159 | +forgotten by Scala developers. |
| 160 | + |
| 161 | +[https://github.com/cvogt/cbt](https://github.com/cvogt/cbt) |
| 162 | + |
| 163 | +Supervised by [@cvogt](https://github.com/cvogt) |
| 164 | + |
| 165 | +### Implementation of the Savina Benchmark Suite using the Reactors Framework |
| 166 | + |
| 167 | +The Savina suite is a benchmark suite for actor-oriented programs. |
| 168 | +Its goal is to provide standard benchmarks that enable researchers and |
| 169 | +application developers to compare different actor implementations and |
| 170 | +identify those that deliver the best performance for a given use-case. |
| 171 | +The [Reactors framework](http://reactors.io/) is a novel actor framework |
| 172 | +based on the reactor programming model, and offers better composition |
| 173 | +and modularity compared to standard actors. So far, only a part of the |
| 174 | +Savina suite was ported to the Reactors framework. To make Reactors |
| 175 | +fully compliant with Savina, the goal of this project is to implement |
| 176 | +the remaining 21 Savina benchmarks using the Reactors framework. |
| 177 | + |
| 178 | +[Savina Benchmark Suite](https://pdfs.semanticscholar.org/b346/9783325ea82d1ded949804a0676acb125484.pdf) |
| 179 | + |
| 180 | +[Reactors Framework](https://github.com/reactors-io/reactors/) |
| 181 | + |
| 182 | +Supervised by [@axel22](https://github.com/axel22) |
| 183 | + |
| 184 | +### Benchmarking the new collections |
| 185 | + |
| 186 | +The standard collections are in the process of being redesigned. We want to |
| 187 | +be sure that the new implementation is as efficient as the current one, if not |
| 188 | +more efficient. A simple benchmark suite has been implemented but it lacks nice |
| 189 | +features like performance regression reports via interactive charts. This project |
| 190 | +would require the student to be familiar with benchmarking (especially within |
| 191 | +the JVM) and web-based visualization libraries such as d3. |
| 192 | + |
| 193 | +[https://github.com/scala/collection-strawman](https://github.com/scala/collection-strawman) |
| 194 | + |
| 195 | +Supervised by [@julienrf](https://github.com/julienrf) |
| 196 | + |
| 197 | + |
| 198 | +### Connecting potential contributors with Scala projects via Scaladex |
| 199 | + |
| 200 | +Scaladex is a cool new tool that maps out the known Scala ecosystem by |
| 201 | +connecting GitHub users, published binaries, contributor info, documentation |
| 202 | +info, and release info of Scala projects. The one thing though that Scaladex |
| 203 | +doesn't do yet is connecting potential contributors to Scala projects that are |
| 204 | +on the lookout for contributors. Your task if you take on this project would be |
| 205 | +to find a way to better connect project maintainers with interested open source |
| 206 | +contributors, by building on Scaladex, a web application built with Scala and |
| 207 | +Scala.js. |
| 208 | + |
| 209 | +Supervised by [@heathermiller](https://github.com/heathermiller) |
| 210 | + |
| 211 | + |
| 212 | +### New line-wrapping algorithm for scalafmt |
| 213 | + |
| 214 | +[Scalafmt](https://olafurpg.github.io/scalafmt/) is a code formatter for Scala. |
| 215 | +A key feature of scalafmt is that users can define a maximum width (for example 80 characters) |
| 216 | +so that long code lines get automatically wrapped into shorter lines. |
| 217 | +Currently, scalafmt uses a [token-based best-first search algorithm](https://geirsson.com/assets/olafur.geirsson-scalafmt-thesis.pdf) to wrap long lines. |
| 218 | +Both [dartfmt](http://journal.stuffwithstuff.com/2015/09/08/the-hardest-program-ive-ever-written/) |
| 219 | +and [clang-format](https://www.youtube.com/watch?v=s7JmdCfI__c) use a similar approach. |
| 220 | +This token-based best-first algorithm has [known issues](https://olafurpg.github.io/scalafmt/#Deeplynestedcode) in scalafmt. |
| 221 | + |
| 222 | +The goal of this project would be to explore and implement an alternative line wrapping algorithm for scalafmt. |
| 223 | +One promising alternative is the [dynamic-programming algorithm employed by rfmt](https://www.researchgate.net/profile/Phillip_Yelland/publication/284724851_A_New_Approach_to_Optimal_Code_Formatting/links/5657f1e608ae4988a7b58558.pdf) |
| 224 | +(see [Python implementation](https://github.com/google/rfmt)). |
| 225 | +Another promising algorithm is Philip Wadler's ["prettier printer"](http://homepages.inf.ed.ac.uk/wadler/papers/prettier/prettier.pdf). |
| 226 | +The prettier-printer algorithm has been successfully employed by the [prettier](https://github.com/jlongster/prettier) JavaScript formatter. |
| 227 | + |
| 228 | +Supervised by [@olafurpg](https://github.com/olafurpg) |
| 229 | + |
| 230 | + |
| 231 | +*... Mentors: please insert your projects here. You can use the following template and submit a PR [here](https://github.com/scala/scala-lang). Note that student applications will end on April 3, 2017 ...* |
| 232 | + |
| 233 | +### *Project name* |
| 234 | + |
| 235 | +*Project description.* |
| 236 | + |
| 237 | +*Link to the corresponding code repository, if relevant.* |
| 238 | + |
| 239 | +Supervised by *[@username](https://github.com/username)*. |
| 240 | + |
| 241 | +## Requirements and Guidelines |
| 242 | + |
| 243 | +### General Student Application Requirements |
| 244 | + |
| 245 | +This is the seventh time the Scala project has applied to the Summer of |
| 246 | +Code, and from previous years’ experience, increased popularity of the |
| 247 | +language and stories of other mentor organizations we expect a high |
| 248 | +number of applications. First, be aware of the following: |
| 249 | + |
| 250 | +* Make sure that you understand, fulfill and agree to the general |
| 251 | + [Google Summer of Code rules](https://summerofcode.withgoogle.com/rules/) |
| 252 | +* The work done during GSoC requires some discipline as |
| 253 | + you have to plan your day-to-day activity by |
| 254 | + yourself. Nevertheless, you can expect regular contact with your |
| 255 | + mentors both via the usual means of communication for you project |
| 256 | + as well as personal guidance via email, chat or phone. The mentor is |
| 257 | + there for you in case you get stuck or need some guidance during your 3 month coding project. |
| 258 | +* The [official SoC timetable](https://summerofcode.withgoogle.com/how-it-works/#timeline) |
| 259 | + mentions May 30 as the official start of coding. If you |
| 260 | + have time, you are encouraged to research your proposals even |
| 261 | + before that (and definitely learn the basics of Scala, if you |
| 262 | + haven't done that already). |
| 263 | + |
| 264 | +### Student Application Guidelines |
| 265 | + |
| 266 | +* Student proposals should be very specific. We want to see evidence |
| 267 | + that you can succeed in the project. Applications with one-liners |
| 268 | + and general descriptions definitely won't make the cut. |
| 269 | +* Because of the nature of our projects students must have some |
| 270 | + knowledge of the Scala language. Applicants with Scala programming |
| 271 | + experience will be preferred. Alternatively, experience with |
| 272 | + functional programming could suffice, but in your application we |
| 273 | + want to see evidence that you can quickly be productive in Scala. |
| 274 | +* You can think of Google Summer of Code as a kind of independent |
| 275 | + internship. Therefore, we expect you to work full-time during the |
| 276 | + duration. Applicants with other time commitments are unlikely to |
| 277 | + be selected. From our previous experience we know that students' |
| 278 | + finishing their studies (either Bachelor, Master of PhD) are |
| 279 | + likely to be overwhelmed by their final work, so please don't be |
| 280 | + too optimistic and carefully plan your time for the project. |
| 281 | +* If you are unsure whether your proposal is suitable, feel free to |
| 282 | + discuss it on our |
| 283 | + ["contributors"](http://contributors.scala-lang.org/) |
| 284 | + discussion forum. We have many community members on our mailing list |
| 285 | + who will quickly answer any of your questions regarding the |
| 286 | + project. Mentors are also constantly monitoring the mailing |
| 287 | + list. Don't be afraid to ask questions. We’d love to help you out! |
| 288 | + |
| 289 | +### General Proposal Requirements |
| 290 | + |
| 291 | +The proposal will be submitted via the standard web-interface at |
| 292 | +[https://summerofcode.withgoogle.com/](https://summerofcode.withgoogle.com/), |
| 293 | +therefore plain text is the best way to go. We expect your application |
| 294 | +to be in the range of 700-1500 words. Anything less than that will |
| 295 | +probably not contain enough information for us to determine whether |
| 296 | +or not you are the right person for the job. |
| 297 | + |
| 298 | +Your proposal should contain at least the following information, but |
| 299 | +feel free to include anything that you think is relevant: |
| 300 | + |
| 301 | +* Please include your name (weird as it may be, people do forget it) |
| 302 | +* Title of your proposal |
| 303 | +* Abstract of your proposal |
| 304 | +* Detailed description of your idea including explanation on why it |
| 305 | + is innovative (maybe you already have a prototype?), what |
| 306 | + contribution do you expect to make to the Scala community and why |
| 307 | + do you think your project is needed. A rough plan of your |
| 308 | + development and possible architecture sketches. |
| 309 | +* Description of previous work, existing solutions (links to |
| 310 | + prototypes or references are more than welcome!) |
| 311 | +* Write us about yourself and convince that you are the right |
| 312 | + person for the job (linking to your resume/CV is good but not |
| 313 | + sufficient) |
| 314 | + * Mention the details of your academic studies, any previous |
| 315 | + work, internships |
| 316 | + * Any relevant skills that will help you to achieve the goal |
| 317 | + (programming languages, frameworks)? |
| 318 | + * Any previous open-source projects (or even previous GSoC) you |
| 319 | + have contributed to? |
| 320 | + * Do you plan to have any other commitments during SoC that may |
| 321 | + affect you work? Any vacations/holidays planned? Please be |
| 322 | + specific as much as you can. |
| 323 | +* If you apply to more than one GSoC project, especially if you also apply |
| 324 | + for a project in another organization, specify which project you prefer. |
| 325 | + In case two organizations choose to accept your applications, |
| 326 | + we can then give you the project that is most important to you. |
| 327 | + Preferring the project of another organization will *not* influence our |
| 328 | + decision whether to accept your application. |
| 329 | +* Contact details (**very important!**) |
0 commit comments