bloop v1.1.0
Install v1.1.0
🍬
If you're on Mac OS X, upgrade to the latest version with:
$ brew install scalacenter/bloop/bloop
Otherwise, run:
$ curl -L https://github.com/scalacenter/bloop/releases/download/v1.1.0/install.py | python
Read the complete installation instructions in our Installation page.
What is bloop
Bloop is a Scala build server and command-line tool to make the compile and test developer
workflows fast and productive in a build-tool-agnostic way. Learn more about Bloop and its origins
in this ScalaDays Berlin talk.
Highlights 📚
Build Server Protocol 2.0
The new version of the protocol, a joint effort of Olafur Páll Geirsson (Scala Center),
Justin Kaeser (JetBrains) and Jorge Vicente Cantero (Scala Center), simplifies client
integrations, improves task notifications and diagnostics reporting, adds a new BSP connection
protocol to discover BSP servers and polishes v1.0.0.
Despite the fact that there is not a stable BSP v2.0 release out yet, Bloop adds initial support
for BSP v2.0.0-M2, which is also implemented by IntelliJ 2018.3.504 and Metals 0.2.3. This means
you can use bloop v1.1.0 with both Metals and IntelliJ.
Full support for BSP 2.0 (for example, testing and running via the protocol) will soon be
available in future bloop versions.
New editor integration: Metals
Build import and compiler diagnostics in Metals are powered by bloop v1.1.0. This release adds a
lot of small usability and correctness fixes to make bloop a fitting server for Metals. Metals
supports several editors (such as vim
and Visual Studio Code) and has best-in-class bloop
integration (for example, every time there is a change in an sbt build, Metals can ask you to
reload the build and run bloopInstall
automatically). Try out Metals
here.
Experimental build pipelining
Build pipelining is a compilation performance technique to start the compilation of modules in
a build before their dependencies have finished compilation. An experimental implementation of
build pipelining has been pioneered and merged in bloop v1.1.0.
How to use build pipelining
Build pipelining is not yet ready for mainstream use (incremental compilation is not supported yet).
However, v1.1.0 adds experimental support to allow bloop clients check compilation speedups with
build pipelining. To benchmark build pipelining, bloop clean
your project and add --pipeline
to your bloop compile
invocation. Clean and repeat the process to warm up the compiler as many
times as the compilation numbers you have for raw compilation.
No incremental compilation
At the moment, build pipelining doesn't work with incremental compilation so it's not a great fit
for day-to-day use. Improvements on this area are staged for the future.
Performance results
Bloop compiles its community build successfully under build pipelining. The community build
includes the following projects: apache/spark
, lihaoyi/utest
, scala/scala
, ornicar/lichess
,
twitter/scalding
, akka akka
, twitter/finagle
, sbt/sbt
, twitter/algebird
,
twitter/scalatra
, guardian/frontend
, netflix/atlas
and guardian/grid
.
The results of build pipelining are positive but are not yet fully confirmed. Compilations of
projects such as apache/spark
, twitter/finagle
and ornicar/lila
give significant speedups.
There are reasons to think future versions of bloop and Scala (2.12.8 and 2.13.0) will improve the
performance of build pipelining. You can see that current results range from 0% to 32% compilation
speedup.
Java and Scala order
When build pipelining is run on projects that define Java and Scala sources, build pipelining
becomes more challenging. The current bloop implementation handles this transparently to the user
and defaults on a reasonable policy that works in our current community build. The downside is
that users don't have a lot of flexibility in using build pipelining and making sure it works in
their project without source changes.
In next versions, this limitation will go away and there will be an explicit mechanism for users
to control the order in which Java and Scala are compiled and its intra-build dependencies.
Test Scala.js projects
Thanks to #706, contributed by @tindzk
and
@jvican
, bloop v1.1.0 can now test Scala.js 0.6.x and 1.x projects and link projects
using CommonJS modules. After this change, the only missing bit is to test Scala Native projects.
A new Gradle integration
Thanks to Daniel Silva and Daniel Vigozovsky, bloop features a Gradle installation. To learn how to use bloop with Gradle, head to the installation instructions.
Improvements since 1.0.0
- Watch changes in single files
- Remove default dependency between test sources in sbt
- New additions to our community build
- Add better feedback if configuration directory is missing
- Make compile watch clear screen before first run
- Improve benchmarks infrastructure with
async-profiler
- Enable benchmarks for more projects
- Speed up build loading and minimize its IO
- Clean all projects by default
- Print error if download fails in
install.py
- Add support for local homebrew formulas
- Apply system properties to all test frameworks
- Don't fail
bloopInstall
on builds of one single sbt plugin - Add
--debug
parameter to control verbosity of logs - Support proxy in coursier integration
- Allow to run externally-defined main classes
- Terminate processes gracefully
- Handle build load errors gracefully in the server
- Add resources to the configuration file
- Create target path of
-h
ScalaTest option - Add fish tab completion capabilities
- Use another hash code for projects
- Add tests for running dependent main
- Prove transitive resources are used in aggregated projects
- Set cwd to project's base directory
- Set jvm proxy from client environment variables
- Fix test resource behavior for source-based projects
- Improve compilation reporting to users
- Propagate main class in sbt plugin
Improvements on the Build Server Protocol implementation
- Use bsp 1.0.0 and implement its new methods
- Allow bloop reflective invocation with cancellation
- Don't error on trace message
- Upgrade to latest bsp version
- Upgrade to bsp 1.0.1 to use status code
- Reload and save state during BSP actions
- Publish diagnostics for syntax errors and improve tests
- Return correct platform for BSP Scala targets
- Re-publish diagnostics for warnings
- Migrate to bsp 2.0.0 partially
- Re-publish all warnings on BSP server startup
Contributors 👥
According to git shortlog -sn --no-merges v1.0.0..v1.1.0
, 17 people contributed to this
v1.1.0
release: Jorge Vicente Cantero, Martin Duhem, Tim Nieradzik, Daniel Silva, Paweł
Bartkiewicz, Daniel Vigovszky, Josep Prat, Etienne Couritas, Jens Grassel, Martin Mauch, Qi Wang,
Ashwin Raja, David Francoeur, Kevin Rauscher, Octavian Genes, Reto Habluetzel, fanconepl, ioleo.
The core team is grateful to all the contributors that have submitted PRs and helped
improved the documentation of Bloop. Thanks a lot!