Small optimisations - some faster array copies, reuse empty arrays#9091
Small optimisations - some faster array copies, reuse empty arrays#9091lrytz merged 4 commits intoscala:2.12.xfrom
Conversation
|
/rebuild |
b10978e to
3e2dbe0
Compare
…ntent of the previous array is to be copied into the new Array Use clone when the array is not changing length Maintain empty Arrays in the Array object, and use them where possible Maintain empty WrappedArrays in WrappedArrays object and use where possible
|
Mima issues |
3e2dbe0 to
1fb249c
Compare
lrytz
left a comment
There was a problem hiding this comment.
Looking at this again made me think about the two new ClassValue caches. In a quick internal discussion, @retronym suggested to add new, lazily instantiated fields to ClassTag instead. It would work out well here because both of the new ClassValue caches are used in places where a ClassTag is available. I like this idea and think we should do it to avoid the two new caches.
e9f4603 to
eeb2e7c
Compare
Added a commit with the changes. |
cb88d1b to
b2e4532
Compare
b2e4532 to
31d6481
Compare
|
MiMa issues ( |
lrytz
left a comment
There was a problem hiding this comment.
LGTM. I pushed a small cleanup for the mima filters.
In a follow-up, you could use the cached empty instance in ClassTag.newArray for primitives (you only do it for references):
scala> ClassTag.Int.newArray(0) eq ClassTag.Int.newArray(0)
res18: Boolean = false
scala> implicitly[ClassTag[String]].newArray(0) eq implicitly[ClassTag[String]].newArray(0)
res19: Boolean = true|
Impacted Scala.js https://travis-ci.org/github/scala-js/scala-js-test-scala-nightly/jobs/723284403, chat on Gitter: https://gitter.im/scala/contributors?at=5f4f60db48237809375c2254 (intertwined with a chat about Shapeless) |
this regressed in scala#9091 the problem turned up in the Scala 2.12 community build -- when Scala 3 support was added to the scala-collection-compat repo, a test case there was altered in a way that happened to tickle this
|
#9335 fixes a regression here (in |
Problem ======= Upgrade source to https://github.com/scala/scala/releases/tag/v2.12.13 from https://github.com/scala/scala/releases/tag/v2.12.12. This upgrade includes a highlighted feature of configurable warnings and errors (https://www.scala-lang.org/2021/01/12/configuring-and-suppressing-warnings.html / scala/scala#9248). Other noticable changes our code based will experience * Exhaustivity warnings for patterns involving tuples * Better type checking for `CharSequence` arguments scala/scala#9292 * Simplified Reporters scala/scala#8338 * Promotion of `-deprecation` to `-Xlint:deprecation` scala/scala#7714 * Improves performance of building `immutable.{TreeMap,TreeSet}` by using mutation within the builder scala/scala#8794 Full list of changes can be found at https://github.com/scala/scala/pulls?q=is%3Amerged+milestone%3A2.12.13+ Solution ======== * Bump `BUILD` file `SCALA_REV` && `SCALAC_REV_FOR_DEPS`. * Depdnencies which are not built for scala 2.12.13 needed to be bumped `SEMANTICDB_PLUGIN_REV` && `SEMANTICDB_REV` && `SCALAFIX_REV`. * Include `-S-Xlint:-deprecation` to `pants.ini` preventing build failures on deprecated annotations (existing behavior) * Bump `cache_key_gen_version` in `pants.ini` for newly built artifacts on different scala version. * Removed scalafix plugin (`scalac-profiling`) which is not built for 2.12.13. `scalac-profiling` code looks abandoned by ~3 years. * Updated all failing tests that could have depended or expected ordered sequences when the sequence was generated from non ordered collections. Notes ===== It seems a few tests and golden files in source have depended or tested against a stable sort order when sorted order is not guaranteed. This has been seen in a few places such as output json objects (map key fields), code that uses `groupBy` for rekeying results to the user and transforming into sequences, strings built from sequences or maps that are not guaranteed to be ordered. The following PR are related to this change in expectations scala/scala#8794 scala/scala#8948 scala/scala#9218 scala/scala#9376 scala/scala#9091 scala/scala#9216 We took the liberty updating tests with what the current map order would be or updating the test in a way that wouldn't depend on order. Since we may not fully understand all the context of the tests we are hoping this either signals to the owners that there might be some issue with assumed order or signal that upgrading might break implementations due to bug in scala 2.12.13. {D611202} will improve the files changed for workflow builder outside of this change. Please feel to reach out directly and discuss the changes here or bring up issues with this upgrade. Slack [[https://app.slack.com/client/T86S8GHEG/C01NZAFRLFK|#scala-upgrade-2-12-13]] JIRA Issues: SCALA-25 Differential Revision: https://phabricator.twitter.biz/D607826
Small optimisations - some faster array copies, reuse empty arrays
this regressed in scala/scala#9091 the problem turned up in the Scala 2.12 community build -- when Scala 3 support was added to the scala-collection-compat repo, a test case there was altered in a way that happened to tickle this
Small optimisations - some faster array copies, reuse empty arrays
this regressed in scala/scala#9091 the problem turned up in the Scala 2.12 community build -- when Scala 3 support was added to the scala-collection-compat repo, a test case there was altered in a way that happened to tickle this
take advantage of JVM optimisation when copying arrays to avoid zeroing
reuse empty arrays where it is simple to do so