-
Notifications
You must be signed in to change notification settings - Fork 3.1k
Small optimisations - some faster array copies, reuse empty arrays #9091
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
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
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM otherwise
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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 (
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
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