search term:

sudori part 8: no-op compilation performance

This is a blog post on sbt 2.x development, continuing from sbt 2.x remote cache, sudori part 4, part 5 etc. I work on sbt 2.x in my own time with collaboration with the Scala Center and other volunteers, like Billy at EngFlow. In this post, I want to highlight the perf improvement work I attempted in sbt 2.0.0-RC7, which was released yesterday.

no-op performance regression

Besides jump starting the plugin ecosystem, one of the motivations for the having release candidates of sbt 2.x is to start testing them with actual builds. As they say, everybody has an operational plan until they get punched in the mouth.

sbt 2.0.0-RC7

Hi everyone. On behalf of the sbt project, I am happy to announce sbt 2.0.0-RC7, a beta version of sbt 2.x. sbt 2.0 is a new version of sbt, based on Scala 3 constructs and Bazel-compatible cache system.

Please try it out, and report any issues you might come across. Note: sbt 2.0.0-RC7 will keep binary compatibility with 2.0.0 and 2.x.

Key changes since 2.0.0-RC6

See https://github.com/sbt/sbt/releases/tag/v2.0.0-RC7 for the full details.

sbt 1.12.0-M2

Hi everyone. On behalf of the sbt project, I am happy to announce sbt 1.12.0-M2. This is the twelfth feature release of sbt 1.x, a binary compatible release focusing on new features. sbt 1.x is released under Semantic Versioning, and the plugins are expected to work throughout the 1.x series. Please try it out, and report any issues you might come across.

The headline features of sbt 1.12.0 are:

  • Scala 3.8 REPL support

Full release note is here - https://github.com/sbt/sbt/releases/tag/v1.12.0-M2

Expecty 0.17.1

Expecty 0.17.1 is released. Expecty brings power assert (or power assertion) to Scala. It was originally implemented by Peter Niederwieser who implemented the original power assertion Spock in Groovy. It had gone dormant for a while, and I forked it in 2018, and started publishing it against modern build matrix like Scala 2.12, 2.13, 3.x, JVM, JS, and Native.

sbt 1.12.0-M1

Hi everyone. On behalf of the sbt project, I am happy to announce sbt 1.12.0-M1. This is the twelfth feature release of sbt 1.x, a binary compatible release focusing on new features. sbt 1.x is released under Semantic Versioning, and the plugins are expected to work throughout the 1.x series. Please try it out, and report any issues you might come across.

The headline features of sbt 1.12.0 are:

  • Scala 3.8 REPL support

Full release note is here - https://github.com/sbt/sbt/releases/tag/v1.12.0-M1

incremental compilation of Scala 3

In this post, I want to look into the incremental compilation of Scala 3, or the apparent problem associated with it. The incremental compilation on Scala 2.12 or 2.13 has been fairly stable, but for some reason it’s more fragile on Scala 3.x in my experience. We will investigate the cause and attempt to fix it as scala/scala3#24171.

sbt 1.11.7

Hi everyone. On behalf of the sbt project, I’m happy to announce that sbt 1.11.7 patch release is available.

The headline features of sbt 1.11.7 are:

  • Launcher 1.5.1 to fix sbt 0.13 support, including on setup-sbt action v1
  • JDK 25 warning workaround by adding JDK flags in sbt runner
  • Backport of JDK 25 JEP-512/JEP-445 Main run

Full release note is here - https://github.com/sbt/sbt/releases/tag/v1.11.7. See 1.11.0 release note for the details on 1.11.x features.

sbt 2.0.0-RC6

Hi everyone. On behalf of the sbt project, I am happy to announce sbt 2.0.0-RC6, a beta version of sbt 2.x. sbt 2.0 is a new version of sbt, based on Scala 3 constructs and Bazel-compatible cache system.

Please try it out, and report any issues you might come across. Note: sbt 2.0.0-RC6 will keep binary compatibility with 2.0.0 and 2.x.

Key changes since 2.0.0-RC5

See https://github.com/sbt/sbt/releases/tag/v2.0.0-RC6 for the full details.

sbt 1.11.5

