diff --git a/projects.md b/projects.md index 4639cf3..cc6f73b 100644 --- a/projects.md +++ b/projects.md @@ -1,3 +1,3 @@ --- -redirect_to: /records/2024-Q2-roadmap.html +redirect_to: /records/2024-Q4-roadmap.html --- diff --git a/records.md b/records.md index 71c2d09..b3259d9 100644 --- a/records.md +++ b/records.md @@ -14,6 +14,7 @@ Every quarter, the Scala Center publishes an activity report detailing the work that has been achieved. You can find the roadmap for the current quarter in the [Projects page]({% link projects.md %}). +- [2024, Q2-Q3]({% link records/2024-Q2-Q3-activity-report.md %}) - [2024, Q1]({% link records/2024-Q1-activity-report.md %}) - [2023, Q4]({% link records/2023-Q4-activity-report.md %}) - [2023, Q3]({% link records/2023-Q3-activity-report.md %}) diff --git a/records/2024-Q2-Q3-activity-report.md b/records/2024-Q2-Q3-activity-report.md new file mode 100644 index 0000000..ba0b2ea --- /dev/null +++ b/records/2024-Q2-Q3-activity-report.md @@ -0,0 +1,207 @@ +--- +layout: contact +title: Scala Center Activity Report for 2024 Q2-Q3 +--- + +Scala Center team: +Darja Jovanovic, 100%; +Adrien Piquerez, 80%; +Jamie Thompson, 100% until July 31st; +Sébastien Doeraene, 100% until June 30th, 50% since then; +Guillaume Martres, 20%; +Valérie Meillaud: 30%. +VirtusLab team: Gabriel Kepka, 100% since July 1st. + +## At a Glance +{: .no_toc} + +* Table of Contents +{:toc} + + +## Language, Compiler, Standard Library + +### SIP 46 - bundle Scala CLI as the Scala command + +For Scala 3. + +Starting with Scala 3.5.0, Scala CLI is released in the binary distribution as the `scala` command (PR [scala/scala3#20351](https://github.com/scala/scala3/pull/20351) and PR [scala/scala3#20631](https://github.com/scala/scala3/pull/20631)). +We adapted Scala CLI to support wrapping it in a script that overrides some default options, such as reading from a local classpath. + +We also fixed the coursier `install` command to support mixing both JVM and native launchers (PR [coursier/coursier#2975](https://github.com/coursier/coursier/pull/2975)). +This ensured that earlier versions of Scala, including Scala 2, can be used with the newly distributed `scala` command. + +### SIP 57 - replace nonsensical `: @unchecked` with `.runtimeChecked` + +For Scala 3. + +We implemented [SIP 57](https://docs3.scala-lang.org/sips/replace-nonsensical-unchecked-annotation.html) in the PR [scala/scala3#20987](https://github.com/scala/scala3/pull/20987). +It brings a safer and more intuitive way to disable pattern matching exhaustivity checks. +The previous approach could lead to accidental unsoundness issues. + +### Maintainance of the Scala 3 Compiler + +For Scala 3. + +Every month, about 100 new issues are opened on [the Scala 3 repository](https://github.com/lampepfl/dotty/). +The project welcomes any help it can get in triaging, bug-fixing, PR reviewing, etc. + +Our goal is to solve long-standing issues while keeping up with new ones. +We also aim to get more people involved in working on the compiler to ensure the sustainability of the project. + +We contributed PRs for bug fixes in various areas, notably: `-Xcheck:unused`, annotations, match types, `lazy val`s, named tuples, and the TASTy format. + +### Improving Performance of the Scala 3 compiler + +For Scala 3. + +#### Support for pipelined concurrent compilation + +We cleaned up various aspects of the build pipelining implementation based on feedback from users. +Notably, we now write the pipeline tasty in parallel, and detect missing macro dependencies while reporting to the user how to fix the problem (PR [scala/scala3#20139](https://github.com/scala/scala3/pull/20139)). + +#### Computing compilation metadata in parallel + +We concluded supervision of a student project to compute Zinc metadata in parallel to the compiler using TASTy Query. +The experimental findings suggest that the TASTy Query library has adequate capabilities to perform the task, but has a slow startup due to classpath loading. +We would likely need a layered classpath to share information between repeat compilations for the approach to yield real performance improvements. + +### Develocity setup + +For Scala 2 and Scala 3. + +Gradle is providing us with a [free instance of Develocity](https://develocity.scala-lang.org/) through their [open-source program](https://gradle.com/customers/oss-projects/). +We are partnering with them to integrate Develocity in the Scala 3 compiler build ([#21386](https://github.com/scala/scala3/pull/21386), [#21479](https://github.com/scala/scala3/pull/21479)), with support for: + +- Publishing build scans from the CI +- Automatic test retries and flakiness detection +- Build caching (planned for the future) + +In parallel, Lukas Rytz from Lightbend started integrating Develocity in the Scala 2 compiler build ([#10848](https://github.com/scala/scala/pull/10848)). + +### WebAssembly backend for Scala.js + +For Scala 2 and 3. + +In Q1, we had developed a proof-of-concept implementation of WebAssembly backend for Scala.js, in collaboration with VirtusLab. +In the past few months, we have polished it and [merged it into Scala.js upstream](https://github.com/scala-js/scala-js/pull/4988). +Huge thanks go to Tobias Schlatter, co-maintainer of Scala.js, for *reviewing* that mega PR of 13,000 lines of code! + +In addition to the baseline implementation, we implemented several low-hanging fruit optimizations. +Initial performance measurements are very encouraging, as they show that we can reach a 15% geomean speedup over Scala.js. +We already merged most optimizations into Scala.js. + +The WebAssembly backend will be shipped as part of Scala.js 1.17.0. + +In order to further improve performance and code size, we will integrate with [`wasm-opt`](https://github.com/WebAssembly/binaryen), a Wasm-to-Wasm optimizer. +We contributed [support for the new Wasm Exception Handling spec in `wasm-opt`](https://github.com/WebAssembly/binaryen/pull/6814), since our backend relies on it. + +In parallel, VirtusLab is experimenting with a variant of this backend that targets Wasm runtimes without JavaScript. +This new target will significantly expand the reach of Scala as a language. + +### TASTy Reader for Scala 2 + +For Scala 2. + +We added support in Scala 2.13.15 (PR [scala/scala#10811](https://github.com/scala/scala/pull/10811)) for TASTy produced by Scala 3.5. + +### Scala Improvement Process + +For Scala 3. + +The [Scala Improvement Process](https://docs.scala-lang.org/sips/) coordinates the evolution of the language. +It ensures that the decisions are made by taking into account the needs of all the stakeholders of the language. + +## Developer Experience + +### Scala Toolkit + +For Scala 2 and Scala 3. + +We released 3 versions of the Toolkit: + +- [0.3.0](https://github.com/scala/toolkit/releases/tag/0.3.0): the final version supporting Scala Native 0.4 +- [0.4.0](https://github.com/scala/toolkit/releases/tag/0.4.0): dropped support for Scala Native 0.4, and added support for Scala Native 0.5 +- [0.5.0](https://github.com/scala/toolkit/releases/tag/0.5.0): updated library versions + +### Documentation + +For Scala 2 and Scala 3. + +We wrote a tutorial on building web servers with Cask, to add to the collection of Toolkit tutorials. +We started adapting the documentation to use `scala-cli` as the new Scala runner, since Scala 3.5.0 is now released. + +We also worked on documenting features not yet included in the documentation, such as binding patterns to variables in pattern matching. + +### Debugger in Metals + +#### The Scala 2 expression compiler + +For Scala 2 only. + +In the past, we dedicated significantly more time in developing the Scala 3 expression compiler compared to the Scala 2 one. +The Scala 2 expression evaluator barely worked in simple cases, but it could not handle more complex source files. +To resolve this, we rewrote the Scala 2 expression compiler from scratch ([#701](https://github.com/scalacenter/scala-debug-adapter/pull/701)), mirroring the Scala 3 implementation. +The two expression compilers are now aligned closely enough to share the same test suite and be simultaneously maintained. + +#### The Scala 3 binary decoder + +For Scala 3 only. + +We developed the Scala 3 binary decoder to decode stack traces, and printing fully-typed method signatures in the debugger. +In this quarter we extracted it to its own repository ([scalacenter/scala3-binary-decoder](https://github.com/scalacenter/scala3-binary-decoder)), in order to spread its usage to other tools of the ecosystem, such as Scastie and Scala CLI. + +Additionally, we made significant progress on decoding fields ([#2](https://github.com/scalacenter/scala3-binary-decoder/pull/2)) and variables ([#3](https://github.com/scalacenter/scala3-binary-decoder/pull/3)), which will be useful for the debugger. + +### Scaladex + +As part of GSoC, we mentored two Scaladex projects: + +* We added an intermediate artifacts page, to list the artifacts of a project by name, ordered by the latest version. For instance, see [cats/artifacts](https://index.scala-lang.org/typelevel/cats/artifacts). +* We extracted additional information from POM files: version scheme, full Scala version and developers. For instance, see [cats/artifacts/cats-core/2.12.0](https://index.scala-lang.org/typelevel/cats/artifacts/cats-core/2.12.0). + +### sbt + +For Scala 2 and Scala 3. + +In addition to addressing various bugs ([#1140](https://github.com/sbt/zinc/pull/1382), [#7568](https://github.com/sbt/sbt/pull/7568)), we actively participated in the development of sbt 2, led by Eugene Yokota. +We centered our efforts on stability ([#7522](https://github.com/sbt/sbt/pull/7522), [#7538](https://github.com/sbt/sbt/pull/7538)) and error reporting ([#7539](https://github.com/sbt/sbt/pull/7539)). +Additionally we investigated straight-to-JAR compilation, which aims to boost performance on Windows and streamline the implementation of cached compilation ([#7592](https://github.com/sbt/sbt/pull/7592)). + +## Community and Contributor Experience + +For Scala 2 and Scala 3 throughout. + +### Google Summer of Code + +Google Summer of Code (GSoC) has been a long-standing vehicle for the Scala Center to attract newcomers to the Scala OSS world. + +The Scala Center acts as an organization shepherding the projects related to Scala. +As such, we perform administrative tasks and mentor several projects. + +The program for this year is coming to an end. +All of this year's 10 projects passed their midterm evaluation several weeks ago. +Final evaluations of students are in progress. + +Find our more about the various projects on [the GSoC page for the Scala Center](https://summerofcode.withgoogle.com/programs/2024/organizations/scala-center). + +### Scala Matsuri 2024 + +We presented a talk about build tooling and build performance. +In the talk, we first explained how Scala build tools work. +We then reported on the progress we made in Pipelining and Progress tracking. +Finally, we reviewed the concepts of offloading work via parallel compilation. + +### Compiler Sprees + +We maintained our involvement in the [Scala 3 Compiler Academy Issue Spree](https://www.scala-lang.org/blog/2022/11/02/compiler-academy.html). + +Since its inception, the compiler spree has helped close [more then a hundred issues](https://github.com/lampepfl/dotty/issues?q=is%3Aissue+sort%3Aupdated-desc+label%3ASpree+is%3Aclosed) with the help of over 80 contributors. + +## Scala Center Administration + +### Sovereign Tech Fund + +We applied for a large grant from the [Sovereign Tech Fund](https://www.sovereigntechfund.de/) (STF), a governmental German fund that "supports the development, improvement, and maintenance of open digital infrastructure." +The STF has significantly contributed to the maintenance of several other open-source programming languages in the past, such as Ruby, Python and Node.js. +We are hopeful that they will choose to support Scala as well. diff --git a/records/2024-Q4-roadmap.md b/records/2024-Q4-roadmap.md new file mode 100644 index 0000000..17f907e --- /dev/null +++ b/records/2024-Q4-roadmap.md @@ -0,0 +1,110 @@ +--- +layout: contact +title: Scala Center Roadmap for 2024 Q4 +--- + +This page lists the projects that the Scala Center plans to work on during 2024 Q4. +We also post regular updates about our projects on the [Scala Contributors forum](https://contributors.scala-lang.org/c/scala-center/25). + +To have more information about our _completed_ projects, please see the [quarterly activity reports]({% link records.md %}). + +## Roadmap for 2024 Q4 +{: .no_toc} + +The following sections present our plan for the current quarter. +Every project description is followed by the concrete results we will deliver and their expected outcome on the Scala community. + +* Table of Contents +{:toc} + +### Language, Compiler, Standard Library + +Our mission is to reduce the number of bugs in the compiler implementation, to help the community to contribute to these tools, and to make sure they evolve in a way that takes into account the needs of the community. + +#### WebAssembly backend for Scala.js + +Scala.js 1.17.0 will soon ship with an initial release of the WebAssembly backend. +This initial implementation produces correct code (the entire test suite of Scala.js passes) and already contains low-hanging fruit optimizations. + +Further work is necessary to unlock better performance. +In particular, we will integrate with [`wasm-opt`](https://github.com/WebAssembly/binaryen), a Wasm-to-Wasm optimizer. +We already contributed support for the new Exception Handling spec, which our WebAssembly backend relies on. + +#### Scala Improvement Process + +The [Scala Improvement Process](https://docs.scala-lang.org/sips/index.html) is a process for submitting changes to the Scala language. +It aims to evolve Scala openly and collaboratively. + +We hold regular committee meetings, which we both coordinate and participate in. + +### Documentation and Education + +Our mission is to improve the structure and content of the website, to create and maintain high-quality online educational content (including online courses), and to help the community to contribute to the website. + +#### Getting Started experience with scala-cli + +Now that Scala 3.5.0 has been released with Scala CLI as the default Scala command ([SIP-46](https://docs.scala-lang.org/sips/scala-cli.html)), we are updating the getting started experience to be based on it. +We are creating a new learning path for beginners, recommending the new Scala command. +There will be emphasis on important Scala tooling, and how it helps the developer experience. + +#### Standard library API documentation + +Compared to other popular languages, the API documentation of our standard library is terse. +While that terseness is somewhat compensated by good collections guides, the Scaladoc remains an important source of documentation, as it is available right in our IDEs. + +We will start working on a library-wide review of the API documentation, and will make sure it contains comprehensive, standalone information. + +#### Tutorials + +We identified tutorials as a form of documentation that is underrepresented in the Scala ecosystem. +As part of the Scala Toolkit effort, we have been writing more tutorials to get things done in Scala. +We will continue doing so. + +### Developer Experience + +Our mission is to make sure the tools Scala developers use to edit, analyze, navigate through, transform, compile, run, and debug Scala programs are as easy to use as possible, that they work reliably for everyone, and deliver a great developer experience. + +#### sbt 2.x + +As mentioned in our past quarterly reports, work on sbt 2.x is well under way. + +Many tests now pass after the migration to Scala 3, but much remains to be done. +We are working on stabilization, as well as on build caching. + +In addition, we intend to work on the loading process. +We will investigate how we can make it lighter and faster. + +### Community and Contributor Experience + +Our mission is to create the best environment for the emergence of a strong Scala ecosystem made of high-quality, reliable, libraries that bring simple solutions to complex problems. + +#### Communication + +We will conduct actions aiming at communicating a positive image of Scala, and making people excited about it. + +- We will regularly share our achievements and engage the community on our projects _via_ our [LinkedIn](https://www.linkedin.com/company/scala-center/) page. +- We will speak at tech conferences and local meetups to encourage people to contribute to the Scala ecosystem, and to let non-Scala programmers know about Scala. + +### Maintenance Work + +We will also spend a small part of our time reviewing pull requests, triaging issues, and fix issues for the following projects, to make sure important points are addressed: + +- Scala 3 compiler +- Scala 2 TASTy reader +- Scala.js +- Scaladex +- Scalafix +- Scastie +- Coursier +- Bloop +- Metals +- sbt +- sbt-dependency-submission +- scala-debug-adapter +- tasty-query +- tasty-mima + +## Advisory Board Proposals +{: .no_toc} + +For reference, you can see [here](https://github.com/scalacenter/advisoryboard/tree/master/proposals) the list of Advisory Board proposals and their respective status.