From 4f13512d9bcf611691a684e4a35436b32f946550 Mon Sep 17 00:00:00 2001 From: Sam Halliday Date: Wed, 22 Feb 2017 18:16:46 +0000 Subject: [PATCH] GSoC ENSIME debugger and data annotation --- gsoc/2017.md | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/gsoc/2017.md b/gsoc/2017.md index 98d327c91..527f011ff 100644 --- a/gsoc/2017.md +++ b/gsoc/2017.md @@ -81,6 +81,57 @@ or Dotty) to identify what can be re-used. Supervised by [@densh](http://github.com/densh) +### Scala Debugging in ENSIME + +ENSIME is a kind of scala language server and has the potential to +provide all text editors with a compelling debugging experience in +Scala. + +The experimental ENSIME debugger has problems: breakpoints often miss +and heuristics - to convert between scala and JVM bytecode names - +often fail. There is no support for scala expression evaluation in the +debugging context. + +In this project we would rewrite the debugger to make use of ENSIME's +name conversion utilities (powered by the scalac interactive +compiler), add expression evaluation, and the user interface +for (at least) one of the editors. The candidate is free to choose to +implement for either Emacs, VSCode, Vim, Atom or Sublime. + +http://ensime.org/ + +Supervised by *[@fommil](https://github.com/fommil)* and +*[@chipsenkbeil](http://github.com/chipsenkbeil)*. + +### Case classes a la carte with scala.meta + +`case class`es are a very useful feature of the scala language, but +can be limiting. For example, there is no way to write a custom +interning (memoization) technique or modify the internal +representation of a case class, leading to heap usage problems for +larger applications that generate hundreds of millions of instances (a +common problem in monolithic financial services applications). + +In this project we would introduce a `@data` annotation, as a +user-land alternative to `case class`. The default implementation +would have feature parity with `case class` but opt-in features +include: interning (backed by a fast, concurrent, weak hashset, +allowing for super-fast instance equality), hashCode caching, fast +value equality (backed by instance ids and a cache of previous +equality tests), unboxing of Options and primitives (each unbox saving +64bits per instance), all the way to FastInfoSet-style custom +compression dictionaries (e.g. for Strings). + +Another usecase would be to allow for automatic typeclass derivation +of well-known typeclasses, placed on the companion. e.g. +`LabelledGeneric`, `Show`, `Lens`. This would speed up compilations of +downstream code (for example, currently shapeless uses a macro to +generate a `LabelledGeneric` for a case class on every usage site, but +with this approach there is no derivation necessary). + +Supervised by *[@fommil](https://github.com/fommil)* with support from +*[@xeno-by](https://github.com/xeno-by)*. + ### Dotty Documentation Compiler ### [Dotty](http://dotty.epfl.ch) is the future Scala compiler developed at EPFL.