Hi everyone. On behalf of the sbt project, I’m happy to announce that sbt 1.11.5 patch release is available.

The headline features of sbt 1.11.5 are:

  • Scala 3.8.0 (currently nightly) support
  • Scala Nightly repository support
  • Central Repository publishing improvements
  • sbt --jvm-client
  • sbtn improvements

Full release note is here - https://github.com/sbt/sbt/releases/tag/v1.11.5. See 1.11.0 release note for the details on 1.11.x features.

tree-sitter-scala 0.24.0

Hi everyone. On behalf of the tree-sitter-scala project, I am happy to announce tree-sitter-scala 0.24.0. The first two segments of the version number comes from the tree-sitter-cli that was used to generate the parser, and the last segment is our actual version number. tree-sitter-scala 0.24.0 uses tree-sitter 0.24.x.

About tree-sitter-scala

tree-sitter-scala is a Scala parser in C language, generated using Tree-sitter CLI, and conforming to the Tree-sitter API. Tree-sitter parsers are generally fast, incremental, and robust (ok with partial errors). We publish Rust binding to crates.io.

sbt 1.11.0

Hi everyone. On behalf of the sbt project, I am happy to announce sbt 1.11.0. This is the eleventh feature release of sbt 1.x, a binary compatible release focusing on new features. sbt 1.x is released under Semantic Versioning, and the plugins are expected to work throughout the 1.x series. Please try it out, and report any issues you might come across.

The headline features of sbt 1.11.0 are:

  • Support for the Central Repository publishing

Full release note is here - https://github.com/sbt/sbt/releases/tag/v1.11.0

sbt 1.11.0-RC2

Hi everyone. On behalf of the sbt project, I am happy to announce sbt 1.11.0-RC2. This is the eleventh feature release of sbt 1.x, a binary compatible release focusing on new features. sbt 1.x is released under Semantic Versioning, and the plugins are expected to work throughout the 1.x series. Please try it out, and report any issues you might come across.

The headline features of sbt 1.11.0 are:

  • Support for the Central Repository publishing

Full release note is here - https://github.com/sbt/sbt/releases/tag/v1.11.0-RC2

ifdef 0.4.1

@ifdef is a Scala compiler plugin that implements conditional compilation in Scala. ifdef 0.4.1 supports Scala JVM, JS and Native.

Scala Version JVM JS (1.x) Native (0.5.x) sbt plugin
3.x
2.13.x n/a
2.12.x

Gigahorse 0.9.0

Gigahorse 0.9.0 is released. Gigahorse is an HTTP client for Scala that I started in 2016, with multiple backend support: Apache HttpClient 5.x, AsyncHttpClient 2.12.x, OkHttp 3.x, and Pekko HTTP 1.x.

Gigahorse 0.8.0

Gigahorse 0.8.0 is released. Gigahorse is an HTTP client for Scala that I started in 2016, with multiple backend support. See documentation for more details on Gigahorse itself.

sbt 2.0.0-M4

Hi everyone. On behalf of the sbt project, I am happy to announce sbt 2.0.0-M4, a beta version of sbt 2.x. Please try it out, and report any issues you might come across. Note that sbt 2.x is released under Semantic Versioning, and the plugins will need to be published for the specific milestone version.

I work on sbt in my own time with collaboration with Adrien Piquerez and other volunteers, like Kenji Yoshida, Jerry Tan, Matthias Kurz (Play maintainer), and recently Billy at EngFlow to name a few.

sbt 1.10.9

Hi everyone. On behalf of the sbt project, I’m happy to announce that sbt 1.10.9 patch release is available. Full release note is here - https://github.com/sbt/sbt/releases/tag/v1.10.9.

  • There’s now sbt 1.10.10
  • sbt 1.10.8 is skipped since we found a bug post-release

See 1.10.0 release note for the details on 1.10.x features.

Highlights

  • Adds allowUnsafeScalaLibUpgrade setting
  • Zinc bug fix to improve local source dependency invalidation
  • sbtn client-side run capability (not enabled in sbt 1.x)