Skip to content

Conversation

xuwei-k
Copy link
Contributor

@xuwei-k xuwei-k commented Sep 21, 2025

scala/scala@5fe2d8b

Due to the well-known private volatile field problem, atomic
reference updaters cannot be used efficiently in Scala yet.
For this reason, 4 java files had to be included as well.

Scala 3 has @static annotation.
I think it's time to convert to .scala from .java.

@som-snytt
Copy link
Contributor

@xuwei-k
Copy link
Contributor Author

xuwei-k commented Sep 21, 2025

field is static but not public 😢

Caused by: java.lang.RuntimeException: java.lang.IllegalAccessException: class scala.collection.concurrent.TrieMap$ cannot access a member of class scala.collection.concurrent.INodeBase with modifiers "private volatile"
	at java.base/java.util.concurrent.atomic.AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl.<init>(AtomicReferenceFieldUpdater.java:351)
	at java.base/java.util.concurrent.atomic.AtomicReferenceFieldUpdater.newUpdater(AtomicReferenceFieldUpdater.java:115)
	at scala.collection.concurrent.TrieMap$.<clinit>(TrieMap.scala:1052)

@xuwei-k xuwei-k force-pushed the scala-collection-concurrent-java-files branch from 69b79d7 to 09d1e96 Compare September 21, 2025 22:08

@transient
val inodeupdater: AtomicReferenceFieldUpdater[INodeBase[_, _], MainNode[_, _]] = AtomicReferenceFieldUpdater.newUpdater(classOf[INodeBase[_, _]], classOf[MainNode[_, _]], "mainnode")
val inodeupdater: AtomicReferenceFieldUpdater[INodeBase[_, _], MainNode[_, _]] = INodeBase.updater
Copy link
Contributor Author

Choose a reason for hiding this comment

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

Maybe TrieMap.inodeupdater is unused. but error without this change. Should we deprecate this field? 🤔

Caused by: java.lang.RuntimeException: java.lang.IllegalAccessException: class scala.collection.concurrent.TrieMap$ cannot access a member of class scala.collection.concurrent.INodeBase with modifiers "private volatile"
	at java.base/java.util.concurrent.atomic.AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl.<init>(AtomicReferenceFieldUpdater.java:351)
	at java.base/java.util.concurrent.atomic.AtomicReferenceFieldUpdater.newUpdater(AtomicReferenceFieldUpdater.java:115)
	at scala.collection.concurrent.TrieMap$.<clinit>(TrieMap.scala:1052)

@xuwei-k
Copy link
Contributor Author

xuwei-k commented Sep 21, 2025

🤔

