Skip to content

Commit a91ac46

Browse files
authored
Merge pull request #97 from lucidsoftware/jpeterson-zincrunner-performance-improvements
Make Scala compilation 26% faster
2 parents 05d2c06 + 78331d3 commit a91ac46

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

64 files changed

+964
-1073
lines changed

.bazelrc_shared

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ common --modify_execution_info=CppArchive=+supports-path-mapping
2020
common --modify_execution_info=CppCompile=+supports-path-mapping
2121
common --modify_execution_info=CppModuleMap=+supports-path-mapping
2222

23-
common --announce_rc
2423
common --color=yes
2524
common:rules --disk_cache=.bazel_cache
2625
common:tests --disk_cache=../.bazel_cache
@@ -51,3 +50,5 @@ common --incompatible_strict_action_env
5150
#common --noincompatible_enable_deprecated_label_apis
5251

5352
test --test_output=all
53+
54+
try-import %workspace%/user.bazelrc

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ hash2
1010
target/
1111

1212
!bazel-*.rc
13+
/user.bazelrc
1314

1415
# Ignore files generated by IDEs.
1516
/.classpath

MODULE.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ annex.install(
4141
"com.thesamet.scalapb:scalapb-runtime_2.13:{}".format(scalapb_version),
4242
"net.sourceforge.argparse4j:argparse4j:0.8.1",
4343
"org.jacoco:org.jacoco.core:0.7.5.201505241946",
44+
"org.playframework:play-json_3:3.0.4",
4445
"org.scala-lang:scala-compiler:{}".format(scala_2_13_version),
4546
"org.scala-lang:scala-library:{}".format(scala_2_13_version),
4647
"org.scala-lang:scala-reflect:{}".format(scala_2_13_version),

README.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,12 @@ vastly improve build times. However, to see these benefits, a project must first
99
tiny packages and make use of fine-grained dependencies. This is not always a realistic short-term
1010
goal for large, monorepo Scala projects.
1111

12-
`lucidsoftware/rules_scala` allows for the optional use of Zinc incremental compilation to provide a
13-
stepping stone for these projects as they migrate to Bazel. Although we've verified it to be correct
14-
and determinisitc, we recommend leaving this disabled, as fine-grained and isolated targets are
15-
more in-line with the [Bazel philosophy](https://bazel.build/basics/hermeticity).
12+
`lucidsoftware/rules_scala` used to allow for the optional use of Zinc incremental compilation to
13+
provide a stepping stone for these projects as they migrate to Bazel. Although we still reuse code
14+
from Zinc and the compiler bridge, this ruleset no longer supports incremental compilation.
15+
Mitigating nondeterminism issues required introducing an enormous amount of complexity to the
16+
compilation worker, and we eventually discovered that supporting incremental compilation added
17+
substantial overhead to compilation times.
1618

1719
`lucidsoftware/rules_scala` is written with maintainability and accessibility in mind. It aims to
1820
facilitate the transition to Bazel, and to satisfy use cases throughout the Scala ecosystem.
@@ -40,7 +42,6 @@ straightforward.
4042
* Errors on indirect and unused dependencies
4143
* Buildozer suggestions for dependency errors
4244
* [Optional Worker strategy](docs/scala.md#workers)
43-
* [Optional Zinc-based stateful incremental compilation](docs/stateful.md#stateful-compilation)
4445
* [Scalafmt](docs/scalafmt.md#scalafmt) integration
4546
* Protobuf support with ScalaPB
4647
* [scala_proto_library](docs/stardoc/scala_proto.md#scala_proto_library)
@@ -49,7 +50,6 @@ straightforward.
4950
* [Customizable rules](docs/newdocs/phases.md#customizing-the-core-rules)
5051
* [Multiple Scala versions in one build](docs/newdocs/scala_versions.md#specifying-the-scala-version-to-use), including Scala 3 (Dotty).
5152
* [Optimal handling of macros and ijars](docs/newdocs/macros.md#macros-and-ijars)
52-
* [Pass flags to Zinc compiler](docs/newdocs/zinc_flags.md)
5353
* Modern implementation using Bazel's most idiomatic APIs
5454

5555
## Usage

annex_install.json

Lines changed: 222 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"__AUTOGENERATED_FILE_DO_NOT_MODIFY_THIS_FILE_MANUALLY": "THERE_IS_NO_DATA_ONLY_ZUUL",
3-
"__INPUT_ARTIFACTS_HASH": 416553459,
4-
"__RESOLVED_ARTIFACTS_HASH": -333989184,
3+
"__INPUT_ARTIFACTS_HASH": -1426185539,
4+
"__RESOLVED_ARTIFACTS_HASH": 696573469,
55
"conflict_resolution": {
66
"org.scala-sbt:io_2.13:1.10.1": "org.scala-sbt:io_2.13:1.10.4"
77
},
@@ -237,6 +237,41 @@
237237
},
238238
"version": "0.10.1"
239239
},
240+
"com.fasterxml.jackson.core:jackson-annotations": {
241+
"shasums": {
242+
"jar": "ea1b3a9ec60a353f4d7e78559c7140abb9bcf71b31456e9d57c8289f7cf397f1",
243+
"sources": "e6f7f659bb4abd9be1fe2f259f95a2340744aff373eb34c134d6e2210bdc300d"
244+
},
245+
"version": "2.14.3"
246+
},
247+
"com.fasterxml.jackson.core:jackson-core": {
248+
"shasums": {
249+
"jar": "7ee2debad3c002e97b28b84d5f1b2044a38e780abb673948238f5bc656e2fe44",
250+
"sources": "3ee18051ff11ca9e0fd203bb163f2322c09573c76b6c1b13e2bd1031fb6f962a"
251+
},
252+
"version": "2.14.3"
253+
},
254+
"com.fasterxml.jackson.core:jackson-databind": {
255+
"shasums": {
256+
"jar": "ef0694046dc86e8a601e69efef24cda88a85773aaf012f5b9b1167d6f2e7de45",
257+
"sources": "f9f6c8dd8b543c02eefc5844d068d90ff070ab913115be5df704b99b1988264b"
258+
},
259+
"version": "2.14.3"
260+
},
261+
"com.fasterxml.jackson.datatype:jackson-datatype-jdk8": {
262+
"shasums": {
263+
"jar": "174dff10d8b8a762354401346317be3844f31f807a68eb72ce2b287ca273f4a4",
264+
"sources": "762f23914234ea46addf3cf7c6625c50a03a045c62887b038f61e58d3dc72e15"
265+
},
266+
"version": "2.14.3"
267+
},
268+
"com.fasterxml.jackson.datatype:jackson-datatype-jsr310": {
269+
"shasums": {
270+
"jar": "0b1b6d0267f939fe1c2d3167d33176a0b9f8c9b38444787d281e846beddf9ad6",
271+
"sources": "43ca94b09ba2f33407a8367d98600fa3027da371cb6c62cc2a274f00917e6450"
272+
},
273+
"version": "2.14.3"
274+
},
240275
"com.github.pathikrit:better-files_2.12": {
241276
"shasums": {
242277
"jar": "79b49bc134f06a6a091a962ec10ce3f1810403bccec7d99bf9928b7eb02e85c4",
@@ -671,6 +706,20 @@
671706
},
672707
"version": "5.0.1"
673708
},
709+
"org.playframework:play-functional_3": {
710+
"shasums": {
711+
"jar": "a0ff6d625cb7066a3e559148751e6d5822b76847008e544fceddac29a63ccf3e",
712+
"sources": "130056318d90cadcbb1c8bd65c188963a9d20a302d71b168460d2c7deb54a972"
713+
},
714+
"version": "3.0.4"
715+
},
716+
"org.playframework:play-json_3": {
717+
"shasums": {
718+
"jar": "cccc992d104f5694798ee5391d29758ba59e374d1edc82a43cd9f3bdcc57764a",
719+
"sources": "b8eec5e983e866af339aea1aca4d2104fcfa47e90daadfff99409f8509b804fb"
720+
},
721+
"version": "3.0.4"
722+
},
674723
"org.reactivestreams:reactive-streams": {
675724
"shasums": {
676725
"jar": "ef867702a614b96eb6c64fb65a8f5e14bdfcabbc1ae056f78a1643f7b79ca0eb",
@@ -1279,6 +1328,19 @@
12791328
"com.eed3si9n:sjson-new-core_2.13",
12801329
"org.scala-lang:scala-library"
12811330
],
1331+
"com.fasterxml.jackson.core:jackson-databind": [
1332+
"com.fasterxml.jackson.core:jackson-annotations",
1333+
"com.fasterxml.jackson.core:jackson-core"
1334+
],
1335+
"com.fasterxml.jackson.datatype:jackson-datatype-jdk8": [
1336+
"com.fasterxml.jackson.core:jackson-core",
1337+
"com.fasterxml.jackson.core:jackson-databind"
1338+
],
1339+
"com.fasterxml.jackson.datatype:jackson-datatype-jsr310": [
1340+
"com.fasterxml.jackson.core:jackson-annotations",
1341+
"com.fasterxml.jackson.core:jackson-core",
1342+
"com.fasterxml.jackson.core:jackson-databind"
1343+
],
12821344
"com.github.pathikrit:better-files_2.12": [
12831345
"org.scala-lang:scala-library"
12841346
],
@@ -1448,6 +1510,18 @@
14481510
"org.jline:jline-native",
14491511
"org.jline:jline-terminal"
14501512
],
1513+
"org.playframework:play-functional_3": [
1514+
"org.scala-lang:scala3-library_3"
1515+
],
1516+
"org.playframework:play-json_3": [
1517+
"com.fasterxml.jackson.core:jackson-annotations",
1518+
"com.fasterxml.jackson.core:jackson-core",
1519+
"com.fasterxml.jackson.core:jackson-databind",
1520+
"com.fasterxml.jackson.datatype:jackson-datatype-jdk8",
1521+
"com.fasterxml.jackson.datatype:jackson-datatype-jsr310",
1522+
"org.playframework:play-functional_3",
1523+
"org.scala-lang:scala3-library_3"
1524+
],
14511525
"org.scala-lang.modules:scala-collection-compat_2.13": [
14521526
"org.scala-lang:scala-library"
14531527
],
@@ -1940,6 +2014,61 @@
19402014
"com.eed3si9n:sjson-new-scalajson_2.13": [
19412015
"sjsonnew.support.scalajson.unsafe"
19422016
],
2017+
"com.fasterxml.jackson.core:jackson-annotations": [
2018+
"com.fasterxml.jackson.annotation"
2019+
],
2020+
"com.fasterxml.jackson.core:jackson-core": [
2021+
"com.fasterxml.jackson.core",
2022+
"com.fasterxml.jackson.core.async",
2023+
"com.fasterxml.jackson.core.base",
2024+
"com.fasterxml.jackson.core.exc",
2025+
"com.fasterxml.jackson.core.filter",
2026+
"com.fasterxml.jackson.core.format",
2027+
"com.fasterxml.jackson.core.io",
2028+
"com.fasterxml.jackson.core.io.doubleparser",
2029+
"com.fasterxml.jackson.core.io.schubfach",
2030+
"com.fasterxml.jackson.core.json",
2031+
"com.fasterxml.jackson.core.json.async",
2032+
"com.fasterxml.jackson.core.sym",
2033+
"com.fasterxml.jackson.core.type",
2034+
"com.fasterxml.jackson.core.util"
2035+
],
2036+
"com.fasterxml.jackson.core:jackson-databind": [
2037+
"com.fasterxml.jackson.databind",
2038+
"com.fasterxml.jackson.databind.annotation",
2039+
"com.fasterxml.jackson.databind.cfg",
2040+
"com.fasterxml.jackson.databind.deser",
2041+
"com.fasterxml.jackson.databind.deser.impl",
2042+
"com.fasterxml.jackson.databind.deser.std",
2043+
"com.fasterxml.jackson.databind.exc",
2044+
"com.fasterxml.jackson.databind.ext",
2045+
"com.fasterxml.jackson.databind.introspect",
2046+
"com.fasterxml.jackson.databind.jdk14",
2047+
"com.fasterxml.jackson.databind.json",
2048+
"com.fasterxml.jackson.databind.jsonFormatVisitors",
2049+
"com.fasterxml.jackson.databind.jsonschema",
2050+
"com.fasterxml.jackson.databind.jsontype",
2051+
"com.fasterxml.jackson.databind.jsontype.impl",
2052+
"com.fasterxml.jackson.databind.module",
2053+
"com.fasterxml.jackson.databind.node",
2054+
"com.fasterxml.jackson.databind.ser",
2055+
"com.fasterxml.jackson.databind.ser.impl",
2056+
"com.fasterxml.jackson.databind.ser.std",
2057+
"com.fasterxml.jackson.databind.type",
2058+
"com.fasterxml.jackson.databind.util",
2059+
"com.fasterxml.jackson.databind.util.internal"
2060+
],
2061+
"com.fasterxml.jackson.datatype:jackson-datatype-jdk8": [
2062+
"com.fasterxml.jackson.datatype.jdk8"
2063+
],
2064+
"com.fasterxml.jackson.datatype:jackson-datatype-jsr310": [
2065+
"com.fasterxml.jackson.datatype.jsr310",
2066+
"com.fasterxml.jackson.datatype.jsr310.deser",
2067+
"com.fasterxml.jackson.datatype.jsr310.deser.key",
2068+
"com.fasterxml.jackson.datatype.jsr310.ser",
2069+
"com.fasterxml.jackson.datatype.jsr310.ser.key",
2070+
"com.fasterxml.jackson.datatype.jsr310.util"
2071+
],
19432072
"com.github.pathikrit:better-files_2.12": [
19442073
"better.files"
19452074
],
@@ -2522,6 +2651,15 @@
25222651
"org.objectweb.asm.util",
25232652
"org.objectweb.asm.xml"
25242653
],
2654+
"org.playframework:play-functional_3": [
2655+
"play.api.libs.functional",
2656+
"play.api.libs.functional.syntax"
2657+
],
2658+
"org.playframework:play-json_3": [
2659+
"play.api.libs.json",
2660+
"play.api.libs.json.jackson",
2661+
"play.api.libs.json.util"
2662+
],
25252663
"org.reactivestreams:reactive-streams": [
25262664
"org.reactivestreams"
25272665
],
@@ -3149,6 +3287,16 @@
31493287
"com.eed3si9n:sjson-new-scalajson_2.12:jar:sources",
31503288
"com.eed3si9n:sjson-new-scalajson_2.13",
31513289
"com.eed3si9n:sjson-new-scalajson_2.13:jar:sources",
3290+
"com.fasterxml.jackson.core:jackson-annotations",
3291+
"com.fasterxml.jackson.core:jackson-annotations:jar:sources",
3292+
"com.fasterxml.jackson.core:jackson-core",
3293+
"com.fasterxml.jackson.core:jackson-core:jar:sources",
3294+
"com.fasterxml.jackson.core:jackson-databind",
3295+
"com.fasterxml.jackson.core:jackson-databind:jar:sources",
3296+
"com.fasterxml.jackson.datatype:jackson-datatype-jdk8",
3297+
"com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:sources",
3298+
"com.fasterxml.jackson.datatype:jackson-datatype-jsr310",
3299+
"com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:sources",
31523300
"com.github.pathikrit:better-files_2.12",
31533301
"com.github.pathikrit:better-files_2.12:jar:sources",
31543302
"com.google.code.findbugs:jsr305",
@@ -3272,6 +3420,10 @@
32723420
"org.jline:jline:jar:sources",
32733421
"org.ow2.asm:asm-debug-all",
32743422
"org.ow2.asm:asm-debug-all:jar:sources",
3423+
"org.playframework:play-functional_3",
3424+
"org.playframework:play-functional_3:jar:sources",
3425+
"org.playframework:play-json_3",
3426+
"org.playframework:play-json_3:jar:sources",
32753427
"org.reactivestreams:reactive-streams",
32763428
"org.reactivestreams:reactive-streams:jar:sources",
32773429
"org.scala-lang.modules:scala-asm",
@@ -3462,6 +3614,16 @@
34623614
"com.eed3si9n:sjson-new-scalajson_2.12:jar:sources",
34633615
"com.eed3si9n:sjson-new-scalajson_2.13",
34643616
"com.eed3si9n:sjson-new-scalajson_2.13:jar:sources",
3617+
"com.fasterxml.jackson.core:jackson-annotations",
3618+
"com.fasterxml.jackson.core:jackson-annotations:jar:sources",
3619+
"com.fasterxml.jackson.core:jackson-core",
3620+
"com.fasterxml.jackson.core:jackson-core:jar:sources",
3621+
"com.fasterxml.jackson.core:jackson-databind",
3622+
"com.fasterxml.jackson.core:jackson-databind:jar:sources",
3623+
"com.fasterxml.jackson.datatype:jackson-datatype-jdk8",
3624+
"com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:sources",
3625+
"com.fasterxml.jackson.datatype:jackson-datatype-jsr310",
3626+
"com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:sources",
34653627
"com.github.pathikrit:better-files_2.12",
34663628
"com.github.pathikrit:better-files_2.12:jar:sources",
34673629
"com.google.code.findbugs:jsr305",
@@ -3585,6 +3747,10 @@
35853747
"org.jline:jline:jar:sources",
35863748
"org.ow2.asm:asm-debug-all",
35873749
"org.ow2.asm:asm-debug-all:jar:sources",
3750+
"org.playframework:play-functional_3",
3751+
"org.playframework:play-functional_3:jar:sources",
3752+
"org.playframework:play-json_3",
3753+
"org.playframework:play-json_3:jar:sources",
35883754
"org.reactivestreams:reactive-streams",
35893755
"org.reactivestreams:reactive-streams:jar:sources",
35903756
"org.scala-lang.modules:scala-asm",
@@ -3775,6 +3941,16 @@
37753941
"com.eed3si9n:sjson-new-scalajson_2.12:jar:sources",
37763942
"com.eed3si9n:sjson-new-scalajson_2.13",
37773943
"com.eed3si9n:sjson-new-scalajson_2.13:jar:sources",
3944+
"com.fasterxml.jackson.core:jackson-annotations",
3945+
"com.fasterxml.jackson.core:jackson-annotations:jar:sources",
3946+
"com.fasterxml.jackson.core:jackson-core",
3947+
"com.fasterxml.jackson.core:jackson-core:jar:sources",
3948+
"com.fasterxml.jackson.core:jackson-databind",
3949+
"com.fasterxml.jackson.core:jackson-databind:jar:sources",
3950+
"com.fasterxml.jackson.datatype:jackson-datatype-jdk8",
3951+
"com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:sources",
3952+
"com.fasterxml.jackson.datatype:jackson-datatype-jsr310",
3953+
"com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:sources",
37783954
"com.github.pathikrit:better-files_2.12",
37793955
"com.github.pathikrit:better-files_2.12:jar:sources",
37803956
"com.google.code.findbugs:jsr305",
@@ -3898,6 +4074,10 @@
38984074
"org.jline:jline:jar:sources",
38994075
"org.ow2.asm:asm-debug-all",
39004076
"org.ow2.asm:asm-debug-all:jar:sources",
4077+
"org.playframework:play-functional_3",
4078+
"org.playframework:play-functional_3:jar:sources",
4079+
"org.playframework:play-json_3",
4080+
"org.playframework:play-json_3:jar:sources",
39014081
"org.reactivestreams:reactive-streams",
39024082
"org.reactivestreams:reactive-streams:jar:sources",
39034083
"org.scala-lang.modules:scala-asm",
@@ -4033,6 +4213,46 @@
40334213
"ch.qos.logback.classic.servlet.LogbackServletContainerInitializer"
40344214
]
40354215
},
4216+
"com.fasterxml.jackson.core:jackson-core": {
4217+
"com.fasterxml.jackson.core.JsonFactory": [
4218+
"com.fasterxml.jackson.core.JsonFactory"
4219+
]
4220+
},
4221+
"com.fasterxml.jackson.core:jackson-core:jar:sources": {
4222+
"com.fasterxml.jackson.core.JsonFactory": [
4223+
"com.fasterxml.jackson.core.JsonFactory"
4224+
]
4225+
},
4226+
"com.fasterxml.jackson.core:jackson-databind": {
4227+
"com.fasterxml.jackson.core.ObjectCodec": [
4228+
"com.fasterxml.jackson.databind.ObjectMapper"
4229+
]
4230+
},
4231+
"com.fasterxml.jackson.core:jackson-databind:jar:sources": {
4232+
"com.fasterxml.jackson.core.ObjectCodec": [
4233+
"com.fasterxml.jackson.databind.ObjectMapper"
4234+
]
4235+
},
4236+
"com.fasterxml.jackson.datatype:jackson-datatype-jdk8": {
4237+
"com.fasterxml.jackson.databind.Module": [
4238+
"com.fasterxml.jackson.datatype.jdk8.Jdk8Module"
4239+
]
4240+
},
4241+
"com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:sources": {
4242+
"com.fasterxml.jackson.databind.Module": [
4243+
"com.fasterxml.jackson.datatype.jdk8.Jdk8Module"
4244+
]
4245+
},
4246+
"com.fasterxml.jackson.datatype:jackson-datatype-jsr310": {
4247+
"com.fasterxml.jackson.databind.Module": [
4248+
"com.fasterxml.jackson.datatype.jsr310.JavaTimeModule"
4249+
]
4250+
},
4251+
"com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:sources": {
4252+
"com.fasterxml.jackson.databind.Module": [
4253+
"com.fasterxml.jackson.datatype.jsr310.JavaTimeModule"
4254+
]
4255+
},
40364256
"org.apache.logging.log4j:log4j-api": {
40374257
"org.apache.logging.log4j.util.PropertySource": [
40384258
"org.apache.logging.log4j.util.EnvironmentPropertySource",

0 commit comments

Comments
 (0)