Hi there, I just wanted to bump this thread as there has been a great development. Gradle 7.3 is now released and it comes with Scala 3 support (release notes <https://docs.gradle.org/7.3/release-notes.html>). This means that one of the roadblocks to migrate Kafka to Scala 3 has been cleared. Shall I write a KIP to decide if we want to migrate to Scala 3 right away or wait until Kafka 4.0 in which Scala 2.12 will be removed?
I also had a favour to ask, could someone take a look at https://github.com/apache/kafka/pull/11432? The purpose of the PR is to improve some Scala code to make it easy to migrate in the future, the PR has been sitting there for several weeks now. I would highly appreciate some reviews in there so we can move it forward before more merge conflicts appear. Thanks a lot! On Tue, Nov 2, 2021 at 9:06 AM Josep Prat <josep.p...@aiven.io> wrote: > 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 >> >> > > >> >> > >> >> >> > -- 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