https://dotty.epfl.ch/blog/2021/02/17/scala3-rc1.html [logo] Scala 3 3.0.0-RC2-bin-20210218-a633e93-NIGHTLY Scala 3 Blog Scala 3.0.0-RC1 - first release candidate is here Scala 3.0.0-M3: developer's preview before RC1 Scala 3.0.0-M1 is here Dotty becomes Scala 3 Announcing Dotty 0.27.0-RC1 - ScalaJS, performance, stability Announcing Dotty 0.26.0-RC1 - unified extension methods and more Announcing Dotty 0.25.0-RC2 - speed-up of givens and change in the tuple API Announcing Dotty 0.24.0-RC1 - 2.13.2 standard library, better error messages and more Announcing Dotty 0.23.0-RC1 - safe initialization checks, type-level bitwise operations and more Announcing Dotty 0.22.0-RC1 - syntactic enhancements, type-level arithmetic and more Announcing Dotty 0.21.0-RC1 - explicit nulls, new syntax for `match` and conditional givens, and more Announcing Dotty 0.20.0-RC1 - `with` starting indentation blocks, inline given specializations and more Announcing Dotty 0.19.0-RC1 - further refinements of the syntax and the migration to 2.13.1 standard library Announcing Dotty 0.18.1-RC1 - switch to the 2.13 standard library, indentation-based syntax and other experiments Announcing Dotty 0.17.0-RC1 - new implicit scoping rules and more Announcing Dotty 0.16.0-RC3 - the Scala Days 2019 Release Announcing Dotty 0.15.0-RC1 - the fully bootstrapped compiler Announcing Dotty 0.14.0-RC1 with export, immutable arrays, creator applications and more Announcing Dotty 0.13.0-RC1 with Spark support, top level definitions and redesigned implicits Announcing Dotty 0.12.0-RC1 Announcing Dotty 0.11.0-RC1 Announcing Dotty 0.10.0-RC1 Announcing Dotty 0.9.0-RC1 Announcing Dotty 0.7.0 and 0.8.0-RC1 Announcing Dotty 0.6.0 and 0.7.0-RC1 Announcing Dotty 0.5.0-RC1 Announcing Dotty 0.4.0-RC1 Announcing Dotty 0.3.0-RC2 Announcing Dotty 0.2.0-RC1, with new optimizations, improved stability and IDE support Announcing Dotty 0.1.2-RC1, a major step towards Scala 3 Implicit Function Types Multiversal Equality for Scala Scaling DOT to Scala - Soundness The Essence of Scala New Year Resolutions We got liftoff! Usage Getting Started: Users Using Dotty with sbt IDE support for Dotty Worksheet mode with Dotty IDE Language Versions Using Dotty with cbt scaladoc API Documentation Built-in blog Scaladoc-specific Tags and Features Static documentation Dottydoc [Legacy] Reference Overview New Types Intersection Types Union Types Type Lambdas Match Types Dependent Function Types Polymorphic Function Types Enums Enumerations Algebraic Data Types Translation of Enums and ADTs Contextual Abstractions Overview Given Instances Using Clauses Context Bounds Importing Givens Extension Methods Implementing Type classes Type Class Derivation Multiversal Equality Context Functions Implicit Conversions By-Name Context Parameters Relationship with Scala 2 Implicits Metaprogramming Overview Inline Macros Runtime Multi-Stage Programming Reflection TASTy Inspection Other New Features Trait Parameters Transparent Traits Universal Apply Methods Export Clauses Opaque Type Aliases Open Classes Parameter Untupling Kind Polymorphism The Matchable Trait The @threadUnsafe annotation The @targetName annotation New Control Syntax Optional Braces Explicit Nulls Safe Initialization Other Changed Features Numeric Literals Programmatic Structural Types Rules for Operators Wildcard Arguments in Types Imports Changes in Type Checking Changes in Type Inference Changes in Implicit Resolution Implicit Conversions Changes in Overload Resolution Match Expressions Vararg Splices Pattern Bindings Option-less pattern matching Automatic Eta Expansion Changes in Compiler Plugins Lazy Vals initialization Main Methods Dropped Features Dropped: Delayedinit Dropped: Scala 2 Macros Dropped: Existential Types Dropped: General Type Projection Dropped: Do-While Dropped: Procedure Syntax Dropped: Package Objects Dropped: Early Initializers Dropped: Class Shadowing Dropped: Limit 22 Dropped: XML Literals Dropped: Symbol Literals Dropped: Auto-Application Dropped: Weak Conformance Deprecated: Nonlocal Returns Dropped: private[this] and protected[this] Dropped: Wildcard Initializer Scala 3 Syntax Summary Contributing Contributing Knowledge Getting Started Workflow Testing in Dotty Debugging Techniques IDEs and Tools Basic Operations with Mill Working with Scalafix Procedures Release Procedure Test Vulpix Framework Internals Backend Internals Classpaths Core Data Structures Contexts Differences between Scalac and Dotty Higher-Kinded Types in Dotty Dotty Overall Structure Dotc's concept of time Scala 3 Syntax Summary Type System Dotty Internals 1: Trees & Symbols (Meeting Notes) Debug Macros Resources Talks Scala 3 API dotty.tools.tasty TastyBuffer Addr NameRef TastyBuffer TastyFormat NameTags NameTags TastyHash TastyHeader TastyHeaderUnpickler TastyHeaderUnpickler TastyReader UnpickleException dotty.tools.tasty.util Util scala #:: *: *: <:< <:< =:= App Array UnapplySeqWrapper Array Boolean Boolean Byte Byte CanEqual CanEqual derived Char Char Console Conversion DelayedInit Double Double DummyImplicit DummyImplicit Dynamic EmptyTuple Enumeration Value Val ValueOrdering ValueSet ValueSet Equals Float Float Function Function0 Function1 UnliftOps Function1 Function10 Function11 Function12 Function13 Function14 Function15 Function16 Function17 Function18 Function19 Function2 Function20 Function21 Function22 Function3 Function4 Function5 Function6 Function7 Function8 Function9 IArray WithFilter Int Int Long Long MatchError NonEmptyTuple None NotImplementedError Option Option WithFilter PartialFunction PartialFunction ElementWiseExtractor PolyFunction Predef ArrowAssoc Ensuring StringFormat any2stringadd SeqCharSequence ArrayCharSequence Product Product1 Product1 Product10 Product10 Product11 Product11 Product12 Product12 Product13 Product13 Product14 Product14 Product15 Product15 Product16 Product16 Product17 Product17 Product18 Product18 Product19 Product19 Product2 Product2 Product20 Product20 Product21 Product21 Product22 Product22 Product3 Product3 Product4 Product4 Product5 Product5 Product6 Product6 Product7 Product7 Product8 Product8 Product9 Product9 Proxy Proxy Typed ScalaReflectionException Selectable Selectable SerialVersionUID Short Short Some Specializable Specializable SpecializedGroup Group StringContext s StringContext InvalidEscapeException Symbol Symbol Tuple Tuple Tuple1 Tuple10 Tuple11 Tuple12 Tuple13 Tuple14 Tuple15 Tuple16 Tuple17 Tuple18 Tuple19 Tuple2 Tuple20 Tuple21 Tuple22 Tuple3 Tuple4 Tuple5 Tuple6 Tuple7 Tuple8 Tuple9 UninitializedError UninitializedFieldError Unit Unit ValueOf deprecated deprecatedInheritance deprecatedName deprecatedOverriding inline language experimental namedTypeArguments genericNumberLiterals noAutoTupling strictEquality adhocExtensions unsafeNulls future `future-migration` `3.0-migration` `3.0` languageFeature dynamics dynamics postfixOps postfixOps reflectiveCalls reflectiveCalls implicitConversions implicitConversions higherKinds higherKinds existentials existentials experimental macros macros main native noinline specialized throws transient unchecked volatile scala.annotation Annotation ClassfileAnnotation ConstantAnnotation RefiningAnnotation StaticAnnotation TypeConstraint alpha compileTimeOnly constructorOnly elidable elidable implicitAmbiguous implicitNotFound nowarn showAsInfix static strictfp switch tailrec targetName threadUnsafe transparentTrait unspecialized unused varargs scala.annotation.meta beanGetter beanSetter companionClass companionMethod companionObject field getter languageFeature param setter scala.annotation.unchecked uncheckedStable uncheckedVariance scala.beans BeanProperty BooleanBeanProperty scala.collection +: :+ AbstractIndexedSeqView AbstractIterable AbstractIterator AbstractMap AbstractMapView AbstractSeq AbstractSeqView AbstractSet AbstractView AnyStepper AnyStepper AnyStepperSpliterator ArrayOps WithFilter ArrayOps BitSet BitSet BitSetOps BitSetOps BufferedIterator BuildFrom BuildFrom BuildFromLowPriority1 BuildFromLowPriority2 ClassTagIterableFactory ClassTagIterableFactory Delegate AnyIterableDelegate ClassTagSeqFactory ClassTagSeqFactory Delegate AnySeqDelegate DefaultMap DoubleStepper DoubleStepper DoubleStepperSpliterator EvidenceIterableFactory EvidenceIterableFactory Delegate EvidenceIterableFactoryDefaults Factory Factory IndexedSeq IndexedSeq IndexedSeqOps IndexedSeqView IndexedSeqView Id Appended Prepended Concat Take TakeRight Drop DropRight Map Reverse Slice IntStepper IntStepper IntStepperSpliterator Iterable Iterable IterableFactory IterableFactory Delegate IterableFactoryDefaults IterableOnce IterableOnce IterableOnceExtensionMethods IterableOnceOps IterableOps IterableOps SizeCompareOps WithFilter Iterator GroupedIterator Iterator JavaConverters AsJava AsScala AsJavaCollection AsJavaEnumeration AsJavaDictionary LazyZip2 LazyZip2 LazyZip3 LazyZip3 LazyZip4 LazyZip4 LinearSeq LinearSeq LinearSeqOps LongStepper LongStepper LongStepperSpliterator Map Map MapFactory MapFactory Delegate MapFactoryDefaults MapOps MapOps WithFilter MapView MapView Id MapValues FilterKeys Filter TapEach MapViewFactory Searching SearchResult Found InsertionPoint SearchImpl Seq Seq SeqFactory SeqFactory Delegate UnapplySeqWrapper SeqMap SeqMap SeqOps SeqOps SeqView SeqView Id Map Appended Prepended Concat Reverse Take TakeRight Drop DropRight Sorted Set Set SetOps SortedIterableFactory SortedIterableFactory Delegate SortedMap SortedMap SortedMapFactory SortedMapFactory Delegate SortedMapFactoryDefaults SortedMapOps SortedMapOps WithFilter SortedOps SortedSet SortedSet SortedSetFactoryDefaults SortedSetOps SortedSetOps WithFilter SpecificIterableFactory Stepper Stepper EfficientSplit StepperShape StepperShape Shape StepperShapeLowPriority1 StepperShapeLowPriority2 StrictOptimizedClassTagSeqFactory StrictOptimizedIterableOps StrictOptimizedLinearSeqOps StrictOptimizedMapOps StrictOptimizedSeqFactory StrictOptimizedSeqOps StrictOptimizedSetOps StrictOptimizedSortedMapOps StrictOptimizedSortedSetOps StringOps WithFilter StringOps StringView View View Empty Single Elems Fill Tabulate Iterate Unfold Filter Filter DistinctBy LeftPartitionMapped RightPartitionMapped Drop DropRight DropWhile Take TakeRight TakeWhile ScanLeft Map FlatMap Collect Concat Zip ZipAll Appended Prepended Updated ZipWithIndex PadTo WithFilter scala.collection.concurrent Map TrieMap TrieMap MangledHashing scala.collection.convert AsJavaConverters AsJavaExtensions IteratorHasAsJava IterableHasAsJava BufferHasAsJava MutableSeqHasAsJava SeqHasAsJava MutableSetHasAsJava SetHasAsJava MutableMapHasAsJava MapHasAsJava ConcurrentMapHasAsJava AsScalaConverters AsScalaExtensions IteratorHasAsScala EnumerationHasAsScala IterableHasAsScala CollectionHasAsScala ListHasAsScala SetHasAsScala MapHasAsScala ConcurrentMapHasAsScala DictionaryHasAsScala PropertiesHasAsScala ImplicitConversions ImplicitConversionsToJava ImplicitConversionsToScala StreamExtensions IterableHasSeqStream IterableNonGenericHasParStream MapHasSeqKeyValueStream MapHasParKeyValueStream StepperHasSeqStream StepperHasParStream DoubleArrayHasSeqParStream IntArrayHasSeqParStream LongArrayHasSeqParStream AnyArrayHasSeqParStream ByteArrayHasSeqParStream ShortArrayHasSeqParStream CharArrayHasSeqParStream FloatArrayHasSeqParStream StringHasSeqParStream StreamHasToScala IntStreamHasToScala LongStreamHasToScala DoubleStreamHasToScala StreamExtensions StreamShape StreamShape StreamShapeLowPriority1 StreamUnboxer StreamUnboxer AccumulatorFactoryInfo LowPriorityAccumulatorFactoryInfo AccumulatorFactoryInfo ToJavaImplicits ToScalaImplicits scala.collection.generic DefaultSerializable DefaultSerializationProxy IsIterable IsIterable IsIterableLowPriority IsIterableOnce IsIterableOnce IsIterableOnceLowPriority IsMap IsMap IsSeq IsSeq Subtractable scala.collection.immutable :: AbstractMap AbstractSeq AbstractSet ArraySeq ArraySeq ofRef ofByte ofShort ofChar ofInt ofLong ofFloat ofDouble ofBoolean ofUnit BitSet BitSet BitSet1 BitSet2 BitSetN HashMap HashMap HashSet HashSet IndexedSeq IndexedSeq IndexedSeqDefaults IndexedSeqOps IntMap IntMap Iterable Iterable LazyList LazyList cons Deferrer #:: SerializationProxy LinearSeq LinearSeq LinearSeqOps List List ListMap ListMap ListSet ListSet LongMap LongMap Map Map WithDefault Map1 Map2 Map3 Map4 MapOps ImmutableKeySet Nil NumericRange NumericRange Inclusive Exclusive Queue Queue Range Range Inclusive Exclusive BigInt Long BigDecimal Partial Int Seq Seq SeqMap SeqMap SeqOps Set Set Set1 Set2 Set3 Set4 SetOps SortedMap SortedMap WithDefault SortedMapOps ImmutableKeySortedSet SortedSet SortedSet SortedSetOps Stream Stream cons Empty Cons Deferrer #:: SerializationProxy StrictOptimizedMapOps StrictOptimizedSeqOps StrictOptimizedSetOps StrictOptimizedSortedMapOps StrictOptimizedSortedSetOps TreeMap TreeMap TreeSeqMap TreeSeqMap OrderBy OrderBy Insertion Modification Builder Ordering TreeSet TreeSet Vector Vector VectorBuilder VectorMap VectorMap WrappedString WrappedString UnwrapOp scala.collection.mutable AbstractBuffer AbstractIterable AbstractMap AbstractSeq AbstractSet AnyRefMap AnyRefMap AnyRefMapBuilder ArrayBuffer ArrayBuffer ArrayBufferView ArrayBuilder ArrayBuilder ofRef ofByte ofShort ofChar ofInt ofLong ofFloat ofDouble ofBoolean ofUnit ArrayDeque ArrayDeque ArrayDequeOps ArraySeq ArraySeq ofRef ofByte ofShort ofChar ofInt ofLong ofFloat ofDouble ofBoolean ofUnit BitSet BitSet Buffer Buffer Builder Clearable Cloneable CollisionProofHashMap CollisionProofHashMap Node RBNode Growable Growable GrowableBuilder HashMap HashMap HashSet HashSet ImmutableBuilder IndexedBuffer IndexedBuffer IndexedSeq IndexedSeq IndexedSeqOps Iterable Iterable LinkedHashMap LinkedHashMap LinkedHashSet LinkedHashSet ListBuffer ListBuffer ListMap ListMap LongMap LongMap LongMapBuilder Map Map WithDefault MapOps MultiMap OpenHashMap OpenHashMap PriorityQueue PriorityQueue Queue Queue ReusableBuilder Seq Seq SeqMap SeqMap SeqOps Set Set SetOps Shrinkable SortedMap SortedMap WithDefault SortedMapOps SortedSet SortedSet SortedSetOps Stack Stack StringBuilder StringBuilder TreeMap TreeMap TreeSet TreeSet UnrolledBuffer UnrolledBuffer Unrolled WeakHashMap WeakHashMap scala.compat Platform scala.compiletime scala.compiletime.ops any boolean int string scala.compiletime.testing Error ErrorKind ErrorKind Parser Typer scala.concurrent Await Awaitable Batchable BlockContext BlockContext CanAwait Channel DelayedLazyVal ExecutionContext ExecutionContext parasitic Implicits ExecutionContextExecutor ExecutionContextExecutorService Future Future never JavaConversions OnCompleteRunnable Promise Promise SyncChannel SyncVar scala.concurrent.duration Deadline Deadline DeadlineIsOrdered DoubleMult Duration Infinite DurationIsOrdered Duration DurationConversions DurationConversions Classifier spanConvert fromNowConvert DurationDouble DurationInt DurationLong FiniteDuration FiniteDurationIsOrdered FiniteDuration IntMult LongMult fromNow span scala.deriving Mirror Mirror Sum Product Singleton SingletonProxy scala.io AnsiColor AnsiColor BufferedSource BufferedLineIterator Codec Codec LowPriorityCodecImplicits Source Source LineIterator Positioner RelaxedPosition RelaxedPositioner NoPositioner StdIn scala.jdk Accumulator Accumulator AccumulatorFactoryShape AccumulatorFactoryShape LowPriorityAccumulatorFactoryShape AnyAccumulator AnyAccumulator SerializationProxy CollectionConverters DoubleAccumulator DoubleAccumulator SerializationProxy DurationConverters JavaDurationOps ScalaDurationOps FunctionConverters FunctionWrappers FromJavaBiConsumer RichBiConsumerAsFunction2 AsJavaBiConsumer RichFunction2AsBiConsumer FromJavaBiFunction RichBiFunctionAsFunction2 AsJavaBiFunction RichFunction2AsBiFunction FromJavaBiPredicate RichBiPredicateAsFunction2 AsJavaBiPredicate RichFunction2AsBiPredicate FromJavaBinaryOperator RichBinaryOperatorAsFunction2 AsJavaBinaryOperator RichFunction2AsBinaryOperator FromJavaBooleanSupplier RichBooleanSupplierAsFunction0 AsJavaBooleanSupplier RichFunction0AsBooleanSupplier FromJavaConsumer RichConsumerAsFunction1 AsJavaConsumer RichFunction1AsConsumer FromJavaDoubleBinaryOperator RichDoubleBinaryOperatorAsFunction2 AsJavaDoubleBinaryOperator RichFunction2AsDoubleBinaryOperator FromJavaDoubleConsumer RichDoubleConsumerAsFunction1 AsJavaDoubleConsumer RichFunction1AsDoubleConsumer FromJavaDoubleFunction RichDoubleFunctionAsFunction1 AsJavaDoubleFunction RichFunction1AsDoubleFunction FromJavaDoublePredicate RichDoublePredicateAsFunction1 AsJavaDoublePredicate RichFunction1AsDoublePredicate FromJavaDoubleSupplier RichDoubleSupplierAsFunction0 AsJavaDoubleSupplier RichFunction0AsDoubleSupplier FromJavaDoubleToIntFunction RichDoubleToIntFunctionAsFunction1 AsJavaDoubleToIntFunction RichFunction1AsDoubleToIntFunction FromJavaDoubleToLongFunction RichDoubleToLongFunctionAsFunction1 AsJavaDoubleToLongFunction RichFunction1AsDoubleToLongFunction FromJavaDoubleUnaryOperator RichDoubleUnaryOperatorAsFunction1 AsJavaDoubleUnaryOperator RichFunction1AsDoubleUnaryOperator FromJavaFunction RichFunctionAsFunction1 AsJavaFunction RichFunction1AsFunction FromJavaIntBinaryOperator RichIntBinaryOperatorAsFunction2 AsJavaIntBinaryOperator RichFunction2AsIntBinaryOperator FromJavaIntConsumer RichIntConsumerAsFunction1 AsJavaIntConsumer RichFunction1AsIntConsumer FromJavaIntFunction RichIntFunctionAsFunction1 AsJavaIntFunction RichFunction1AsIntFunction FromJavaIntPredicate RichIntPredicateAsFunction1 AsJavaIntPredicate RichFunction1AsIntPredicate FromJavaIntSupplier RichIntSupplierAsFunction0 AsJavaIntSupplier RichFunction0AsIntSupplier FromJavaIntToDoubleFunction RichIntToDoubleFunctionAsFunction1 AsJavaIntToDoubleFunction RichFunction1AsIntToDoubleFunction FromJavaIntToLongFunction RichIntToLongFunctionAsFunction1 AsJavaIntToLongFunction RichFunction1AsIntToLongFunction FromJavaIntUnaryOperator RichIntUnaryOperatorAsFunction1 AsJavaIntUnaryOperator RichFunction1AsIntUnaryOperator FromJavaLongBinaryOperator RichLongBinaryOperatorAsFunction2 AsJavaLongBinaryOperator RichFunction2AsLongBinaryOperator FromJavaLongConsumer RichLongConsumerAsFunction1 AsJavaLongConsumer RichFunction1AsLongConsumer FromJavaLongFunction RichLongFunctionAsFunction1 AsJavaLongFunction RichFunction1AsLongFunction FromJavaLongPredicate RichLongPredicateAsFunction1 AsJavaLongPredicate RichFunction1AsLongPredicate FromJavaLongSupplier RichLongSupplierAsFunction0 AsJavaLongSupplier RichFunction0AsLongSupplier FromJavaLongToDoubleFunction RichLongToDoubleFunctionAsFunction1 AsJavaLongToDoubleFunction RichFunction1AsLongToDoubleFunction FromJavaLongToIntFunction RichLongToIntFunctionAsFunction1 AsJavaLongToIntFunction RichFunction1AsLongToIntFunction FromJavaLongUnaryOperator RichLongUnaryOperatorAsFunction1 AsJavaLongUnaryOperator RichFunction1AsLongUnaryOperator FromJavaObjDoubleConsumer RichObjDoubleConsumerAsFunction2 AsJavaObjDoubleConsumer RichFunction2AsObjDoubleConsumer FromJavaObjIntConsumer RichObjIntConsumerAsFunction2 AsJavaObjIntConsumer RichFunction2AsObjIntConsumer FromJavaObjLongConsumer RichObjLongConsumerAsFunction2 AsJavaObjLongConsumer RichFunction2AsObjLongConsumer FromJavaPredicate RichPredicateAsFunction1 AsJavaPredicate RichFunction1AsPredicate FromJavaSupplier RichSupplierAsFunction0 AsJavaSupplier RichFunction0AsSupplier FromJavaToDoubleBiFunction RichToDoubleBiFunctionAsFunction2 AsJavaToDoubleBiFunction RichFunction2AsToDoubleBiFunction FromJavaToDoubleFunction RichToDoubleFunctionAsFunction1 AsJavaToDoubleFunction RichFunction1AsToDoubleFunction FromJavaToIntBiFunction RichToIntBiFunctionAsFunction2 AsJavaToIntBiFunction RichFunction2AsToIntBiFunction FromJavaToIntFunction RichToIntFunctionAsFunction1 AsJavaToIntFunction RichFunction1AsToIntFunction FromJavaToLongBiFunction RichToLongBiFunctionAsFunction2 AsJavaToLongBiFunction RichFunction2AsToLongBiFunction FromJavaToLongFunction RichToLongFunctionAsFunction1 AsJavaToLongFunction RichFunction1AsToLongFunction FromJavaUnaryOperator RichUnaryOperatorAsFunction1 AsJavaUnaryOperator RichFunction1AsUnaryOperator FutureConverters FutureOps CompletionStageOps IntAccumulator IntAccumulator SerializationProxy LongAccumulator LongAccumulator SerializationProxy OptionConverters RichOptional RichOption RichOptionalDouble RichOptionalInt RichOptionalLong OptionShape OptionShape Priority0FunctionExtensions Priority1FunctionExtensions Priority2FunctionExtensions Priority3FunctionExtensions StreamConverters scala.jdk.javaapi CollectionConverters DurationConverters FunctionConverters FutureConverters OptionConverters StreamConverters scala.math BigDecimal RoundingMode BigDecimal BigInt BigInt Equiv Equiv ExtraImplicits Implicits Unit Boolean Byte Char Short Int Long Float StrictEquiv StrictEquiv IeeeEquiv IeeeEquiv DeprecatedFloatEquiv Double StrictEquiv StrictEquiv IeeeEquiv IeeeEquiv DeprecatedDoubleEquiv BigInt BigDecimal String Symbol Fractional FractionalOps Fractional ExtraImplicits Implicits Integral IntegralOps Integral ExtraImplicits Implicits LowPriorityEquiv LowPriorityOrderingImplicits Numeric ExtraImplicits Implicits BigIntIsIntegral BigIntIsIntegral IntIsIntegral IntIsIntegral ShortIsIntegral ShortIsIntegral ByteIsIntegral ByteIsIntegral CharIsIntegral CharIsIntegral LongIsIntegral LongIsIntegral FloatIsFractional FloatIsFractional DoubleIsFractional DoubleIsFractional BigDecimalIsConflicted BigDecimalIsFractional BigDecimalAsIfIntegral BigDecimalIsFractional BigDecimalAsIfIntegral Numeric NumericOps Ordered Ordered Ordering OrderingOps Ordering CachedReverse ExtraImplicits Implicits UnitOrdering Unit BooleanOrdering Boolean ByteOrdering Byte CharOrdering Char ShortOrdering Short IntOrdering Int LongOrdering Long Float TotalOrdering TotalOrdering IeeeOrdering IeeeOrdering DeprecatedFloatOrdering Double TotalOrdering TotalOrdering IeeeOrdering IeeeOrdering DeprecatedDoubleOrdering BigIntOrdering BigInt BigDecimalOrdering BigDecimal StringOrdering String SymbolOrdering Symbol OptionOrdering PartialOrdering PartialOrdering PartiallyOrdered ScalaNumericAnyConversions ScalaNumericConversions scala.quoted Expr Expr ExprMap Exprs FromExpr FromExpr OptionFromExpr NoneFromExpr SomeFromExpr StringContextFromExpr EmptyTupleFromExpr Tuple1FromExpr Tuple2FromExpr Tuple3FromExpr Tuple4FromExpr Tuple5FromExpr Tuple6FromExpr Tuple7FromExpr Tuple8FromExpr Tuple9FromExpr Tuple10FromExpr Tuple11FromExpr Tuple12FromExpr Tuple13FromExpr Tuple14FromExpr Tuple15FromExpr Tuple16FromExpr Tuple17FromExpr Tuple18FromExpr Tuple19FromExpr Tuple20FromExpr Tuple21FromExpr Tuple22FromExpr SeqFromExpr NilFromExpr ListFromExpr SetFromExpr MapFromExpr EitherFromExpr LeftFromExpr RightFromExpr Quotes reflectModule CompilationInfoModule TreeModule TreeMethods PackageClauseModule PackageClauseMethods ImportModule ImportMethods ExportModule ExportMethods DefinitionModule DefinitionMethods ClassDefModule ClassDefMethods DefDefModule DefDefMethods ValDefModule ValDefMethods TypeDefModule TypeDefMethods TermModule TermMethods RefModule IdentModule IdentMethods SelectModule SelectMethods LiteralModule LiteralMethods ThisModule ThisMethods NewModule NewMethods NamedArgModule NamedArgMethods ApplyModule ApplyMethods TypeApplyModule TypeApplyMethods SuperModule SuperMethods TypedModule TypedMethods AssignModule AssignMethods BlockModule BlockMethods ClosureModule ClosureMethods LambdaModule IfModule IfMethods MatchModule MatchMethods SummonFromModule SummonFromMethods TryModule TryMethods ReturnModule ReturnMethods RepeatedModule RepeatedMethods InlinedModule InlinedMethods SelectOuterModule SelectOuterMethods WhileModule WhileMethods TypeTreeModule TypeTreeMethods InferredModule TypeIdentModule TypeIdentMethods TypeSelectModule TypeSelectMethods TypeProjectionModule TypeProjectionMethods SingletonModule SingletonMethods RefinedModule RefinedMethods AppliedModule AppliedMethods AnnotatedModule AnnotatedMethods MatchTypeTreeModule MatchTypeTreeMethods ByNameModule ByNameMethods LambdaTypeTreeModule LambdaTypeTreeMethods TypeBindModule TypeBindMethods TypeBlockModule TypeBlockMethods TypeBoundsTreeModule TypeBoundsTreeMethods WildcardTypeTreeModule WildcardTypeTreeMethods CaseDefModule CaseDefMethods TypeCaseDefModule TypeCaseDefMethods BindModule BindMethods UnapplyModule UnapplyMethods AlternativesModule AlternativesMethods ParamClauseModule ParamClauseMethods TermParamClauseModule TermParamClauseMethods TypeParamClauseModule TypeParamClauseMethods SelectorModule SimpleSelectorModule SimpleSelectorMethods RenameSelectorModule RenameSelectorMethods OmitSelectorModule OmitSelectorMethods GivenSelectorModule GivenSelectorMethods TypeReprModule TypeReprMethods ConstantTypeModule ConstantTypeMethods NamedTypeMethods TermRefModule TypeRefModule TypeRefMethods SuperTypeModule SuperTypeMethods RefinementModule RefinementMethods AppliedTypeModule AppliedTypeMethods AnnotatedTypeModule AnnotatedTypeMethods AndOrTypeMethods AndTypeModule OrTypeModule MatchTypeModule MatchTypeMethods ByNameTypeModule ByNameTypeMethods ParamRefModule ParamRefMethods ThisTypeModule ThisTypeMethods RecursiveThisModule RecursiveThisMethods RecursiveTypeModule RecursiveTypeMethods LambdaTypeMethods MethodTypeModule MethodTypeMethods PolyTypeModule PolyTypeMethods TypeLambdaModule TypeLambdaMethods MatchCaseModule MatchCaseMethods TypeBoundsModule TypeBoundsMethods NoPrefixModule ConstantModule ConstantMethods BooleanConstantModule ByteConstantModule ShortConstantModule IntConstantModule LongConstantModule FloatConstantModule DoubleConstantModule CharConstantModule StringConstantModule UnitConstantModule NullConstantModule ClassOfConstantModule ImplicitsModule ImplicitSearchSuccessMethods ImplicitSearchFailureMethods SymbolModule SymbolMethods SignatureModule SignatureMethods defnModule FlagsModule FlagsMethods PositionModule PositionMethods SourceFileModule SourceFileMethods reportModule TreeAccumulator TreeTraverser TreeMap Printer PrinterModule ToExpr ToExpr BooleanToExpr ByteToExpr ShortToExpr IntToExpr LongToExpr FloatToExpr DoubleToExpr CharToExpr StringToExpr ClassToExpr ClassTagToExpr ArrayToExpr ArrayOfBooleanToExpr ArrayOfByteToExpr ArrayOfShortToExpr ArrayOfCharToExpr ArrayOfIntToExpr ArrayOfLongToExpr ArrayOfFloatToExpr ArrayOfDoubleToExpr IArrayToExpr SeqToExpr ListToExpr NilToExpr SetToExpr MapToExpr OptionToExpr SomeToExpr NoneToExpr EitherToExpr LeftToExpr RightToExpr EmptyTupleToExpr Tuple1ToExpr Tuple2ToExpr Tuple3ToExpr Tuple4ToExpr Tuple5ToExpr Tuple6ToExpr Tuple7ToExpr Tuple8ToExpr Tuple9ToExpr Tuple10ToExpr Tuple11ToExpr Tuple12ToExpr Tuple13ToExpr Tuple14ToExpr Tuple15ToExpr Tuple16ToExpr Tuple17ToExpr Tuple18ToExpr Tuple19ToExpr Tuple20ToExpr Tuple21ToExpr Tuple22ToExpr TupleConsToExpr BigIntToExpr BigDecimalToExpr StringContextToExpr Type Type Varargs scala.quoted.runtime Expr Patterns patternType fromAbove QuoteMatching ExprMatchModule TypeMatchModule QuoteUnpickler SplicedType StopMacroExpansion scala.ref PhantomReference Reference ReferenceQueue ReferenceWrapper SoftReference SoftReference WeakReference WeakReference scala.reflect AnyValManifest ClassManifestDeprecatedApis ClassManifestFactory ClassTag ClassTag Enum Manifest Manifest ManifestFactory NameTransformer NoManifest OptManifest Selectable Selectable TypeTest TypeTest scala.runtime AbstractFunction0 AbstractFunction1 AbstractFunction10 AbstractFunction11 AbstractFunction12 AbstractFunction13 AbstractFunction14 AbstractFunction15 AbstractFunction16 AbstractFunction17 AbstractFunction18 AbstractFunction19 AbstractFunction2 AbstractFunction20 AbstractFunction21 AbstractFunction22 AbstractFunction3 AbstractFunction4 AbstractFunction5 AbstractFunction6 AbstractFunction7 AbstractFunction8 AbstractFunction9 AbstractPartialFunction ArrayCharSequence Arrays EnumValue FractionalProxy FunctionXXL IntegralProxy LambdaDeserialize LambdaDeserialize LambdaDeserializer LazyBoolean LazyByte LazyChar LazyDouble LazyFloat LazyInt LazyLong LazyRef LazyShort LazyUnit LazyVals Names NonLocalReturnControl OrderedProxy RangedProxy RichBoolean RichByte RichChar RichDouble RichFloat RichInt RichLong RichShort Scala3RunTime ScalaNumberProxy ScalaRunTime ScalaWholeNumberProxy StructuralCallSite StructuralCallSite Tuple2Zipped Tuple2Zipped Ops Tuple3Zipped Tuple3Zipped Ops TupleXXL TupleXXL Tuples TypeBox ZippedIterable2 ZippedIterable2 ZippedIterable3 ZippedIterable3 `Nothing$` `Null$` scala.runtime.java8 `JFunction0$mcB$sp` `JFunction0$mcC$sp` `JFunction0$mcD$sp` `JFunction0$mcF$sp` `JFunction0$mcI$sp` `JFunction0$mcJ$sp` `JFunction0$mcS$sp` `JFunction0$mcV$sp` `JFunction0$mcZ$sp` `JFunction1$mcDD$sp` `JFunction1$mcDF$sp` `JFunction1$mcDI$sp` `JFunction1$mcDJ$sp` `JFunction1$mcFD$sp` `JFunction1$mcFF$sp` `JFunction1$mcFI$sp` `JFunction1$mcFJ$sp` `JFunction1$mcID$sp` `JFunction1$mcIF$sp` `JFunction1$mcII$sp` `JFunction1$mcIJ$sp` `JFunction1$mcJD$sp` `JFunction1$mcJF$sp` `JFunction1$mcJI$sp` `JFunction1$mcJJ$sp` `JFunction1$mcVD$sp` `JFunction1$mcVF$sp` `JFunction1$mcVI$sp` `JFunction1$mcVJ$sp` `JFunction1$mcZD$sp` `JFunction1$mcZF$sp` `JFunction1$mcZI$sp` `JFunction1$mcZJ$sp` `JFunction2$mcDDD$sp` `JFunction2$mcDDI$sp` `JFunction2$mcDDJ$sp` `JFunction2$mcDID$sp` `JFunction2$mcDII$sp` `JFunction2$mcDIJ$sp` `JFunction2$mcDJD$sp` `JFunction2$mcDJI$sp` `JFunction2$mcDJJ$sp` `JFunction2$mcFDD$sp` `JFunction2$mcFDI$sp` `JFunction2$mcFDJ$sp` `JFunction2$mcFID$sp` `JFunction2$mcFII$sp` `JFunction2$mcFIJ$sp` `JFunction2$mcFJD$sp` `JFunction2$mcFJI$sp` `JFunction2$mcFJJ$sp` `JFunction2$mcIDD$sp` `JFunction2$mcIDI$sp` `JFunction2$mcIDJ$sp` `JFunction2$mcIID$sp` `JFunction2$mcIII$sp` `JFunction2$mcIIJ$sp` `JFunction2$mcIJD$sp` `JFunction2$mcIJI$sp` `JFunction2$mcIJJ$sp` `JFunction2$mcJDD$sp` `JFunction2$mcJDI$sp` `JFunction2$mcJDJ$sp` `JFunction2$mcJID$sp` `JFunction2$mcJII$sp` `JFunction2$mcJIJ$sp` `JFunction2$mcJJD$sp` `JFunction2$mcJJI$sp` `JFunction2$mcJJJ$sp` `JFunction2$mcVDD$sp` `JFunction2$mcVDI$sp` `JFunction2$mcVDJ$sp` `JFunction2$mcVID$sp` `JFunction2$mcVII$sp` `JFunction2$mcVIJ$sp` `JFunction2$mcVJD$sp` `JFunction2$mcVJI$sp` `JFunction2$mcVJJ$sp` `JFunction2$mcZDD$sp` `JFunction2$mcZDI$sp` `JFunction2$mcZDJ$sp` `JFunction2$mcZID$sp` `JFunction2$mcZII$sp` `JFunction2$mcZIJ$sp` `JFunction2$mcZJD$sp` `JFunction2$mcZJI$sp` `JFunction2$mcZJJ$sp` scala.sys BooleanProp BooleanProp Prop Prop Creator FileProp StringProp IntProp DoubleProp ShutdownHookThread ShutdownHookThread SystemProperties SystemProperties scala.sys.process BasicIO FileProcessLogger Process Process ProcessBuilder ProcessBuilder URLBuilder FileBuilder Source Sink ProcessCreation ProcessIO ProcessImplicits ProcessLogger ProcessLogger scala.util ChainingOps ChainingSyntax CommandLineParser ParseError FromString FromString given_FromString_String given_FromString_Boolean given_FromString_Byte given_FromString_Short given_FromString_Int given_FromString_Long given_FromString_Float given_FromString_Double DynamicVariable Either Either MergeableEither LeftProjection RightProjection Failure FromDigits FromDigits WithRadix Decimal Floating FromDigitsException NumberTooLarge NumberTooSmall MalformedNumber BigIntFromDigits BigDecimalFromDigits Left LowPriorityNotGiven NotGiven NotGiven Properties Random Random Right Sorting Success Try WithFilter Try Using Manager Manager Releasable Releasable AutoCloseableIsReleasable chaining scala.util.control Breaks TryBlock Breaks ControlThrowable Exception Described Finally Catch By NoStackTrace NoStackTrace NonFatal NonLocalReturns ReturnThrowable TailCalls TailRec scala.util.hashing ByteswapHashing ByteswapHashing Hashing Hashing Default MurmurHash3 ArrayHashing scala.util.matching Regex Regex MatchData Match Match Groups MatchIterator UnanchoredRegex Scala 3/Blog/Scala 3.0.0-RC1 - first release candidate is here Scala 3.0.0-RC1 - first release candidate is here 2021-02-17 Anatolii Kmetiuk Greetings from the Scala 3 team! We are delighted to announce the first release candidate of the stable version of Scala 3 - Scala 3.0.0-RC1. This release brings some last-minute polishings, clean-ups and changes before the big release. There were a few language changes to improve the user experience, as well as the polishings of the metaprogramming framework. We have also worked on the issues that had to be fixed before the stable release. Overall, more than 400 PRs were merged after the M3 release and until today! Read more below! Allow secondary type parameter list in extension methods Type parameters on extensions can now be combined with type parameters on the methods themselves. E.g.: List(1, 2, 3).second[Int] extension [A](xs: List[A]) def sumBy[B](f: A => B)(using Numeric[B]): B = ... Type arguments matching method type parameters are passed as usual: List("a", "bb", "ccc").sumBy[Int](_.length) By contrast, type arguments matching type parameters following extension can be passed only if the method is referenced as a non-extension method: sumBy[String](List("a", "bb", "ccc"))(_.length) Or, when passing both type arguments: sumBy[String](List("a", "bb", "ccc"))[Int](_.length) For discussion, see PR #10940. For more information about the extension methods, see documentation. New import syntax The following are the changes to the import syntax made in this release. Wildcard import _ is replaced by *. The motivation is that the majority of other languages use *. For example: import scala.annotation.* // imports everything in the annotation package Renaming operator => is replaced by a soft keyword as. as is also allowed outside braces. For example: import scala.collection.mutable as mut import NumPy as np For the details and discussion, see PR #11244. Read more about this change in the documentation. Use * for vararg splices. PR #11240 changed the syntax of vararg splices in patterns and function arguments. The new syntax uses a postfix *, instead of : _*, analogously to how a vararg parameter is declared. Use uninitialized for wildcard initializers An obscure use of _ occurs in var definitions: var x: T = _ It defines a concrete variable x without an initial value, or rather the default initial value that the JVM assigns to object fields. It can only be used in a class or object, not to initialize a local variable. We came up with an arguably better way to express this idiom: the special uninitialized value in the scala.compiletime object. To get an uninitialized field, you now write: import scala.compiletime.uninitialized var x: A = uninitialized This way expresses the intent of the idiom in a more verbose and easy to read way than simply writing an underscore. For discussion, see PR #11231, and the documentation is available on our website. Eta-expand companion object if functions are expected Starting from RC1, we no longer generate a function parent for companions of case classes. Which means, for example, that given case class Foo(x: Int), you won't be able to use Foo in a position where a function is expected: case class Foo(x: Int) def f(g: Int => Foo) = g(10) f(Foo) Results in: 1 |f(Foo) | ^^^ |The method `apply` is inserted. The auto insertion will be deprecated, please write `Foo.apply` explicitly. As the warning suggests, now you should write Foo.apply instead of Foo. See Issue #6190 and PR #7207 for discussion. Settling on scaladoc as the documentation tool We have settled on using the well-known scaladoc as a name for the documentation tool for Scala 3 (known previously as scala3doc).. The obsolete dotty-doc (or scala3-doc) is removed in RC1. We have also removed all the Kotlin dependencies (Dokka, etc.) from scaladoc. For details, see PR #11349. To read more about scaladoc, see documentation Use future and future-migration to specify language versions after 3.0 in -source PR #11355 changes the -source specifier for the Scala version(s) after 3.0 from 3.1 to future. I.e. it is now -source future and -source future-migration instead of -source 3.1 and -source 3.1-migration. Language imports are changed analogously. The reason for the change is that we want to keep the possibility open to ship a 3.1 version that does not yet contain all the changes enabled under -source future. Other language changes * Warn when matching against an opaque type #10664 * Fix #8634: Support -release option #10746 - the same way Scala 2 does. This setting allows you to specify a version of the Java platform (8, 9 etc) and compile the code with classes specific to the that Java platform, and emit the bytecode for that version. Metaprogramming changes A lot of work has been done on the metaprogramming side of things. Mostly we are cleaning up and polishing the API to prepare it for the stable release. The following are the important metaprogramming changes that took place: * Add scala.quoted.Expr.unapply as dual of Expr.apply #10580 * Remove Expr.StringContext.unapply #10675 * Add reflect MatchCase TypeRepr #10735 * Rename scala.quoted.staging.{Toolbox => Compiler} #11129 * Fix #10863: Make show AnyKinded #10988 * Add ParamClause to allow multiple type param clauses #11074 * Rework reflect Symbol fields API #10705 * Rename Liftable to ToExpr and Unliftable to FromExpr #10618 * Expand non-transparent macros after Typer #9984 * Rework TastyInspector API to allow inspection of all files #10792 * Allow leading context parameters in extension methods #10940 * Rename Not to NotGiven to make its purpose clearer #10720 * Fix #10709: Add missing level check before inlining #10781 Let us know what you think! If you have questions or any sort of feedback, feel free to send us a message on our Gitter channel. If you encounter a bug, please open an issue on GitHub. Contributors Thank you to all the contributors who made this release possible According to git shortlog -sn --no-merges 3.0.0-M3..3.0.0-RC1 these are: 183 Martin Odersky 138 Nicolas Stucki 36 Krzysztof Romanowski 25 Filip Zybala 25 Liu Fengyun 24 Lan, Jian 22 Jamie Thompson 19 Tom Grigg 17 Andrzej Ratajczak 16 Stephane Micheloud 15 Guillaume Martres 11 Pawel Marks 9 Phil 6 Aleksander Boruch-Gruszecki 6 Jonathan Brachthauser 6 Natsu Kagami 6 odersky 4 Jasper Moeys 4 Adrien Piquerez 3 Sebastien Doeraene 3 Michal Palka 3 Albert Chen 2 Alexandre Archambault 2 Som Snytt 2 kenji yoshida 2 Luc Henninger 2 Ayush 2 Raphael Jolly 2 Anatolii Kmetiuk 2 Olivier Blanvillain 2 changvvb 1 ysthakur 1 Ang Hao Yang 1 Ang9876 1 AngAng 1 August Nagro 1 Ciara O'Brien 1 Dale Wijnand 1 Florian Cassayre 1 Florian Schmaus 1 Iltotore 1 Jason Zaugg 1 Julien Richard-Foy 1 Katrix 1 Master-Killer 1 Michael Pilquist 1 Mikael Blomstrand 1 Mike Samuel 1 Philippus 1 Philippus Baalman 1 Rick M 1 Stephane MICHELOUD 1 Timur Abishev 1 Tomas 1 ansvonwa 1 ayush 1 costa100 1 iroha168 1 noti0na1 1 riiswa 1 tanishiking If you want to get your hands dirty and contribute to Scala 3, now is a good time to get involved! Head to our Getting Started page for new contributors, and have a look at some of the good first issues. They make perfect entry points into hacking on the compiler. We are looking forward to having you join the team of contributors. --------------------------------------------------------------------- [anatolii] Anatolii Kmetiuk Back to top Social links Generated by scaladoc