GSoC/GCI Archive
Google Summer of Code 2015

Scala Team

License: New and Simplified BSD licenses

Web Page: http://scala-lang.org/gsoc/2015.html

Mailing List: http://scala-lang.org/community/

Scala is a general purpose programming language designed to express common programming patterns in a concise, elegant, and type-safe way. It smoothly integrates features of object-oriented and functional languages, enabling Java and other programmers to be more productive. Code sizes are typically reduced by a factor of two to three when compared to an equivalent Java application.

Many existing companies who depend on Java for business critical applications are turning to Scala to boost their development productivity, applications scalability and overall reliability.

Scala runs on the JVM (by default) and on JavaScript (via Scala.js), integrating near-seamlessly with libraries on these respective platforms. This significantly reduces barriers to adoption and has been a key factor in Scala’s success. Worldwide, there are an estimated 100,000 skilled Scala programmers - a number that is continually increasing. We run very successful Scala Days conferences in 2010, 2011, 2012, 2013 and 2014 which gathered significant interest within the community - these conferences were quickly sold out before the deadline. Due to this continued success, this year we are hosting two instances of Scala Days: one in San Francisco and one in Amsterdam. Scala development is supported by quality development tools: Jenkins for build, issue tracking with Jira, mailing lists (user discussions as well as architecture decisions are made there) and an extensive test suite. All Scala source code is currently at github and we are receiving a lot of contributions from the community.

The Scala team was participating in GSOC from 2010 to 2014, and we had many successful projects that were involved in extending the main language compiler, improving IDE support and working on external open-source projects that were written in Scala (like Akka or Lift or Kojo).

We look for motivated students are who are good in object- and functional-oriented programming (preferably have some familiarity of Scala itself or at least took the Coursera online course). Apart from the projects proposed on the ideas page we are interested in supervising any projects as long as they are written in Scala.

Projects

  • Automated refactorings for scala.meta Metaprogramming is about creating code that manipulates code. It has proven to have useful applications in many areas, one of them is code refactoring – the technique to improve the internal structure of a program. The goal of this project is to create an automated refactoring framework for scala.meta and to demonstrate its capabilities. This includes: organizing existing scala.meta infrastructure, binding to popular IDEs, and developing some proof-of- concept refactorings.
  • Continue work on MongoDB support for Slick My proposal is to update and improve previous implementation of MongoDB driver and make missing piece, hence support for nested documents, arrays and DBRefs which are essential in mongo databases and in practice most of mongo documents use it. To do that it is necessary to make some changes in Slick internals. My idea is to provide more flexible type system in slick and make mongo driver use it.
  • Data migration tool Hi there! First of all I want tell thanks all scala team because I think it is one of the (how to say) most comfortable programming language for development. Based on a list of ideas I think I can help you with "Data migration tool". I have experience with different migration tools such as Ruby's ActiveRecord::Migration, and Liquibase.In general I think I have all skillі that is required for developing this tool at the front of Slick.
  • Data migration tool The goal of this project is creating a tool for managing data migration scripts based on Slick. The idea is roughly similar to migrations/evolutions in Ruby on Rails or Scala Play 2. We will need to significantly improve (or re-write) the code of a proof of concept implementation to make it production ready, extend it by futher features and explore some exciting ideas like reliable migrations in a development scenario with branches (like git branches).
  • Improving the Scala interpreter The project's goal is to improve Scala’s utility as a scripting language. A new interpreter will be crated based on Scala’s REPL. The overhead of starting a new JVM and a new compiler for running each script will be removed by keeping a single interpreter instance alive. The memory management of the interpreter will be improved. Compilation times for script files will be amortized by caching. Dynamically loading Maven artifacts with built-ins from script files will be made possible.
  • ScalaMeter – JMH Frontend and Binary Compatible Benchmark Data Format ScalaMeter is a performance testing tool for JVM. With concise and simple DSL it allows to focus on benchmark code and handles automatically noise from GC or JIT. The plan is to extend it with JMH support, which is a new but quite well-known framework for benchmarking on JVM. Next thing to do is to write binary compatible data format for benchmark results. Moreover, additional performance metrics should be added, and existing ones should produce more generic results not limited only to Double's.
  • TASTY support for Scala TASTY is a typed AST pickling format implemented in the Dotty compiler. The main goal of this project is to provide an implementation of TASTY for the Scala ecosystem. Such implementation for Scala will facilitate the use of typed ASTs as an interchange format for compiler interactions, enable powerful optimizations based on additional information from persisted trees, and enable several advanced features of scala.meta.
  • Type Specialization and JVM compatibility in Dotty Developed as “a platform to try out new language concepts and compiler technologies for Scala”, the Dotty compiler has been growing fast. However, it still lacks some key components, including Type Specialization. While I am already working on implementing it in the context of a semester project at the Federal Institute of Technology (EPFL), Google Summer of Code would be the opportunity to : 1) finish implementing type specialization, and 2) consider compatibility issues with the JVM