Hi Colin, We can take 2 different paths, both of them need a similar effort. — Offer Scala 3 along with Scala 2.12 and 2.13 — Offer Scala 3 only once Scala 2.12 is removed
On the draft PR I shared in the initial email ( https://github.com/apache/kafka/pull/11350), I used the first approach, and it didn't require any additional work. This means we can decide to take any of the 2 approaches freely. Offering Scala 3 only when 2.13 is removed means to wait for a bit, but it's perfectly doable. My personal.opinion is that, given Scala 3 is a major release (epoch according to Scala version schema), we might want to build in Scala 3 sooner rather than later. We could label this as experimental Scala 3 support. However, until Gradle 7.3 is released, we can't proceed any further with building with Scala 3. Currently, Gradle 7.3 is under RC3, so I expect it to be available soon. Regarding the changes I propose to add right now as I mentioned in the first email, you can see exactly what I meant in this PR: https://github.com/apache/kafka/pull/11432. Sometimes, Kafka uses some syntax or approaches that are deprecated and they are removed in Scala 3. This PR goes over those and uses the "accepted" syntax. Feel free to take a look and review it. Thanks for your feedback Colin! Best, ——— Josep Prat Aiven Deutschland GmbH Immanuelkirchstraße 26, 10405 Berlin Amtsgericht Charlottenburg, HRB 209739 B Geschäftsführer: Oskari Saarenmaa & Hannu Valtonen m: +491715557497 w: aiven.io e: josep.p...@aiven.io On Mon, Nov 1, 2021, 23:45 Colin McCabe <cmcc...@apache.org> wrote: > Thanks for looking at this, Josep... I guess the way I always imagined > this happening was that a Scala 3 release would become one of our two > supported Scala versions. So instead of 2.12 and 2.13, we'd have 2.13 and > 3.x, for some X. Do you think that approach would be practical? > > best, > Colin > > > On Fri, Oct 8, 2021, at 09:05, Ismael Juma wrote: > > Yeah, changes that are good generally can be submitted any time. > > > > Ismael > > > > On Fri, Oct 8, 2021 at 7:35 AM Josep Prat <josep.p...@aiven.io.invalid> > > wrote: > > > >> Hi Ismael, > >> > >> Thanks for the reply. I don't think the demand is high at the moment, > but > >> it will increase overtime. > >> What do you think about me submitting a PR now with only the changes I > >> mention in group a)? They are small changes like dropping extra > >> parenthesis, or stopping shadowing names. The resulting code would be > >> cleaner Scala that can cross compile. > >> > >> Thanks again, > >> ——— > >> Josep Prat > >> > >> Aiven Deutschland GmbH > >> > >> Immanuelkirchstraße 26, 10405 Berlin > >> > >> Amtsgericht Charlottenburg, HRB 209739 B > >> > >> Geschäftsführer: Oskari Saarenmaa & Hannu Valtonen > >> > >> m: +491715557497 > >> > >> w: aiven.io > >> > >> e: josep.p...@aiven.io > >> > >> On Fri, Oct 8, 2021, 16:22 Ismael Juma <ism...@juma.me.uk> wrote: > >> > >> > Hi Josep, > >> > > >> > Thanks for looking into this. As you said, it seems like there are a > >> number > >> > of rough edges still. Do we have many users asking for this right > now? If > >> > not, it may make sense to wait for things to get a bit more mature > before > >> > adding the burden of a third Scala version. Ideally, we would drop > Scala > >> > 2.12 before we add Scala 3 support. > >> > > >> > Ismael > >> > > >> > On Fri, Oct 8, 2021 at 6:07 AM Josep Prat <josep.p...@aiven.io.invalid > > > >> > wrote: > >> > > >> > > Hi there, > >> > > For the last month I was actively working on migrating Apache Kafka > to > >> > > Scala 3. For what I could see, Apache Kafka is the biggest mixed > >> > Java-Scala > >> > > project to attempt a migration to Scala 3. This means, a lot of > >> > regressions > >> > > in regards to Java and Scala interoperability at bytecode were found > >> > within > >> > > this task. You can take a look at the PR here: > >> > > https://github.com/apache/kafka/pull/11350 > >> > > Currently, the status of the migration is as follows: > >> > > > >> > > - All tests pass in Scala 3 except one ( > >> > > > >> > > > >> > > >> > KafkaApis#getAllTopicMetadataShouldNotCreateTopicOrReturnUnknownTopicPartition). > >> > > Root cause for this is this bug with no easy workaround: Type > erased > >> > for > >> > > by-name parameters lampepfl/dotty#13638 > >> > > <https://github.com/lampepfl/dotty/issues/13638> > >> > > - All tests pass in Scala 2 > >> > > - It still uses a snapshot build of Gradle with support for > Scala 3 > >> > > - Spotbugs detected some new errors when the code was compiled > with > >> > > Scala 3. Some are simply false positives, but a small subset seem > >> like > >> > > they > >> > > might be legit bugs in Scala 3. I still need to come up with a > >> > minimized > >> > > reproducer for those cases. > >> > > > >> > > As one can see, most of the changes are arguably low-level and no > big > >> > > rewrite was needed. The biggest refactoring was splitting several > >> classes > >> > > into their own file. > >> > > > >> > > Changes made in this PR could be categorized in 3 different groups: > >> > > a) Needed changes because of changes in syntax or compiler being > >> > currently > >> > > more strict > >> > > b) Changes where a workaround is present but they are (or will be) > >> fixed > >> > in > >> > > upcoming Scala versions > >> > > c) Changes in the build file > >> > > > >> > > In order to have a smooth and manageable migration to Scala 3, I > >> propose > >> > > perform the migration in several steps: > >> > > > >> > > - Firstly apply all changes that would fall into category *a)* > >> > > - Once a new Scala version that incorporates the mentioned fixes > is > >> > > released, revisit point changes in point *b)* > >> > > - Once Type erased for by-name parameters lampepfl/dotty#13638 > >> > > <https://github.com/lampepfl/dotty/issues/13638> is resolved or > a > >> > > workaround is found and Gradle with Scala 3 support is released > we > >> > could > >> > > tackle the final step and incorporate changes mentioned in point > >> *c)* > >> > > - After this, we would run the Scala Migration Tool to > automatically > >> > > rewrite the code that uses removed syntax or language constructs. > >> (See > >> > > > >> > > > >> > > >> > https://docs.scala-lang.org/scala3/guides/migration/tooling-migration-mode.html > >> > > ) > >> > > > >> > > > >> > > What do you think about this approach? Please feel free to share > your > >> > > opinion on the proposed plan. > >> > > Also, I'm not sure if this should be written in a KIP form or not, > no > >> > > public interfaces needed to be modified. > >> > > > >> > > > >> > > For extra information, these are the bugs reported to Scala 3 so > far: > >> > > > >> > > - https://github.com/lampepfl/dotty/issues/13549 > >> > > - https://github.com/lampepfl/dotty/issues/13572 > >> > > - https://github.com/lampepfl/dotty/issues/13630 > >> > > - https://github.com/lampepfl/dotty/issues/13638 > >> > > - https://github.com/lampepfl/dotty/issues/13645 > >> > > > >> > > > >> > > Thank you in advance! > >> > > -- > >> > > > >> > > Josep Prat > >> > > > >> > > *Aiven Deutschland GmbH* > >> > > > >> > > Immanuelkirchstraße 26, 10405 Berlin > >> > > > >> > > Amtsgericht Charlottenburg, HRB 209739 B > >> > > > >> > > Geschäftsführer: Oskari Saarenmaa & Hannu Valtonen > >> > > > >> > > *m:* +491715557497 > >> > > > >> > > *w:* aiven.io > >> > > > >> > > *e:* josep.p...@aiven.io > >> > > > >> > > >> >