Skip to content

Commit 8b61a65

Browse files
authored
Merge pull request #599 from fommil/gsoc-2017
GSoC ENSIME debugger and data annotation
2 parents f743d2f + 4f13512 commit 8b61a65

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed

gsoc/2017.md

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,57 @@ or Dotty) to identify what can be re-used.
8181

8282
Supervised by [@densh](http://github.com/densh)
8383

84+
### Scala Debugging in ENSIME
85+
86+
ENSIME is a kind of scala language server and has the potential to
87+
provide all text editors with a compelling debugging experience in
88+
Scala.
89+
90+
The experimental ENSIME debugger has problems: breakpoints often miss
91+
and heuristics - to convert between scala and JVM bytecode names -
92+
often fail. There is no support for scala expression evaluation in the
93+
debugging context.
94+
95+
In this project we would rewrite the debugger to make use of ENSIME's
96+
name conversion utilities (powered by the scalac interactive
97+
compiler), add expression evaluation, and the user interface
98+
for (at least) one of the editors. The candidate is free to choose to
99+
implement for either Emacs, VSCode, Vim, Atom or Sublime.
100+
101+
http://ensime.org/
102+
103+
Supervised by *[@fommil](https://github.com/fommil)* and
104+
*[@chipsenkbeil](http://github.com/chipsenkbeil)*.
105+
106+
### Case classes a la carte with scala.meta
107+
108+
`case class`es are a very useful feature of the scala language, but
109+
can be limiting. For example, there is no way to write a custom
110+
interning (memoization) technique or modify the internal
111+
representation of a case class, leading to heap usage problems for
112+
larger applications that generate hundreds of millions of instances (a
113+
common problem in monolithic financial services applications).
114+
115+
In this project we would introduce a `@data` annotation, as a
116+
user-land alternative to `case class`. The default implementation
117+
would have feature parity with `case class` but opt-in features
118+
include: interning (backed by a fast, concurrent, weak hashset,
119+
allowing for super-fast instance equality), hashCode caching, fast
120+
value equality (backed by instance ids and a cache of previous
121+
equality tests), unboxing of Options and primitives (each unbox saving
122+
64bits per instance), all the way to FastInfoSet-style custom
123+
compression dictionaries (e.g. for Strings).
124+
125+
Another usecase would be to allow for automatic typeclass derivation
126+
of well-known typeclasses, placed on the companion. e.g.
127+
`LabelledGeneric`, `Show`, `Lens`. This would speed up compilations of
128+
downstream code (for example, currently shapeless uses a macro to
129+
generate a `LabelledGeneric` for a case class on every usage site, but
130+
with this approach there is no derivation necessary).
131+
132+
Supervised by *[@fommil](https://github.com/fommil)* with support from
133+
*[@xeno-by](https://github.com/xeno-by)*.
134+
84135
### Dotty Documentation Compiler ###
85136

86137
[Dotty](http://dotty.epfl.ch) is the future Scala compiler developed at EPFL.

0 commit comments

Comments
 (0)