diff --git a/projects.md b/projects.md index 4113d1a..93c58df 100644 --- a/projects.md +++ b/projects.md @@ -1,3 +1,3 @@ --- -redirect_to: /records/2023-Q4-roadmap.html +redirect_to: /records/2024-Q1-roadmap.html --- diff --git a/records.md b/records.md index d88e71f..ff073d0 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 %}). +- [2023, Q4]({% link records/2023-Q4-activity-report.md %}) - [2023, Q3]({% link records/2023-Q3-activity-report.md %}) - [2023, Q2]({% link records/2023-Q2-activity-report.md %}) - [2023, Q1]({% link records/2023-Q1-activity-report.md %}) diff --git a/records/2023-Q4-activity-report.md b/records/2023-Q4-activity-report.md new file mode 100644 index 0000000..131ac5f --- /dev/null +++ b/records/2023-Q4-activity-report.md @@ -0,0 +1,251 @@ +--- +layout: contact +title: Scala Center Activity Report for 2023 Q4 +--- + +Scala Center team: +Darja Jovanovic, 100%; +Anatolii Kmetiuk, 100%; +Adrien Piquerez, 80%; +Jamie Thompson, 100%; +Sébastien Doeraene, 80%; +Guillaume Martres, 20%; +Valérie Meillaud: 30%. +VirtusLab team: Jędrzej Rochala, 100%. + +## At a Glance +{: .no_toc} + +* Table of Contents +{:toc} + + +## Language, Compiler, Standard Library + +### 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, but would like to highlight one. + +Our previous work on [SIP-56, Specification for Match Types](https://docs.scala-lang.org/sips/match-types-spec.html), landed. +It will be released as part of Scala 3.4.0, which is currently in the Release Candidate phase. +The new specification and implementation provide a strong basis for future stability of the compiler. +Feedback from Release Candidates surfaced a few minor issues, which we have addressed. +We still intend to improve on this topic, notably in the area of error reporting. + +### Compile Progress reporting + +For Scala 2 and 3. + +A key part of the user experience is estimating how long you still have to wait for builds to run. +Both Metals and IntelliJ can report this information to the user, through a dedicated interface to the compiler. +Until now this was not supported by Scala 3, but added an integration to the compiler in PR [lampepfl/dotty#18739](https://github.com/lampepfl/dotty/pull/18739). + +Metals combined with sbt as a BSP server was not reporting progress from either Scala 2 or 3, so we fixed that in PR [scalameta/metals#5788](https://github.com/scalameta/metals/pull/5788). + +### Scala.js maintenance + +For Scala 2 and 3. + +We released [Scala.js 1.15.0](https://www.scala-js.org/news/2023/12/29/announcing-scalajs-1.15.0/) during this quarter. + +The main highlight of this release is that it makes Scala.js ready for [SIP-51, Drop Forwards Binary Compatibility of the Scala 2.13 Standard Library](https://docs.scala-lang.org/sips/drop-stdlib-forwards-bin-compat.html). +That will allow us to evolve the Scala 2.13.x standard library. + +### Improving Performance of the Scala 3 compiler + +For Scala 3. + +#### Support for pipelined concurrent compilation + +Pipelined concurrent builds are a technique for increasing throughput in the context of multi-module projects. +The concept is that dependent modules can begin compilation "as-soon-as" necessary artifacts for separate compilation can be produced. +In the Scala compiler, these products can be emitted about 30-40% into the compilation of a single module (even sooner if outline type-checking is used). + +Pipelined builds have been implemented in sbt since 1.4, with support in Scala 2.13. +We have made critical progress towards supporting them also in Scala 3. + +In PRs [lampepfl/dotty#19074](https://github.com/lampepfl/dotty/pull/19074) and [lampepfl/dotty#19259](https://github.com/lampepfl/dotty/pull/19259) we stabilised the production of outline signatures in TASTy for Java source programs. +That is is necessary for pipeline compilation of mixed Java/Scala projects. + +In PR [lampepfl/dotty#18880](https://github.com/lampepfl/dotty/pull/18880) we are close to finalising support for the semantics expected by Zinc's model of pipeline compilation, and aim to merge it in Q1 2024. + +#### Support for outline compilation + +In PR [lampepfl/dotty#19589](https://github.com/lampepfl/dotty/pull/19589) we are experimenting with an outline type checking mode, which builds on top of pipelining. +It also gives us the chance to test out how compatible the compiler is with rudimentary batch parallel compilation of a single module. +So far we can reduce the time to compile Scala 3 itself by a third, compared to no-pipelining. +We demonstrated that work at Scala Italy, the London Scala User Group and finally the Paris Scala User Group. + +### Scala 3 New Features + +For Scala 3. + +#### SIP-57 `runtimeCheck` + +We made a proposal [SIP-57](https://github.com/scala/improvement-proposals/pull/67) to provide a better replacement for the `@unchecked` annotation, for the purpose of pattern match checking. +This proposal will enable making unsafe pattern matches an error by default, by providing a convenient and readable way to tell the compiler to ignore checks for safety. + +#### Dropping `withFilter` by default in for comprehension in 3.4 + +In PR [lampepfl/dotty#18842](https://github.com/lampepfl/dotty/pull/18842) we activated the feature to prevent calls to `withFilter` being generated by default in for comprehensions. + +The improvement for users is more data types can be used in for comprehensions, as long as the pattern in a generator is statically guaranteed to match, or else report an error. +Developers can opt out of this check, and generate `withFilter` instead, by adding `case` before a pattern. + +### 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. + +Four SIP meetings happended since the last report. +Of note: the previously mentioned [SIP-56, Specification for Match Types](https://docs.scala-lang.org/sips/match-types-spec.html), was approved for Implementation and later for Shipping. +Several new SIPs are in progress. + +### Better error messages for Scala 3 + +For Scala 3. + +In Q4 we started a campaign to get users to report problematic error/warning messages in Scala 3. +We created a new [issue template](https://github.com/lampepfl/dotty/pull/18672) and promoted it in [a blog](https://scala-lang.org/blog/2023/10/17/feedback-wanted-error-messages.html). +At the start we got many issues reported using the new template, and a lot of them were improved by compiler contributors, as we reported [on social media](https://x.com/scala_lang/status/1720423780382634276?s=20). + +At the Center itself we worked on improving the reporting of mismatched TASTy versions, as seen in PR [lampepfl/dotty#18828](https://github.com/lampepfl/dotty/pull/18828). + +We plan to promote this initiative again. + +## Developer Experience + +### Stable Presentation Compiler + +For Scala 3. + +This quarter, we focused on simplification and stabilisation of the Presentation Compiler of Scala 3. +The work includes missing code completion inside extension constructs, better error recovery from errors and alignment of text replacement logic with respect to Scala 2. +In terms of stability, we refactored the implementation of completions to rely on compiler logic, which not only deduplicated computations but also added missing completions. + +### sbt + +For Scala 2 and Scala 3. + +We have been reviewing the big PR ([sbt/sbt#6746](https://github.com/sbt/sbt/pull/6746)) opened by Eugene Yokota, which kick-starts the development of sbt 2. +Following the ["sbt 2 ideas" blog post](https://eed3si9n.com/sbt-2.0-ideas) and [discussion](https://github.com/sbt/sbt/discussions/7174), a significant focus of sbt 2 should be on simplifications and performance improvements. +After the initial PR was merged, we worked on consolidating and simplifying the internals. + +Noteworthy pull requests include: + +* [#7444 Reduce abstraction in `Execute` and around](https://github.com/sbt/sbt/pull/7444) +* [#7456 Remove `AList`, replace it with `TupleMapExtension`](https://github.com/sbt/sbt/pull/7456) + +### Debugger in Metals + +For Scala 3 mostly. + +We made significant progress on Better Stack Traces for the debugger. +We finished the main work on decoding class files and method names. +We are now working on releasing an independent library for decoding stack traces, which will provide better stack traces for the debugger itself, but also Scastie, scala-cli, running applications, etc. + +We also improved on smaller areas of the debugger: better information for Metals, support of Scala 3.4, and better handling of exported methods. + +### Support Scala CLI in Scala Steward + +For Scala 2 and 3. + +Scala Steward became a critical tool for maintenance of open source projects. +It had minimal support for Scala CLI projects for a long time, but now in PR [scala-steward-org/scala-steward#3188](https://github.com/scala-steward-org/scala-steward/pull/3188) we added support for the various ways to declare dependencies with using directives. + +### Scastie maintenance + +For Scala 2 and 3. + +We made various improvements to Scastie, mostly affecting the editor experience. +This includes the new tree-sitter-based syntax highlighter that we mentioned in the last report. + +We started collecting Metals crashes happening within Scastie, which will be used to improve the quality and stability of our tooling. + +### Scastie Scala-CLI + +For Scala 2 and 3. + +We resumed work on scala-cli support for Scastie. +It is now under review, and we are still working on it for the upcoming quarter. +This improvement will improve the performance of Scastie and will provide a fully-pledged scala-cli in the browser. + +### tasty-query maintenance + +For Scala 2 and 3. + +We fixed a number issues in [tasty-query](https://github.com/scalacenter/tasty-query), notably when processing Scala 2 artifacts. +They were mostly driven by the needs of the debugger, mentioned above. + +We made the entire API of tasty-query thread-safe. +It is now possible to safely use tasty-query from parallel algorithms. +As a concrete use case, we have a prototype of [tasty-mima](https://github.com/scalacenter/tasty-mima) running in parallel, making it about twice as fast. + +## Documentation and Education + +### Work-in-progress AI integration + +For Scala 2 and Scala 3. + +We are investigating the possibility of improving the usability of the Scala documentation by integrating it with the latest advancements in AI. +At the moment, we are in an exploratory phase internally within the Scala Center. +We have a prototype implementation for question-answering with internal data. +We are planning to extend this solution to the Scala documentation so that Scala users can get their questions answered in chat format. + +## Community and Contributor Experience + +For Scala 2 and Scala 3 throughout. + +#### Scala Advent of Code + +As in the past two years, we stewarded the participation to [Advent of Code](https://adventofcode.com/) for Scala developers. + +One of our core priorities is to communicate excitement about Scala. +We participate in the Advent of Code so that we can share to the wider programming community how great Scala is for solving these programming puzzles. +Another key priority is to improve the onboarding experience for newcomers. +We hope that we will be able to share the solutions as a "Scala by Example" showcase to newcomers, giving a vital first impression of elegant Scala code. + +This year, we increased overall engagement from the community, with 45% more solutions contributed than last year, and many first-time participants in the Scala Discord channel. +We also engaged many more volunteers from outside of the Scala Center to write articles (with 100% coverage: each day now has a full article!), a vast improvement from 2022. +We could have done more promotion but overall we had good results. + +See the [announcement blog](https://scala-lang.org/blog/2023/11/23/advent-of-code-announce.html) and [recap blog](https://scala-lang.org/blog/2024/01/10/advent-of-code-recap.html) for more details. + +### 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). +We collaborated with both new and experienced contributors on issues such as [dotty#19464](https://github.com/lampepfl/dotty/pull/19464) and [dotty#19463](https://github.com/lampepfl/dotty/pull/19463). + +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. + +### GSoC 2023 Finalization + +During this quarter, we finalized the cycle for the 2023 edition of Google Summer of Code. +Six students successfully completed their projects. +You can read more about our GSoC 2023 results, including all the projects our contributors worked on, in [our dedicated blog article](https://scala-lang.org/blog/2023/12/20/gsoc-report.html). + +### Collaboration with ESL + +As part of our effort to promote usage of Scala at EPFL, and to gather the Scala community around common initiatives, we started a collaboration with the Embedded Systems Lab at EPFL. +They have an interest in using Scala for circuits design with Chisel. +Our common objective is to establish a semester project track for students at EPFL in which they can do hardware design with Scala as part of their studies. + +Currently, we are in the process of helping ESL to integrate Chisel within their existing System Verilog-based setup. +Once done, the work will be available on GitHub and may be also useful for people outside EPFL who are working in the domain. + +### Scala Center Fundraising Initiative + +We continued our ongoing fundraising effort, exploring various avenues to establish partnerships with the industry. +We have started to research the possibility of registering the Scala Center as a US non-profit, which would allow contributions from US-based companies to be tax-exempt. +We are also working on the structure of our corporate membership. +Both of these are work in progress. diff --git a/records/2024-Q1-roadmap.md b/records/2024-Q1-roadmap.md new file mode 100644 index 0000000..ac579f5 --- /dev/null +++ b/records/2024-Q1-roadmap.md @@ -0,0 +1,135 @@ +--- +layout: contact +title: Scala Center Roadmap for 2024 Q1 +--- + +This page lists the projects that the Scala Center plans to work on during 2024 Q1. +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 2023 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. + +#### Scala.js-specific minifier + +At the beginning of this year, we implemented an initial version of a global property renamer for the Scala.js linker. +The results are very promising, but they are not enough to be on par with what the Google Closure Compiler offers. + +In this quarter, we will improve on what we have to get a generalized Scala.js-specific minifier. +Strategies we are looking into include prototype compression, code factorization, and better dead code elimination based on a purity analysis. + +We intend to ship this new minifier in the first half of this quarter, as part of Scala.js 1.15.1. + +#### Compiler Performance + +In this quarter, we will continue the work we have been doing to improve compiler performance. +In particular, we expect to continue our work on pipelining. + +#### 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. + +### Improvement Process for the library + +Following the successful launch of the Scala Improvement Process for Scala 3, we are looking to establish a similar process for the Scala Standard Library evolution. +This will be necessary once we effectively implement [SIP-51, Drop Forwards Binary Compatibility of the Scala 2.13 Standard Library](https://docs.scala-lang.org/sips/drop-stdlib-forwards-bin-compat.html). + +#### Better Compilation Error Messages + +The compiler should help developers write correct code instead of "just complaining" about incorrect code. +The compiler should also guide you to write maintainable code, i.e., it should provide linting features. + +As follow-up to our work on match types from the past 6 months, we will work on improving diagnostics for errors involving match types. + +### Documentation and Education + +Our mission is to simplify 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 + +As soon as scala-cli gets officially released as the new Scala command ([SIP-46](https://docs.scala-lang.org/sips/scala-cli.html)), we will update the getting started experience to be based on it. +We will create 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. + +### 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. + +#### Better Stack Traces + +The stack traces we get from the JVM are not ideal for Scala developers. +The contain a lot of compiler-generated helpers, and only display the JVM erased types of parameters and result. +These issues make them hard to read and correlate to the source code. + +With the help of tasty-query, we have beend developing a library that links run-time JVM classes and methods to the original TASTy symbols, corresponding to the source code, which we will release during this quarter. +This allows to build better stack traces, where compiler-generated helpers (synthetic methods) are hidden, and where types are the full, original Scala types. + +As we are getting close to completion of that library, we are now going to release it, and start leveraging it in various tools: the debugger, scala-cli, etc. + +#### ExplicitResultTypes in scalafix for Scala 3 + +Most rules in scalafix are based on Scalameta trees and SemanticDB information, which makes them portable across Scala 2 and 3. +ExplicitResultType is a significant exception, because it directly uses the Scala presentation compiler. +We will work on porting that rule to Scala 3 to bring scalafix support on par with Scala 2. + +#### sbt 2.x + +As mentioned in our 2023 Q4 report, work on sbt 2.x has started. +One of the main early tasks consists in migrating the existing codebase to Scala 3. + +The initial PR landed in the past quarter, but much remains to be done. +Some macros, in particular, were left behind in the initial migration. +During this quarter, we will contribute to finishing the migration to Scala 3. + +### 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 +- sbt +- 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.