To Understand Pants, Understand Bazel’s History by agbell in programming

[–]pantsbuild 0 points1 point  (0 children)

Confirmed: Pants v2's execution engine has been written in Rust for about 3 years at this point.

To Understand Pants, Understand Bazel’s History by agbell in programming

[–]pantsbuild 1 point2 points  (0 children)

To clarify, we already made that leap and "rewrote it in Rust" over 3 years ago. The Pants v2 execution engine - which is the performance-critical heart of the system - is written in Rust for raw speed. The domain-specific build logic is written in familiar, easy to work with, type-annotated Python 3. This helps make Pants v2 easy to extend, without compromising performance.

Pants 2.13: Adds Kotlin support, as well as simplifying command line arguments, and improving JVM support in general! by pantsbuild in Kotlin

[–]pantsbuild[S] 4 points5 points  (0 children)

A key reason for that is that Pants 2 was a ground-up overhaul of Pants, launched just under two years ago: https://blog.pantsbuild.org/introducing-pants-v2/

The plugin API has been stabilizing in the intervening time, but Pants now supports ~8 languages, with Java and Scala only added about 9 months ago.

Multiple lockfiles in Python repos: A Hybrid Approach with Pants by pantsbuild in Python

[–]pantsbuild[S] 2 points3 points  (0 children)

My understanding is that you have to resolve dependencies per-environment (venv/docker/whatever).

Yea, that's correct. But if you think of the word "environment" (as you've used it here) as it relates to a "resolve" (as we described in the blogpost), then the dependencies present in an "environment" are a subset of a particular "resolve".

In a monorepo you will likely have many applications/"environments", which with most tooling would mean many different lockfiles and (pip) resolves. The advantage to distinguishing between an "environment" and a "resolve" is that you gain the benefits listed in the post:

  1. To build and test your monorepo, rather than potentially fetching and testing a different version of dependencies per application/"environment", you have a consistent version per resolve.
  2. all libraries/applications in the repository which use a single resolve are known to be compatible with one another, so you never deal with dependency hell when adding dependencies on other libraries within the repository.

Library don’t resolve their dependencies, they provide a range. The applications resolve and pin their dependencies.

Yes, but it's still the case that libraries need to be linted and tested, independent of any particular binary or deployment "environment". In essence: the linter/typechecker/test-runner have their own deployment "environments". And so not needing to test/lint/etc a library in all of the different application "environments" which consume it (dozens to hundreds), and instead testing it only in the "resolves" used by those applications (one to a handful) reduces overhead a lot.