|
| 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