Skip to content
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

Scala 3 #1105

Open
wants to merge 37 commits into
base: develop
Choose a base branch
from
Open

Scala 3 #1105

wants to merge 37 commits into from

Conversation

i10416
Copy link

@i10416 i10416 commented Mar 4, 2023

#1099

  • address compiler warnings/errors
  • setup kind-projector migration
  • implement common derive macros
  • Cuber and Cuber derivation
  • Roller and derive macros
  • resolve conflict
  • write ArbitraryCaseClassMacro in Scala 3 and pass tests

NOTE:

changes for compatibility between 2.11, 2.12, 2.13 and 3.x

Source files compatible across all Scala version above are located in algebird-core/src/main/scala directory.
The most of changes in scala dir are to add explicit apply (()) and to resolve ambiguous values.

Some files in scala-2.11 and scala-2.12+ are almost the same but there are a few differences.

  1. *s from kind-projector are replaced by _ in 2.12+.
  2. Type wildcards _ are replaced by ? in 2.12+.
  3. There are a few code that require explicit type annotation or unsafe conversion (asInstanceOf[T])

(1) and (2) are necessary mainly because Scala 2.11 does not support "-Xsource:3" and "-P:kind-projector:underscore-placeholders" which are necessary for smooth kind-projector migration.

These duplicated files can be deleted after dropping Scala 2.11. For more details, see https://docs.scala-lang.org/scala3/guides/migration/plugin-kind-projector.html

Scala 3 macros

Macros in algebird-core are ported to Scala 3, but there are still room for peformance and type safety improvement.
Scala 3 macros in algebird-core are extracted to https://github.com/i10416/algebird-macros for debug and test purpose.

address compiler warnings/errors and setup kind-projector migration
@CLAassistant
Copy link

CLAassistant commented Mar 4, 2023

CLA assistant check
All committers have signed the CLA.

@i10416 i10416 changed the title prepare for scala 3 scala 3 Mar 4, 2023
@johnynek
Copy link
Collaborator

johnynek commented Mar 4, 2023

Thanks for doing this!

I'll look at it in the next days.

It's quite large obviously so it will take some time.

@codecov-commenter
Copy link

Codecov Report

Patch coverage: 80.94% and project coverage change: -0.03 ⚠️

Comparison is base (3cefba6) 89.60% compared to head (b4f663c) 89.58%.

❗ Current head b4f663c differs from pull request most recent head 1d4bf3d. Consider uploading reports for the commit 1d4bf3d to get more accurate results

Additional details and impacted files
@@             Coverage Diff             @@
##           develop    #1105      +/-   ##
===========================================
- Coverage    89.60%   89.58%   -0.03%     
===========================================
  Files          119      124       +5     
  Lines        10016    10050      +34     
  Branches       695      572     -123     
===========================================
+ Hits          8975     9003      +28     
- Misses        1041     1047       +6     
Impacted Files Coverage Δ
...d-core/src/main/scala-2.12/monad/EitherMonad.scala 0.00% <0.00%> (ø)
.../scala-2/com/twitter/algebird/macros/package.scala 88.88% <ø> (ø)
.../src/main/scala/com/twitter/algebird/Batched.scala 67.69% <0.00%> (ø)
...main/scala/com/twitter/algebird/HashingTrick.scala 0.00% <0.00%> (ø)
...main/scala/com/twitter/algebird/MomentsGroup.scala 81.57% <0.00%> (ø)
...src/main/scala/com/twitter/algebird/Preparer.scala 32.14% <0.00%> (ø)
...rc/main/scala/com/twitter/algebird/SketchMap.scala 92.45% <ø> (ø)
...m/twitter/algebird/matrix/SparseColumnMatrix.scala 30.76% <0.00%> (ø)
...ore/src/main/scala-2.12/monad/StateWithError.scala 48.38% <48.38%> (ø)
...gebird-core/src/main/scala-2.12/monad/Reader.scala 50.00% <50.00%> (ø)
... and 57 more

Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here.

