Scala Center Monthly Update — October 2021

The mission of the Scala Center is to steward open-source development and education in the Scala ecosystem. The Scala Center creates high-quality free educational material, it creates open-source tools increasing the productivity of Scala developers, and it guides and supports the Scala community.

Dear community,

In this post, we would like to share what the Scala Center team has achieved in October.

Compiler

TASTy Reader

The TASTy reader allows Scala 2.13 programs to use libraries compiled with Scala 3. The release of Scala 3.1.0 introduced a new version of the TASTy format, which is not supported by Scala 2.13.6.

We have updated the implementation of the TASTy reader in the Scala 2.13 compiler to support Scala 3.1.0 (scala/scala#9791). This has been released in Scala 2.13.7.

Scala 3 Support in Scala Native

We implemented initial support for the generation of NIR files (ie, Scala Native binaries) as a Scala 3 compiler plugin, and for test frameworks (JUnit and reflective instantiation).

Energy Efficiency of Scala

This project assesses the energy efficiency of Scala programs, based on the article “Ranking programming languages by energy efficiency”.

We have collected all the benchmarks that are necessary to run the experiment, and we wrote an alternative version of each benchmark in a more Scala-idiomatic style.

Metals related improvements

  • Annotations are now added to the generated semanticdb files
  • Better support for annotations in completions and hovers (downstream used by Metals)

Ecosystem

Scaladex

Scaladex is an index for Scala libraries. The project suffers from usability and reliability issues.

We made the underlying infrastructure more reliable by overhauling the persistent storage system. We improved the performances (scalacenter/scaladex#729, scalacenter/scaladex#723), and the “Scaladex badge” (scalacenter/scaladex#722).

Coursier

Coursier can be used as an installer for Scala. However, it was reported by the Advisory Board that it suffers from several issues that make it unsuitable for beginners.

We fixed the support of Scala 3 artifacts resolution (coursier#2194). We implemented the support for installing an application from a zip file (coursier#2193) so that coursier can install the official sbt script and launcher. We proposed a technical solution to merge Scala 2 with Scala 3 related applications (coursier#2231).

sbt

We added support for sources in the base directory in sbt BSP implementation (coursier#6701).

Scala Debug Adapter

After the release of expression evaluation in Scala 2.12 and Scala 2.13, we fixed a number of bugs in the debug adapter itself and its integration with Bloop and Metals. Also we added support for Java 17 (scalacenter/scala-debug-adapter#115).

Metals

We rewrote the sbt-metals plugin so that it fully relies on the official SemanticdbPlugin from sbt (scalameta/metals#3200).

New Metals releases https://scalameta.org/metals/blog/2021/10/26/tungsten and https://scalameta.org/metals/blog/2021/11/03/tungsten which bring in:

  • Expression evaluation for Scala 2
  • Type on selection
  • Text search in dependencies
  • New Scala 3.1.0 and 2.13.7 support
  • Source file analyzer
  • Numerous Scala 3 improvements

Bloop

Two new releases https://github.com/scalacenter/bloop/releases/tag/v1.4.10 and https://github.com/scalacenter/bloop/releases/tag/v1.4.11 :

  • Improvements for Maven support
  • Fix for Scala 2.13.7
  • Console completions fix
  • Gradle support improvements
  • Generate semanticdb for Java files as an option

Education

Scala Documentation Website

We identified several areas of improvement in the Scala documentation website, which we summarized here.

We unified the two “Getting Started” pages for Scala 2 and Scala 3 into a single page that supports both versions of Scala (scala/docs.scala-lang#2197). We added a search bar on every page (scala/docs.scala-lang#2201). We clarified the structure of the navigation menus (scala/docs.scala-lang#2206).

MOOCs

We added new lessons to clarify the syntax of literal functions, and to introduce exceptions, in Effective Programming in Scala. We also polished the feedback returned by the automated graders to make it more helpful and actionable.

Scala at Universities

As part of our education mission, we want to promote the usage of Scala as a vehicle to teach programming and software engineering. We are currently running a study to identify the factors that lead professors to use Scala.

We interviewed 8 university professors. We will publish a summary of our main findings next month.

External Communication

Scala Italy

Scala Italy happened online on the 23th of October.

We gave a talk demonstrating how to write a full-stack application in Scala 3.

Scalabase

Scalabase is a conference for developers in the early stages of their Scala journey. It happened online on the 28th of October.

We run an “install party” to assist new users in installing the required tools to program in Scala, and then we run a workshop guiding the attendees in the implementation of a Snake Game. You can find the material here.

ScalaCon

ScalaCon is a series of virtual conferences designed to bring the Scala community closer together.

We have prepared several talks that we will give during the conference: “Boost your productivity with Scala tooling!”, and “Metals—Your IDE for Scala 3”.

Let’s Talk About Scala 3 Video Series

Series of short videos about Scala 3, covering a variety of themes like how to get started, how to take advantage of the new language features, or how to migrate from Scala 2.

We wrote the script of a new video about Program Entry Points in Scala 3.

LinkedIn

We presented the LinkedIn strategy to the Scala Center team and enrolled four people to be part of the editorial tech team. We agreed on a posting schedule and decided on the content for Q4 2021 with the editorial tech team.

20 Likes

This is all great work. On the energy efficiency one, I think it would be great to get Scala back into the Programming Language Shootout page. It used to be there and I’m not certain what caused it to be removed. This indicates that Scala versions of the benchmark programs have been written. Any chance they could be submitted/added? I haven’t contributed anything to that in many years, since writing the first N-body benchmark. It’s a much different site now and I haven’t looked into how contributions are made recently.

3 Likes

Thank you for your enthusiasm! To be honest, I don’t know why the Scala versions of these programs have been removed, but yes, there were some Scala versions of the Programming Language Shootout benchmarks. We will see if it is possible to add them back when we are done with our experiments.

From what I remember both scala and clojure were removed from shootout because they were basically written in java, just with the scala/clojure syntax/ nobody was interested in them

We should try to get them back in. You can write perfectly idiomatic Scala that is as fast as Java.

6 Likes