Skip to content

GSoC ENSIME debugger and data annotation #599

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Feb 22, 2017
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 51 additions & 0 deletions gsoc/2017.md
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down