Error:  ## Exception when compiling 705 sources to /home/runner/work/scala3/scala3/library-js/target/scala-library/classes
Error:  java.lang.AssertionError: assertion failed: Trying to access the this of another class: tree.symbol = class INodeBase, class symbol = class TrieMap
Error:  scala.runtime.Scala3RunTime$.assertFailed(Scala3RunTime.scala:10)
Error:  dotty.tools.backend.sjs.JSCodeGen.genStatOrExpr(JSCodeGen.scala:1847)
Error:  dotty.tools.backend.sjs.JSCodeGen.genExpr(JSCodeGen.scala:1709)
Error:  dotty.tools.backend.sjs.JSCodeGen.qual$1(JSCodeGen.scala:4617)
Error:  dotty.tools.backend.sjs.JSCodeGen.genAssignableField(JSCodeGen.scala:4660)
Error:  dotty.tools.backend.sjs.JSCodeGen.genStatOrExpr(JSCodeGen.scala:1863)
Error:  dotty.tools.backend.sjs.JSCodeGen.genStatOrExpr$$anonfun$4(JSCodeGen.scala:1883)
Error:  scala.Option.fold(Option.scala:265)
Error:  dotty.tools.backend.sjs.JSCodeGen.genStatOrExpr(JSCodeGen.scala:1882)
Error:  dotty.tools.backend.sjs.JSCodeGen.genExpr(JSCodeGen.scala:1709)
Error:  dotty.tools.backend.sjs.JSCodeGen.genSimpleBinaryOp(JSCodeGen.scala:2663)
Error:  dotty.tools.backend.sjs.JSCodeGen.genSimpleOp(JSCodeGen.scala:2585)
Error:  dotty.tools.backend.sjs.JSCodeGen.genPrimitiveOp(JSCodeGen.scala:2560)
Error:  dotty.tools.backend.sjs.JSCodeGen.genApply(JSCodeGen.scala:2206)
Error:  dotty.tools.backend.sjs.JSCodeGen.genStatOrExpr(JSCodeGen.scala:1835)
Error:  dotty.tools.backend.sjs.JSCodeGen.genExpr(JSCodeGen.scala:1709)
Error:  dotty.tools.backend.sjs.JSCodeGen.genStatOrExpr(JSCodeGen.scala:1809)
Error:  dotty.tools.backend.sjs.JSCodeGen.genExpr(JSCodeGen.scala:1709)
Error:  dotty.tools.backend.sjs.JSCodeGen.genStatOrExpr(JSCodeGen.scala:1822)
Error:  dotty.tools.backend.sjs.JSCodeGen.genStatOrExpr(JSCodeGen.scala:1917)
Error:  dotty.tools.backend.sjs.JSCodeGen.genStatOrExpr(JSCodeGen.scala:1813)
Error:  dotty.tools.backend.sjs.JSCodeGen.genStat(JSCodeGen.scala:1687)
Error:  dotty.tools.backend.sjs.JSCodeGen.genStatOrExpr(JSCodeGen.scala:1829)
Error:  dotty.tools.backend.sjs.JSCodeGen.genStatOrExpr(JSCodeGen.scala:1917)
Error:  dotty.tools.backend.sjs.JSCodeGen.genExpr(JSCodeGen.scala:1709)
Error:  dotty.tools.backend.sjs.JSCodeGen.genBody$1(JSCodeGen.scala:1648)
Error:  dotty.tools.backend.sjs.JSCodeGen.genMethodDef(JSCodeGen.scala:1653)
Error:  dotty.tools.backend.sjs.JSCodeGen.genMethodWithCurrentLocalNameScope$$anonfun$1(JSCodeGen.scala:1620)
Error:  dotty.tools.backend.sjs.JSCodeGen.withPerMethodBodyState$$anonfun$1(JSCodeGen.scala:108)
Error:  dotty.tools.backend.sjs.ScopedVar$.withScopedVars(ScopedVar.scala:33)
Error:  dotty.tools.backend.sjs.JSCodeGen.withPerMethodBodyState(JSCodeGen.scala:109)
Error:  dotty.tools.backend.sjs.JSCodeGen.genMethodWithCurrentLocalNameScope(JSCodeGen.scala:1626)
Error:  dotty.tools.backend.sjs.JSCodeGen.genMethod$$anonfun$1(JSCodeGen.scala:1480)
Error:  dotty.tools.backend.sjs.ScopedVar$.withScopedVars(ScopedVar.scala:33)
Error:  dotty.tools.backend.sjs.JSCodeGen.genMethod(JSCodeGen.scala:1481)
Error:  dotty.tools.backend.sjs.JSCodeGen.genScalaClass$$anonfun$2(JSCodeGen.scala:385)
Error:  scala.collection.immutable.List.foreach(List.scala:338)
Error:  dotty.tools.backend.sjs.JSCodeGen.genScalaClass(JSCodeGen.scala:369)
Error:  dotty.tools.backend.sjs.JSCodeGen.genCompilationUnit$$anonfun$3$$anonfun$1(JSCodeGen.scala:254)
Error:  dotty.tools.backend.sjs.ScopedVar$.withScopedVars(ScopedVar.scala:33)
Error:  dotty.tools.backend.sjs.JSCodeGen.genCompilationUnit$$anonfun$3(JSCodeGen.scala:258)
Error:  scala.runtime.function.JProcedure1.apply(JProcedure1.java:15)
Error:  scala.runtime.function.JProcedure1.apply(JProcedure1.java:10)
Error:  scala.collection.immutable.List.foreach(List.scala:338)
Error:  dotty.tools.backend.sjs.JSCodeGen.genCompilationUnit(JSCodeGen.scala:234)
Error:  dotty.tools.backend.sjs.JSCodeGen.run(JSCodeGen.scala:172)
Error:  dotty.tools.backend.sjs.GenSJSIR.run(GenSJSIR.scala:21)
Error:  dotty.tools.dotc.core.Phases$Phase.runOn$$anonfun$1(Phases.scala:386)
Error:  scala.runtime.function.JProcedure1.apply(JProcedure1.java:15)
Error:  scala.runtime.function.JProcedure1.apply(JProcedure1.java:10)
Error:  scala.collection.immutable.List.foreach(List.scala:338)
Error:  dotty.tools.dotc.core.Phases$Phase.runOn(Phases.scala:379)
Error:  dotty.tools.dotc.Run.runPhases$1$$anonfun$1(Run.scala:380)
Error:  scala.runtime.function.JProcedure1.apply(JProcedure1.java:15)
Error:  scala.runtime.function.JProcedure1.apply(JProcedure1.java:10)
Error:  scala.collection.ArrayOps$.foreach$extension(ArrayOps.scala:1327)
Error:  dotty.tools.dotc.Run.runPhases$1(Run.scala:373)
Error:  dotty.tools.dotc.Run.compileUnits$$anonfun$1$$anonfun$2(Run.scala:420)
Error:  dotty.tools.dotc.Run.compileUnits$$anonfun$1$$anonfun$adapted$1(Run.scala:420)
Error:  scala.Function0.apply$mcV$sp(Function0.scala:45)
Error:  dotty.tools.dotc.Run.showProgress(Run.scala:482)
Error:  dotty.tools.dotc.Run.compileUnits$$anonfun$1(Run.scala:420)
Error:  dotty.tools.dotc.Run.compileUnits$$anonfun$adapted$1(Run.scala:432)
Error:  dotty.tools.dotc.util.Stats$.maybeMonitored(Stats.scala:69)
Error:  dotty.tools.dotc.Run.compileUnits(Run.scala:432)
Error:  dotty.tools.dotc.Run.compileSources(Run.scala:319)
Error:  dotty.tools.dotc.Run.compile(Run.scala:304)
Error:  dotty.tools.dotc.Driver.doCompile(Driver.scala:37)
Error:  dotty.tools.xsbt.CompilerBridgeDriver.run(CompilerBridgeDriver.java:141)
Error:  dotty.tools.xsbt.CompilerBridge.run(CompilerBridge.java:22)
Error:  sbt.internal.inc.AnalyzingCompiler.compile(AnalyzingCompiler.scala:91)

@xuwei-k
Copy link
Contributor Author

xuwei-k commented Sep 21, 2025

@He-Pin
Copy link
Contributor

He-Pin commented Sep 22, 2025

Better verify with javap too

@xuwei-k xuwei-k closed this Sep 22, 2025
@xuwei-k xuwei-k deleted the scala-collection-concurrent-java-files branch September 22, 2025 22:04
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.

3 participants