☔ View full report at Codecov.
📢 Do you have feedback about the report comment? Let us know in this issue.

@regadas
Copy link
Collaborator

regadas commented Mar 4, 2023

This is great! I can help out with the review.

private[algebird] trait CompatDecayedVector {
// This is the default monoid that never thresholds.
// If you want to set a specific accuracy you need to implicitly override this
implicit def monoid[F, C[_]](implicit vs: VectorSpace[F, C], metric: Metric[C[F]]):Monoid[DecayedVector[C]] =
Copy link
Author

@i10416 i10416 Apr 3, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This won't compile in Scala 3 as Scala 3 requires explicit type annotation for implicit def.

Error says

Cannot find VectorSpace type class for Container: C
where: C is a type in method monoid with bounds <: [_] =>> Any
and Ring: Double

@i10416 i10416 changed the title scala 3 Scala 3 Apr 3, 2023
@i10416
Copy link
Author

i10416 commented Apr 7, 2023

Now, algebirdCore 3.2.2 compiles in d123047 though tests do not compile yet

@i10416
Copy link
Author

i10416 commented Apr 9, 2023

Now, algebird-core and algebird-test compile in Scala 2.11, 2.12, 2.13 and 3 at 7042270

and all tests but CollectionSpecification pass. CollectionSpecification gets StackOverflow probably because of difference of implicit resolution between Scala 2.x and Scala 3.

I'm going to reduce copy-paste files in algebird-core using traits as in https://github.com/twitter/algebird/pull/1105/files#diff-1ae6af35211d6d6fea648cfe842339cd2d4d08933aed665a3ec78e5aee3c12f1.

@i10416 i10416 marked this pull request as ready for review April 9, 2023 16:23
@@ -85,22 +85,23 @@ class CollectionSpecification extends CheckProperties {
monoidLaws[Set[Int]]
}

implicit def mapArb[K: Arbitrary, V: Arbitrary: Monoid] = Arbitrary { // scalafix:ok
implicit def mapArb[K: Arbitrary, V: Arbitrary: Monoid]:Arbitrary[Map[K, V]] = Arbitrary { // scalafix:ok
Copy link
Author

@i10416 i10416 Apr 9, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Strangely, explicit type annotation Arbitrary[Map[K, V]] here makes tests stack overflow.

@i10416
Copy link
Author

i10416 commented Apr 9, 2023

I didn't come up with nice solution for them, so I will keep them for now.

@i10416
Copy link
Author

i10416 commented Apr 9, 2023

@regadas Hi, could you run CI and look through changes? For now, algebird-core and algebird-test compile in Scala 3 andall tests in algebird-core and all tests but CollectionSpecification in algebird-test pass on my local machine.

@i10416
Copy link
Author

i10416 commented Apr 13, 2023

Sorry for forgetting fmt and check before asking for the review.

scalameta says "pattern must be a value" for macro entrypoint, but it
compiles and is proper format.
@i10416
Copy link
Author

i10416 commented Apr 13, 2023

This is a false-positive error message at macro entrypoint. Possibly bugs in scalameta?

image

@i10416
Copy link
Author

i10416 commented Apr 13, 2023

I found the same issue in scalameta. scalameta/scalameta#3063

 Workaround: skip compiling java api for Scala 3 because
 1. it seems Scala 3 generates Monoid$ in later stage than Scala 2.x,
    which prevents javaapi from compiling due to missing symbol.
 2. we cannot use `compileOrder := CompileOrder.ScalaThenJava`
    as algebird-core must compile CassandraMurmurHash.java BEFORE Scala,
    but at the same time algebird-core must compile javaapi AFTER Scala.
@i10416
Copy link
Author

i10416 commented Apr 13, 2023

@regadas Sorry for the previous request, it is now ready for review (this time, for sure)

@i10416
Copy link
Author

i10416 commented Apr 14, 2023

@i10416
Copy link
Author

i10416 commented Jun 4, 2023

@regadas Could you review changes when you have a time?

@SethTisue SethTisue mentioned this pull request Apr 29, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants