Skip to content

Commit 13b6ea5

Browse files
authored
Merge pull request #1457 from scalacenter/scala-center-roadmap-2023
Add Scala Center roadmap for 2023
2 parents 2089d6d + 79c0d58 commit 13b6ea5

File tree

1 file changed

+261
-0
lines changed

1 file changed

+261
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,261 @@
1+
---
2+
layout: blog-detail
3+
post-type: blog
4+
by: Julien Richard-Foy and the Scala Center team
5+
title: Scala Center Roadmap for 2023 and Beyond
6+
description: Highlights of the achievements of the Scala Center in 2022, and roadmap for 2023.
7+
---
8+
9+
In this post, we summarize the achievements of the Scala Center in 2022, and share our plans going forward to
10+
ensure the longevity of Scala.
11+
12+
## Role of the Scala Center in the Scala Ecosystem
13+
14+
Overall, the mission of the Scala Center is to **improve the experience of becoming and being a Scala developer**, and
15+
to **help the community to build a rich ecosystem of libraries**.
16+
17+
The Scala ecosystem is made of the following pillars:
18+
19+
- **Language, compiler, standard library:** they are the core tools that all programmers interact with when they
20+
work in Scala. The role of the Scala Center is to reduce the number of bugs in the compiler implementation, to help
21+
the community to contribute to these tools, and to make sure they evolve in a way that takes into account the needs
22+
of the community.
23+
- **Documentation and MOOCs:** this website is the entry point to the ecosystem. It showcases the strengths of the
24+
language and its use-cases, and it hosts all its documentation. The role of the Scala Center is to simplify the
25+
structure and the content of the website, to create and maintain high-quality online educational content (including
26+
online courses), and to help the community to contribute to the website.
27+
- **Developer experience:** Scala programmers often don’t interact directly with the compiler, but they use a tool
28+
(build tool, compile server) that does that for them. They also use tools to edit, analyze, navigate through,
29+
transform, compile, run, and debug Scala programs. The role of the Scala Center is to make sure these tools are as
30+
easy to use as possible, that they work reliably for everyone, and deliver a great developer experience.
31+
- **Community and contributor experience:** the last pillar is the result of the work done _outside_ the Scala Center.
32+
The community has created thousands of projects that bring simple solutions to complex problems. The role of the
33+
Scala Center is to create the best environment for the emergence of such libraries.
34+
35+
The remainder of this article summarizes our achievements in those four areas in 2022, and then presents our goals
36+
going forward.
37+
38+
## Highlights of 2022
39+
40+
In this section, we highlight our main achievements in 2022. You can find our complete activity reports on
41+
[our website](https://scala.epfl.ch/records.html).
42+
43+
### Language, Compiler, Standard Library
44+
45+
**We overhauled and restarted the [Scala Improvement Process](https://docs.scala-lang.org/sips/).** Since last
46+
summer, the SIP Committee members meet monthly to decide the evolution of the language. As we explained
47+
in the [announcement]({% link blog/_posts/2022-07-13-scala-improvement-process-reloaded.md %}), the main changes of
48+
the new process are the following. Firstly, the proposals are thoroughly discussed by a team of three reviewers, publicly
49+
on [GitHub](https://github.com/scala/improvement-proposals) before the whole Committee votes on them during their
50+
monthly meetings. Second, there is a new stage where proposals are accepted as experimental features before the Committee
51+
votes again to promote them to stable features. The new Scala Improvement Process is the first result of our governance
52+
strategy whose goal is to establish all the necessary decision-making processes for the community, by the community.
53+
54+
**We improved meta-programming, especially [generic Mirror](https://docs.scala-lang.org/scala3/reference/contextual/derivation.html#mirror)
55+
synthesis.** Mirrors are critical to metaprogramming in Scala 3, they enable implementation of type class derivation without
56+
advanced metaprogramming techniques such as macros. Mirror synthesis now supports more cases
57+
([generic tuples](https://github.com/lampepfl/dotty/pull/15250),
58+
[local and inner classes](https://github.com/lampepfl/dotty/pull/15847)), is more reliable
59+
([dotty#15279](https://github.com/lampepfl/dotty/pull/15279),
60+
[dotty#15404](https://github.com/lampepfl/dotty/pull/15404),
61+
[dotty#15814](https://github.com/lampepfl/dotty/pull/15814)), and provides
62+
[more detailed explanations in case of failure](https://github.com/lampepfl/dotty/pull/15164).
63+
64+
**We generalized the definition of methods in Scala** by allowing type parameters to be interleaved with regular parameters.
65+
This change notably allows methods to take type parameters whose bounds depend on value parameters. You can learn more
66+
about the motivation behind this change in the proposal document:
67+
[SIP-47 - Clause Interleaving](https://docs.scala-lang.org/sips/clause-interleaving.html). Lastly, we lifted a current
68+
language restriction that prevents eta-expansion to be applied to polymorphic methods. You can learn more about this
69+
change in the proposal document:
70+
[SIP-49 - Polymorphic Eta-Expansion](https://docs.scala-lang.org/sips/polymorphic-eta-expansion.html). Both proposals
71+
have been accepted by the SIP Committee and are under development in the compiler.
72+
73+
### Documentation and MOOCs
74+
75+
**We improved the usability of the Scala website (this website).** The website had not seen a major rework since 2013,
76+
and it does not represent the full picture that we would like Scala newcomers to see. To this effect, we have removed
77+
the split of Scala 2 vs Scala 3 on [the landing page](https://github.com/scala/scala-lang/pull/1344) and in
78+
[the documentation](https://github.com/scala/docs.scala-lang/pull/2430), consolidated the “Getting Started” instructions
79+
([scala-lang#1344](https://github.com/scala/scala-lang/pull/1344),
80+
[scala-lang#1348](https://github.com/scala/scala-lang/pull/1348),
81+
[scala-lang#1352](https://github.com/scala/scala-lang/pull/1352),
82+
[scala-lang#1373](https://github.com/scala/scala-lang/pull/1373),
83+
[docs.scala-lang#2388](https://github.com/scala/docs.scala-lang/pull/2388),
84+
[docs.scala-lang#2520](https://github.com/scala/docs.scala-lang/pull/2520)), improved the
85+
[contributing guide](https://github.com/scala/docs.scala-lang/pull/2350), and created an infrastructure to show both
86+
Scala 2 and Scala 3 versions of code examples in the documentation
87+
([docs.scala-lang#2450](https://github.com/scala/docs.scala-lang/pull/2450)). We created an
88+
[issue](https://github.com/scala/docs.scala-lang/issues/2481) to coordinate the update of the whole documentation to
89+
always show both Scala 2 and Scala 3 code examples when possible.
90+
91+
**We offered individualized support to our MOOCs’ learners.** We published the course “Effective Programming in Scala”
92+
to the [Extension School platform](https://www.extensionschool.ch/learn/effective-programming-in-scala). This
93+
platform allows the learners to have regular 1-on-1 meetings with our instructors along their learning journey. If you
94+
need to learn Scala, or if your company needs to train developers, the Extension School provides a cost-effective way
95+
to be trained by the Scala Center team. Learn
96+
more about the motivation in the previous [announcement]({% link blog/_posts/2022-06-08-learn-scala-at-epfl-extension-school.md %}).
97+
98+
### Developer Experience
99+
100+
**We improved the debugger for Scala 3.** The Metals’ debugger is now able to evaluate arbitrary Scala 3 expressions
101+
while the debugger is paused in the middle of a program. Step-by-step execution now automatically skips the methods
102+
generated by the compiler (e.g. mix-in forwarders, getters, setters, bridge methods, and synthetic methods of case
103+
classes). Learn more in [this video](https://www.youtube.com/watch?v=UePrOa_1Am8).
104+
105+
**We fixed the apps installed by the [setup instructions](https://docs.scala-lang.org/getting-started).** The
106+
command-line apps `sbt` and `scala` now behave consistently regardless of the installation process (`cs install` vs
107+
manual download of the release artifacts).
108+
109+
### Community and Contributor Experience
110+
111+
**We co-organized the [ScalaCon](https://www.scalacon.org/) online conference and participated in several in-person community
112+
events.** In April 2022, for the first time in 2.5 years, events could finally take place in person. Our team encouraged
113+
many Scala User Groups to restart their regular Scala Meetups. We gave talks and organized [Open-Source Sprees](https://github.com/scalacenter/sprees)
114+
at local events in Europe. We were also involved in the online conference ScalaCon: we were in charge of the program and
115+
the program committee, and we presented several talks including a keynote [Towards a Healthy & Resilient Scala Community](https://youtu.be/svWnwU5PXxE)
116+
where we presented our strategy for the governance of Scala. The talk videos of the whole conference are available online
117+
[here](https://www.youtube.com/playlist?list=PL3t6y1EktOPhflaXB28Kw7kwRb30K0W-P).
118+
119+
**We published videos about Scala 3.** [Let’s Talk About Scala 3](https://www.youtube.com/playlist?list=PLTx-VKTe8yLxYQfX_eGHCxaTuWvvG28Ml)
120+
is a series of videos where we share interesting, useful, and cool things related to Scala 3. We published 4 new
121+
videos in 2022.
122+
123+
**We improved the code editing experience in [Scastie](https://scastie.scala-lang.org).** Scastie is the online Scala
124+
code editor that is used every day by one thousand developers to share code snippets in the community. We have
125+
implemented “IDE features” such as autocompletion and showing type information under the mouse pointer. Under the hood,
126+
we reused some components of Metals.
127+
128+
**We mentored new contributors to the Scala 3 compiler.** The Compiler
129+
Academy organizes online pair-programming events to mentor new contributors on the compiler codebase. You can learn
130+
more about the Compiler Academy in [this blog article]({% link blog/_posts/2022-11-02-compiler-academy.md %}).
131+
132+
**We implemented the building blocks of a new tool to detect incompatibilities between programs.** Guaranteeing the
133+
absence of incompatibilities between library dependencies is the cornerstone of a seamless Scala ecosystem. We have
134+
implemented a prototype of a new tool to detect incompatibilities between two versions of a program (like
135+
[MiMa](https://github.com/lightbend/mima), but based on the TASTy representation of programs instead of JVM bytecode).
136+
We explained [here](https://github.com/scalacenter/tasty-mima#motivation) why we need this tool in addition to the
137+
classic MiMa.
138+
Our work is based on [TASTy Query](https://github.com/scalacenter/tasty-query), which will be the basis of tools to
139+
perform static analysis of Scala programs (it is already used by the Metals debugger).
140+
141+
## Roadmap for 2023 (and Beyond)
142+
143+
It is now time to look forward and present our goals for 2023. Our mission remains the same: improve the experience of
144+
becoming and being a Scala developer, and help the community to build a rich ecosystem of libraries. Ultimately, our
145+
work will ensure the longevity of Scala by creating a reliable and resilient ecosystem.
146+
147+
We have identified the priorities for 2023 through our discussions with the community (online or at conferences),
148+
with our [Advisory Board members](https://scala.epfl.ch/#advisory-board-member-list), and with the
149+
main organizations that are [behind Scala](https://www.scala-lang.org/community/#whos-behind-scala)
150+
([LAMP](https://lamp.epfl.ch), [Lightbend](https://lightbend.com), and [VirtusLab](https://virtuslab.com)). We are
151+
grateful to all of them.
152+
153+
In the following subsections we remind you of our ongoing and recurring projects, and we present our most important goals as
154+
well as some additional stretch goals that would need more resources.
155+
156+
The roadmap we present here is of course subject to adjustments throughout the year.
157+
158+
### Language, Compiler, Standard Library
159+
160+
In addition to keeping the Scala Improvement Process ongoing, and reducing the number of bugs in the compiler and standard
161+
library, we will:
162+
163+
- **Make the compiler error messages clearer and more actionable.** The compiler should help developers write correct code
164+
instead of “just complaining” about incorrect code. The compiler should also guide you to write maintainable code (ie,
165+
it should provide linting features). You can find a list of related issues
166+
[here](https://github.com/lampepfl/dotty/issues?q=is%3Aopen+is%3Aissue+label%3Aarea%3Areporting).
167+
- **Bring the compiler’s suggestions into the IDEs.** Instead of emitting only text output, the compiler
168+
will produce structured output that IDEs (Metals and IntelliJ) will be able to read to automatically provide “quick
169+
fixes” to the users. This should reduce the implementation (and maintenance) costs on the IDE side.
170+
- **Unfreeze the Scala standard library.** The standard library has not changed (except for bug fixes or some performance
171+
improvements) since Scala 2.13, which was released almost four years ago. [Dropping the forwards binary compatibility
172+
requirement](https://github.com/scala/improvement-proposals/pull/54) would be a first step to allow the introduction
173+
of new classes or the addition of new members to the existing classes. Then, we will create a process to validate
174+
what should be in the standard library and what should stay outside of it.
175+
- **Clarify and communicate the Scala 3 roadmap.** We will coordinate with the compiler team to clarify what will
176+
go into the [Long-Term Support version]({% link blog/_posts/2022-08-17-long-term-compatibility-plans.md %})
177+
of Scala 3, and make sure that roadmap is well communicated. We will focus primarily on the items that will
178+
enable more users to migrate from Scala 2 to Scala 3 (e.g., missing compiler options).
179+
180+
Our stretch goals include: publish a formal specification for Scala 3, investigate opportunities for reducing
181+
compilation times, implement multi-threading in Scala Native, and remove the dependency to the Google Closure
182+
Compiler in Scala.js.
183+
184+
### Documentation and MOOCs
185+
186+
In addition to maintaining the Scala website and managing our online course learners, we will:
187+
188+
- **Add “task-oriented” content to the documentation.** Currently, the documentation is rather “language features oriented”,
189+
but it does not really help solve concrete problems. We will select a set of libraries (the “Scala Toolkit”) and we
190+
will write tutorials showing how to perform common programming tasks (working with JSON, writing tests, etc.).
191+
We will use libraries created by the community and that do not require advanced knowledge of Scala. Lastly, we will
192+
help the authors of those libraries to perform the usual maintenance tasks.
193+
- **Improve the content of the course
194+
[Effective Programming in Scala](https://docs.scala-lang.org/online-courses.html#effective-programming-in-scala).**
195+
We will address the feedback we received from the learners of the course to smooth the learning curve.
196+
197+
Our stretch goals include: update our [Spark course](https://docs.scala-lang.org/online-courses.html#scala-specialization),
198+
teach Scala to first year Bachelor students at EPFL, and create a new Scala course for beginners (with no experience at
199+
all in programming).
200+
201+
### Developer Experience
202+
203+
In addition to maintaining some core tools of the ecosystem (Bloop, Coursier, sbt, scala-debug-adapter), we will:
204+
205+
- **Streamline the distribution of `cs` (Coursier).** The current setup process is not well integrated with the various
206+
operating systems. There are no packages for Linux distributions, no MSI installer for Windows, and no PKG or DMG
207+
installer for macOS.
208+
- **Reduce the number of ways to import Scala projects in IDEs.** Currently, IDEs support several ways for importing
209+
Scala projects (via sbt or via a build server, which itself can be provided by bloop or the underlying build tool).
210+
This is a source of confusion for the users, and it increases the maintenance costs.
211+
- **Make Metals work with more versions of Scala.** By creating a stable interface for the presentation compiler,
212+
Metals will be less tied to the release cycles of the compiler, and it will easier to use it to develop the
213+
compiler itself.
214+
- **Improve the Scala 3 support on Metals and IntelliJ.** We heard many developers stating that the Scala 3 support
215+
in IDEs was not at the same level as Scala 2, and that is one of the blockers to migrate to Scala 3. We will
216+
identify and put weigh on the main issues that currently degrade the developer experience on Scala 3 projects.
217+
218+
Our stretch goals include: support standalone .scala files out of the box in Metals and IntelliJ (including support
219+
for Scala CLI configuration directives), investigate opportunities to reduce build times, reduce the maintenance costs
220+
of implementing the `debugSession/start` endpoint in all the build servers by running the debug server in Metals,
221+
update scalameta to Scala 3, publishing sbt 2, implement a Scala 2 expression evaluator in scala-debug-adapter,
222+
be able to choose a specific build target in Metals, make sure Scala programs are easy to deploy especially in IaaS,
223+
and provide TASTy trees to semantic rules in Scalafix.
224+
225+
### Community and Contributor Experience
226+
227+
In addition to participating to events, encouraging and supporting local Scala user groups and Scala conferences around
228+
the world, publishing positive content about Scala, leading the Compiler Academy, coordinating the Google Summer of
229+
Code, and maintaining tools for contributors ([Scastie](https://scastie.scala-lang.org),
230+
[Scaladex](https://index.scala-lang.org), [scalafix](https://scalacenter.github.io/scalafix/)), we will:
231+
232+
- **Co-organize [Scala Days](https://scaladays.org/).** We will be responsible for the program and co-located events,
233+
such as ScalaBridge, Scala Spree, and other community summits. The conference will take place June 4th-7th in Seattle,
234+
USA, and September 11th-14th in Madrid, Spain.
235+
- **Organize a Tooling Summit.** We will bring together the main actors of the tooling ecosystem (IntelliJ team, Metals
236+
team, compiler team, build tools maintainers), and agree on the next steps for a reliable and seamless integration
237+
of the pieces of the tooling ecosystem.
238+
- **Add support for standalone Scala programs in Scastie.** Currently, Scastie creates an sbt project for every snippet.
239+
This adds a performance overhead, and makes it impossible to just copy-paste a snippet to run it locally (because
240+
you also need to re-create the sbt configuration locally). We will fix this issue by supporting a “standalone” mode
241+
where the configuration will be defined via Scala CLI directives.
242+
- **Publish TASTy-MiMa.** This tool will be able to detect incompatibilities between two versions of a program, based
243+
on their TASTy representation. We will complete its implementation and make it available to the community.
244+
245+
Our stretch goals include: create a Scala Center online shop, finalize the training materials for Scala moderators, revise
246+
and update the Scala Center bylaws, stabilize and document the HTTP API of Scaladex, make it easy to find projects to
247+
contribute to in Scaladex, streamline the way to publish the documentation of Scala libraries, implement GitHub [precise code
248+
navigation](https://docs.github.com/en/repositories/working-with-files/using-files/navigating-code-on-github#precise-and-search-based-navigation)
249+
for Scala, and simplify the usage of remote caching techniques in continuous integration systems.
250+
251+
## Conclusion
252+
253+
In this article, we have looked at the pillars of the Scala ecosystem, and for each of them we have listed the main
254+
outcome of our work in 2022, and our main goals for 2023.
255+
256+
Thanks to your support, and with the help of all the [people behind Scala](https://www.scala-lang.org/community/#whos-behind-scala),
257+
we came this far! Help us go even further by [supporting the Scala Center](https://scala.epfl.ch/faqs.html).
258+
259+
You can find our detailed roadmap for the current quarter [here](https://scala.epfl.ch/projects.html),
260+
and track our progress by looking at our [quarterly reports](https://scala.epfl.ch/records.html), or by browsing the
261+
[Scala Center Updates](https://contributors.scala-lang.org/c/scala-center/25) category of the Scala Contributors forum.

0 commit comments

Comments
 (0)