Skip to content

Commit 2ae5731

Browse files
authored
Merge pull request #314 from sjrd/q3-2023-report
Add the activity report for Q3 2023 and roadmap for Q4 2023.
2 parents 551374d + 5242690 commit 2ae5731

File tree

2 files changed

+438
-0
lines changed

2 files changed

+438
-0
lines changed

records/2023-Q3-activity-report.md

Lines changed: 237 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,237 @@
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

Comments
 (0)