|
| 1 | +--- |
| 2 | +layout: contact |
| 3 | +title: Scala Center Activity Report for 2023 Q3 |
| 4 | +--- |
| 5 | + |
| 6 | +Scala Center team: |
| 7 | +Darja Jovanovic, 100%; |
| 8 | +Anatolii Kmetiuk, 100%; |
| 9 | +Adrien Piquerez, 80%; |
| 10 | +Jamie Thompson, 100%; |
| 11 | +Sébastien Doeraene, 100%; |
| 12 | +Guillaume Martres, 100% until August 31, 20% since; |
| 13 | +Julien Richard-Foy, 80% until August 31; |
| 14 | +Johanna Reichen: 80% until August 14; |
| 15 | +Lucas Nouguier: 100% until August 31; |
| 16 | +Sylvie Buchard: 30% until August 31; |
| 17 | +Valérie Meillaud: 30% since September 1; |
| 18 | +Shiv Verkaran: 80% since September 15. |
| 19 | +VirtusLab team: Jędrzej Rochala, 100%. |
| 20 | + |
| 21 | +## At a Glance |
| 22 | +{: .no_toc} |
| 23 | + |
| 24 | +* Table of Contents |
| 25 | +{:toc} |
| 26 | + |
| 27 | + |
| 28 | +## Language, Compiler, Standard Library |
| 29 | + |
| 30 | +### Maintaining and Evolving the Scala 3 Compiler |
| 31 | + |
| 32 | +For Scala 3. |
| 33 | + |
| 34 | +Every month, about 100 new issues are opened on [the Scala 3 repository](https://github.com/lampepfl/dotty/). |
| 35 | +The project welcomes any help it can get in triaging, bug-fixing, PR reviewing, etc. |
| 36 | + |
| 37 | +Our goal is to solve long-standing issues while keeping up with new ones. |
| 38 | +We also aim to get more people involved in working on the compiler to ensure the sustainability of the project. |
| 39 | + |
| 40 | +We contributed PRs in various areas, but want to highlight our work on compiler performance. |
| 41 | + |
| 42 | +While before the compiler could depend upon the latest Zinc 1.9 API, it only called the methods that were available in Zinc 1.3 and earlier. |
| 43 | +Using this old API added a performance hit which we removed. |
| 44 | +This also allowed us to fully support Zinc VirtualFiles in Scala 3. |
| 45 | +See [lampepfl/dotty#18137](https://github.com/lampepfl/dotty/pull/18137) for details. |
| 46 | + |
| 47 | +We improved both speed and allocation rate of the dependency extraction phase (used in incremental compilation). |
| 48 | +We removed a performance bottleneck in code performing file IO, and massively reduced allocation rate by using more efficient caching. |
| 49 | +When compiling the compiler itself, compared to Scala 3.3.0, we were able to reduce allocations in the phase by 80% (translating to a 6% reduction across the whole compiler pipeline) and improve the speed of the phase. |
| 50 | +These improvements were delivered in [lampepfl/dotty#18266](https://github.com/lampepfl/dotty/pull/18266) and [lampepfl/dotty#18403](https://github.com/lampepfl/dotty/pull/18403). |
| 51 | + |
| 52 | +Other important compiler contributions include: |
| 53 | + |
| 54 | +* Soundness of the type system and of TASTy: |
| 55 | + * [Fix #17467: Limit isNullable widening to stable TermRefs; remove under explicit nulls.](https://github.com/lampepfl/dotty/pull/17470) |
| 56 | + * [Fix #18649: Use loBound of param types when materializing a context function.](https://github.com/lampepfl/dotty/pull/18651) |
| 57 | +* Match types: |
| 58 | + * [Fix #17115: Try to normalize while computing typeSize.](https://github.com/lampepfl/dotty/pull/18386) |
| 59 | +* Optimizations of the generated code: |
| 60 | + * [Get rid of the LiftTry phase; instead handle things in the back-end.](https://github.com/lampepfl/dotty/pull/18619) (could be backported to Scala 2) |
| 61 | +* Tooling integration: |
| 62 | + * [Improve SemanticDB generation by tracking symbol occurrences for class primary constructors](https://github.com/lampepfl/dotty/pull/18325) |
| 63 | + |
| 64 | +### Scala Improvement Process |
| 65 | + |
| 66 | +For Scala 3. |
| 67 | + |
| 68 | +The [Scala Improvement Process](https://docs.scala-lang.org/sips/) coordinates the evolution of the language. |
| 69 | +It ensures that the decisions are made by taking into account the needs of all the stakeholders of the language. |
| 70 | + |
| 71 | +We organized two SIP meetings, on July 21 and September 11, 2023. |
| 72 | + |
| 73 | +### Better Foundations for Match Types |
| 74 | + |
| 75 | +For Scala 3. |
| 76 | + |
| 77 | +Currently, the behavior of match types is neither well specified nor implemented in a resilient way. |
| 78 | +They cannot be explained without relying on the compiler's `TypeComparer` blackbox. |
| 79 | +The actual behavior is inherently implementation-specific. |
| 80 | +This is at odds with the requirement for TASTy to have a stable elaboration, and undermines the compatibility guarantees provided by TASTy. |
| 81 | + |
| 82 | +The lack of a good specification also has immediate practical concerns. |
| 83 | +Questions about the expected or appropriate behavior of match types are a recurring theme, and it is sometimes hard to answer them. |
| 84 | +Developers have a hard time knowing what they can or cannot rely on in terms of match types. |
| 85 | + |
| 86 | +In order to solve these problems, we analyzed the actual use cases of match types in the entire open source library ecosystem. |
| 87 | +We then designed a new specification for match types reduction, which [we submitted as a SIP](https://github.com/scala/improvement-proposals/pull/65). |
| 88 | +We also implemented that new specification to validate it. |
| 89 | + |
| 90 | +The last remaining step is for the SIP committee to review and accept it, after which we will be able to merge the new implementation. |
| 91 | + |
| 92 | +### Scala 3 Language Specification |
| 93 | + |
| 94 | +For Scala 3. |
| 95 | + |
| 96 | +We continued our work on writing a full specification for Scala 3, notably in the area of `enum`s and `opaque type` aliases. |
| 97 | + |
| 98 | +We published our work-in-progress [Scala 3 specification](https://scala-lang.org/files/archive/spec/3.4/), and [wrote a blog post](https://www.scala-lang.org/blog/2023/09/25/work-in-progress-scala-3-specification.html) about it. |
| 99 | +We already received some feedback on it, which we partially addressed. |
| 100 | + |
| 101 | +Further work is still needed to complete the set of Scala 3 features. |
| 102 | +However, this work-in-progress specification can already be used as a good foundation to evaluate new SIP proposals, and to answer some core questions. |
| 103 | + |
| 104 | +### Scala.js maintenance |
| 105 | + |
| 106 | +For Scala 2 and 3. |
| 107 | + |
| 108 | +We released [Scala.js 1.14.0](https://www.scala-js.org/news/2023/09/25/announcing-scalajs-1.14.0/) during this quarter. |
| 109 | + |
| 110 | +Other than bugfixes, the main highlights of this release come from external contributors: |
| 111 | + |
| 112 | +* Further improvements to the performance of the linker. |
| 113 | +* Better ergonomics for `js.UndefOr` as seen from Scala 3 (bringing it on par with Scala 2). |
| 114 | +* New ECMAScript core types. |
| 115 | + |
| 116 | +We continue to receive very positive feedback about the linker performance improvements from 1.13.1 and now this release. |
| 117 | + |
| 118 | +## Documentation and Education |
| 119 | + |
| 120 | +### Scala 3 Migration |
| 121 | + |
| 122 | +For migration from Scala 2 to 3. |
| 123 | + |
| 124 | +We released [version 0.6.2](https://github.com/scalacenter/scala3-migrate/releases/tag/v0.6.2) of sbt-scala3-migrate, the Scala 3 migration assistant plugin for sbt, on the latest Scala 3 LTS version, with up-to-date scalac options conversion. |
| 125 | +We revamped the output messages of the plugin to improve their clarity and readability, and updated the [Scala 3 migration tutorial](https://docs.scala-lang.org/scala3/guides/migration/scala3-migrate.html) accordingly. |
| 126 | + |
| 127 | +We created the [scala3-migration-course](https://github.com/scalacenter/scala3-migration-course), a step-by-step course about the migration to Scala 3. |
| 128 | +Based on the [Course Management Tools](https://github.com/eloots/course-management-tools), it guides the learner through the migration of a tailored Scala 2.13 project. |
| 129 | +It demonstrates a number of migration issues and teaches how to solve them. |
| 130 | +The course is self-contained and freely available online. |
| 131 | +We used it the first time at Scala Days, during the "Moving from Scala 2 to Scala 3" workshop, to train about 10 professional programmers. |
| 132 | + |
| 133 | +### Scala Documentation Website |
| 134 | + |
| 135 | +For Scala 2 and Scala 3. |
| 136 | + |
| 137 | +We continued our work on migrating the website to support Scala 2 and Scala 3 syntaxes. |
| 138 | +The purpose of this project is to provide documentation across the website that reflects the reality of mixed Scala 2.13 and Scala 3 usage. |
| 139 | +In each page, we either mark the whole page as specific to one version version; or when describing a broader topic, for each code example, we provide tabs that show equivalent examples in either Scala 2.13 or 3. |
| 140 | + |
| 141 | +This quarter we added further clarifications, tabs and more to guides across the scala documentation. |
| 142 | +Relevant PRs include: [scala/docs.scala-lang#2863](https://github.com/scala/docs.scala-lang/pull/2863), [scala/docs.scala-lang#2864](https://github.com/scala/docs.scala-lang/pull/2864), [scala/docs.scala-lang#2865](https://github.com/scala/docs.scala-lang/pull/2865), [scala/docs.scala-lang#2866](https://github.com/scala/docs.scala-lang/pull/2866), [scala/docs.scala-lang#2867](https://github.com/scala/docs.scala-lang/pull/2867), [scala/docs.scala-lang#2872](https://github.com/scala/docs.scala-lang/pull/2872), and [scala/docs.scala-lang#2873](https://github.com/scala/docs.scala-lang/pull/2873). |
| 143 | + |
| 144 | +## Developer Experience |
| 145 | + |
| 146 | +### Stable API for the Scala 3 Presentation Compiler |
| 147 | + |
| 148 | +For Scala 3. |
| 149 | + |
| 150 | +Last quarter, we had published and integrated a stable interface and implementation for the presentation compiler -- a module responsible for providing interactive features to IDEs. |
| 151 | +Since then, we have been improving its stability, reliability and adding missing cases. |
| 152 | + |
| 153 | +### sbt |
| 154 | + |
| 155 | +For Scala 2 and Scala 3. |
| 156 | + |
| 157 | +We fixed the Apache Ivy External Entity Reference vulnerability ([CVE-2022-46751](https://github.com/advisories/GHSA-2jc4-r94c-rp7h)) in [sbt/ivy#46](https://github.com/sbt/ivy/pull/46) and [coursier/coursier#2823](https://github.com/coursier/coursier/pull/2823). |
| 158 | + |
| 159 | +We announced the ownership transfer of sbt from Lightbend to the Scala Center in a [scala-lang.org blog post](https://scala-lang.org/news/2023/08/25/sbt-license-transfer.html). |
| 160 | + |
| 161 | +Following the ["sbt 2 ideas" blog post](https://eed3si9n.com/sbt-2.0-ideas) and [discussion](https://github.com/sbt/sbt/discussions/7174) initiated by Eugene Yokota, we collected all the ideas and started shaping a roadmap for sbt 2. |
| 162 | +The roadmap was presented and discussed at the Scala Days co-located Tooling Summit. |
| 163 | +We also started the review of sbt in Scala 3 ([sbt/sbt#](https://github.com/sbt/sbt/pull/6746)) opened by Eugene Yokota earlier this year. |
| 164 | + |
| 165 | +### Migration of the last packages published to the JFrog artifactory |
| 166 | + |
| 167 | +For Scala 2 and Scala 3. |
| 168 | + |
| 169 | +Since the JFrog artifactory incident on April 7, 2023, we have implemented several measures to mitigate such accidents in future. |
| 170 | +Most of the work is now finished, and we migrated all crucial packages away from the JFrog repository. |
| 171 | +The last remaining packages are sbt native binaries. |
| 172 | +We implemented a new repository which will serve the remaining packages to complete this project, although that is not released. |
| 173 | + |
| 174 | +### Debugger in Metals |
| 175 | + |
| 176 | +For Scala 2 and 3. |
| 177 | + |
| 178 | +We continued working on the stack trace view of the debugger, to print the Scala signatures of methods instead of the erased Java ones. |
| 179 | +To do so, we are building a binary to TASTy decoder of all the classes and methods produced by the compiler. |
| 180 | +The work-in-progress PR is [scalacenter/scala-debug-adapter#599](https://github.com/scalacenter/scala-debug-adapter/pull/599). |
| 181 | +We tested this decoder on the class files of the Scala 3 compiler itself and we managed to decode all the classes and about 85% of the methods. |
| 182 | +We are confident about reaching 99% coverage in the next few weeks. |
| 183 | +We will then release the better stack traces in the debugger, and the binary to TASTy decoder as a separate library. |
| 184 | + |
| 185 | +## Community and Contributor Experience |
| 186 | + |
| 187 | +For Scala 2 and Scala 3 throughout. |
| 188 | + |
| 189 | +### Scastie |
| 190 | + |
| 191 | +The highlight of this quarter for Scastie is that it now supports autocompletion. |
| 192 | +We improved the logic so that it works more reliably. |
| 193 | + |
| 194 | +Another major update is the new syntax highlighting based on tree-sitter, which is currently under review. |
| 195 | +It is a major improvement from the previous `lezer`-based parser. |
| 196 | + |
| 197 | +We also improved the stability of Scastie and fixed several issues with the Metals integration ([scastie#856](https://github.com/scalacenter/scastie/pull/856), [scastie#885](https://github.com/scalacenter/scastie/pull/885), [scastie#894](https://github.com/scalacenter/scastie/pull/894), [scastie#895](https://github.com/scalacenter/scastie/pull/895), [scastie#896](https://github.com/scalacenter/scastie/pull/896), [scastie#898](https://github.com/scalacenter/scastie/pull/898), [scastie#899](https://github.com/scalacenter/scastie/pull/899)). |
| 198 | + |
| 199 | +### Improving the Getting Started Experience for OSS Contibutors |
| 200 | + |
| 201 | +We want to make contributing to Scala a more friendly and welcoming experience. |
| 202 | +Building on our work in 2022 to improve the getting started steps for contributors [described on docs.scala-lang.org](https://docs.scala-lang.org/contribute/), we added more visible links, including to join the Scala Sprees, co-hosted with events such as Scala Days. |
| 203 | +Relevant PRs: [scala/docs.scala-lang#2894](https://github.com/scala/docs.scala-lang/pull/2894) and [scala/docs.scala-lang#2896](https://github.com/scala/docs.scala-lang/pull/2896) |
| 204 | + |
| 205 | +### Scala Days and Co-Located Events |
| 206 | + |
| 207 | +In collaboration with Xebia Functional, we organized the Scala Days conference in Madrid and a number of co-located events around it: |
| 208 | + |
| 209 | +* [Scala Bridge](https://scaladays.org/madrid-2023/scala-bridge), lead by Zainab Ali and Noel Welsh - a Scala workshop for beginners to attract more newcomers without programming background to the Scala community. |
| 210 | +* [Scala Spree](https://github.com/scalacenter/sprees), lead by Jamie Thompson - a hackathon for the Scala developers to hack on OSS projects together with the maintainers of those projects. |
| 211 | +* Tooling Summit, lead by Chris Kipp - a meeting of the Scala tooling stakeholders to get to the same page on the future of the Scala tooling ecosystem. |
| 212 | +* In-person [SIP](https://docs.scala-lang.org/sips/process-specification.html) meeting, lead by Anatolii Kmetiuk, where the SIP committee members got a chance to speak to each other in person and otherwise do an ordinary SIP meeting. |
| 213 | + |
| 214 | +In addition, we held a booth, focused on our fundraising campain (see below), and gave a few talks during the main conference: |
| 215 | + |
| 216 | +* "Choose your own Scala Center Roadmap": an interactive talk by the whole team where attendees selected what topics of our roadmap they wanted to hear about. |
| 217 | +* "10 years of Scala.js", by Sébastien Doeraene |
| 218 | +* "Polymorphic function types in Scala 3", by Guillaume Martres |
| 219 | + |
| 220 | +### Scala Center Fundraising Initiative |
| 221 | + |
| 222 | +For the first time since its inception in 2016, the Scala Center is organizing a [fundraising campaign](https://www.scala-lang.org/blog/2023/09/11/scala-center-fundraising.html). |
| 223 | +The campaign involves attracting new [corporate sponsors](https://scala.epfl.ch/corporate-membership.html) as well as individual donors to ensure we keep [serving Scala and its ecosystem](https://scala.epfl.ch/records/first-five-years/). |
| 224 | +Our participation to Scala Days with our booth and roadmap talk was a significant part of spreading the word and speaking to people from the community and industry who might be interested in joining the Advisory Board. |
| 225 | + |
| 226 | +### Governance |
| 227 | + |
| 228 | +We made a second iteration of the Governance page for the scala-lang.org website, and added navigation links to it in the page footer. |
| 229 | +The changes include addition of further links, clarifications of the roles of various organisations, and more precise descriptions of various elements. |
| 230 | +These changes were delivered in PRs [scala/scala-lang#1547](https://github.com/scala/scala-lang/pull/1547), [scala/scala-lang#1548](https://github.com/scala/scala-lang/pull/1548), [scala/docs.scala-lang#2902](https://github.com/scala/docs.scala-lang/pull/2902), and [scala/scala-lang#1553](https://github.com/scala/scala-lang/pull/1553). |
| 231 | + |
| 232 | +### Sustainability and Responsibility in the Scala Open Source Ecosystem |
| 233 | + |
| 234 | +During the last quarter, we had published [introductory blog post](https://www.scala-lang.org/blog-detail/2023/03/02/sustainability.html) about a series of interviews related the sustainability in the Scala Open Source ecosystem. |
| 235 | + |
| 236 | +We now published the first [interview in the series, with Goldman Sachs](https://www.scala-lang.org/blog/2023/08/23/goldman-sachs-leader-open-source-contributions.html). |
| 237 | +We finalized several more interviews, whose releases will roll out in the coming weeks and months. |
0 commit comments