|
| 1 | +# Highlights of the release |
| 2 | + |
| 3 | +- Require JDK 17+ [#24146](https://github.com/scala/scala3/pull/24146) |
| 4 | +- Add explicit null checks to Scala 3 Standard Library [#23566](https://github.com/scala/scala3/pull/23566) |
| 5 | +- Add capture-checking to Scala 3 Standard Library [#23688](https://github.com/scala/scala3/pull/23688) |
| 6 | +- Add capture-checking to Scala 2 collections [#23769](https://github.com/scala/scala3/pull/23769) |
| 7 | +- Extract REPL to be its own artifact [#24243](https://github.com/scala/scala3/pull/24243) |
| 8 | +- SIP-57: Make `runtimeChecked` a standard feature [#23262](https://github.com/scala/scala3/pull/23262) |
| 9 | +- SIP-62: Make `better-fors` a stable feature [#23630](https://github.com/scala/scala3/pull/23630) |
| 10 | +- Preview SIP-71: Make `into` preview feature [#24090](https://github.com/scala/scala3/pull/24090) |
| 11 | +- Experimental SIP-67: Strict equality pattern matching [#23803](https://github.com/scala/scala3/pull/23803) |
| 12 | +- Experimental SIP-70: Allow multiple spreads in function arguments [#23855](https://github.com/scala/scala3/pull/23855) |
| 13 | +- Experimental SIP-75: Allow single-line lambdas after `:` [#23821](https://github.com/scala/scala3/pull/23821) |
| 14 | +- Experimental: Match if sub cases [#23786](https://github.com/scala/scala3/pull/23786) |
| 15 | + |
| 16 | +# Other changes and fixes |
| 17 | + |
| 18 | +## Annotations |
| 19 | + |
| 20 | +- Emit deprecation warnings when a symbol is annotated by a deprecated annotation [#23906](https://github.com/scala/scala3/pull/23906) |
| 21 | +- Deprecate `scala.annotation.elidable` [#23913](https://github.com/scala/scala3/pull/23913) |
| 22 | +- Deprecate `scala.annotation.transparentTrait` [#23116](https://github.com/scala/scala3/pull/23116) |
| 23 | + |
| 24 | +## Experimental: Capture Checking |
| 25 | + |
| 26 | +- Move `scala.caps.Pure` to caps and make it non-experimental [#23745](https://github.com/scala/scala3/pull/23745) |
| 27 | +- Make `scala.caps.Pure` transparent [#23914](https://github.com/scala/scala3/pull/23914) |
| 28 | +- Make `scala.caps.Capability` non-experimental [#23507](https://github.com/scala/scala3/pull/23507) |
| 29 | +- Check conformance to `scala.caps.Pure` upper bound only under cc [#23784](https://github.com/scala/scala3/pull/23784) |
| 30 | +- Widen type parameters before box adaptation [#23809](https://github.com/scala/scala3/pull/23809) |
| 31 | +- Level checking: distinguish between certain capset vars with same owner [#24077](https://github.com/scala/scala3/pull/24077) |
| 32 | +- Implement FreshCap Handling for Classes and Objects [#24136](https://github.com/scala/scala3/pull/24136) |
| 33 | +- Skip capture sets in checkNoPrivateLeaks and drop them in posttyper when cc is not enabled [#23886](https://github.com/scala/scala3/pull/23886) |
| 34 | +- Changes around reaches and uses [#23584](https://github.com/scala/scala3/pull/23584) |
| 35 | +- Revise capability hierarchy and fix classifiers [#23656](https://github.com/scala/scala3/pull/23656) |
| 36 | +- Improve closure typing [#23700](https://github.com/scala/scala3/pull/23700) |
| 37 | +- Better printing of capabilities in error messages [#23701](https://github.com/scala/scala3/pull/23701) |
| 38 | +- More improvements to error messages [#23721](https://github.com/scala/scala3/pull/23721) |
| 39 | +- CC Language Ref Polishings [#23762](https://github.com/scala/scala3/pull/23762) |
| 40 | +- CC Language Reference Improvements v2 [#23818](https://github.com/scala/scala3/pull/23818) |
| 41 | +- Changes in CC around classes, constructors, this [#23874](https://github.com/scala/scala3/pull/23874) |
| 42 | +- Various fixes and simplifications [#23881](https://github.com/scala/scala3/pull/23881) |
| 43 | +- Simplify Level Checking and Fix Errors [#23934](https://github.com/scala/scala3/pull/23934) |
| 44 | +- Introduce precise refined types [#24154](https://github.com/scala/scala3/pull/24154) |
| 45 | +- Fix unsoundness in APPLY and SELECT rules [#24159](https://github.com/scala/scala3/pull/24159) |
| 46 | +- Fixes for mutability [#24205](https://github.com/scala/scala3/pull/24205) |
| 47 | +- Implement inheritance condition for Mutable types [#24253](https://github.com/scala/scala3/pull/24253) |
| 48 | +- Don't add cap when creating instances of capability classes. [#24256](https://github.com/scala/scala3/pull/24256) |
| 49 | +- Changes to Fresh and Separation Checking [#24112](https://github.com/scala/scala3/pull/24112) |
| 50 | + |
| 51 | +## Experimental: Explicit Nulls |
| 52 | + |
| 53 | +- Only nullify tasty if `Yflexify-tasty` is set; Refine FlexibleType nullification rules [#23938](https://github.com/scala/scala3/pull/23938) |
| 54 | +- Apply flexible types to files compiled without explicit nulls [#23386](https://github.com/scala/scala3/pull/23386) |
| 55 | +- Fix NotNullInfo in multi-case match [#23864](https://github.com/scala/scala3/pull/23864) |
| 56 | +- Fix captureWildcards with FlexibleType [#24070](https://github.com/scala/scala3/pull/24070) |
| 57 | +- Do not assume left is non-null if another branch is null in splitLast [#24325](https://github.com/scala/scala3/pull/24325) |
| 58 | + |
| 59 | +## Experimental: Global Initalization |
| 60 | + |
| 61 | +- Modelling assigning to null in the global object initialization checker [#23858](https://github.com/scala/scala3/pull/23858) |
| 62 | +- Fix global init checker unexpected by name [#23859](https://github.com/scala/scala3/pull/23859) |
| 63 | +- Fix selection on safe value in the global object initialization checker [#23860](https://github.com/scala/scala3/pull/23860) |
| 64 | +- Re-design Env of the global object init checker [#24107](https://github.com/scala/scala3/pull/24107) |
| 65 | + |
| 66 | +## Experimental: Into |
| 67 | + |
| 68 | +- Allow into on enums [#23795](https://github.com/scala/scala3/pull/23795) |
| 69 | + |
| 70 | +## Experimental: Modularity |
| 71 | + |
| 72 | +- Simpler inference for tracked [#22972](https://github.com/scala/scala3/pull/22972) |
| 73 | + |
| 74 | +## Implicits |
| 75 | + |
| 76 | +- Only check seen for LazyRef for TypeSizeAccumulator [#20459](https://github.com/scala/scala3/pull/20459) |
| 77 | +- Derived members succeed other givens in cycle test [#23898](https://github.com/scala/scala3/pull/23898) |
| 78 | + |
| 79 | +## Linting |
| 80 | + |
| 81 | +- Drill through type lambda for tree symbol [#23699](https://github.com/scala/scala3/pull/23699) |
| 82 | +- Warn unused masking imports, remove obsolete unused options [#23757](https://github.com/scala/scala3/pull/23757) |
| 83 | +- Unused lint does not rewrite suppressed warnings [#24055](https://github.com/scala/scala3/pull/24055) |
| 84 | +- Check for synthetic case methods in unused lint [#24239](https://github.com/scala/scala3/pull/24239) |
| 85 | + |
| 86 | +## Match Types |
| 87 | + |
| 88 | +- Prioritize tree type over proto type when typing Binds [#24175](https://github.com/scala/scala3/pull/24175) |
| 89 | + |
| 90 | +## Metaprogramming |
| 91 | + |
| 92 | +- Warn about encoded pkg obj names [#22707](https://github.com/scala/scala3/pull/22707) |
| 93 | + |
| 94 | +# Named Tuples |
| 95 | + |
| 96 | +- Prohibit selection of tuples with members named `apply`. [#24191](https://github.com/scala/scala3/pull/24191) |
| 97 | +- Add an Ordering given instance for named tuples [#23379](https://github.com/scala/scala3/pull/23379) |
| 98 | +- Named tuple toMap extension method [#23827](https://github.com/scala/scala3/pull/23827) |
| 99 | + |
| 100 | +# Opaque Types |
| 101 | + |
| 102 | +- Prevent opaque types leaking from transparent inline methods [#23792](https://github.com/scala/scala3/pull/23792) |
| 103 | +- Make opaque types decomposable [#24068](https://github.com/scala/scala3/pull/24068) |
| 104 | + |
| 105 | +## Parser |
| 106 | + |
| 107 | +- Make consume a soft modifier [#23755](https://github.com/scala/scala3/pull/23755) |
| 108 | + |
| 109 | +## Pattern Matching |
| 110 | + |
| 111 | +- Fix false exhaustivity warning for seq match [#23968](https://github.com/scala/scala3/pull/23968) |
| 112 | +- Use upper bound of abstract types in exhaustivity checking [#23909](https://github.com/scala/scala3/pull/23909) |
| 113 | + |
| 114 | +## Pickling |
| 115 | + |
| 116 | +- Cleanup the type of `UnApply` trees in posttyper [#24259](https://github.com/scala/scala3/pull/24259) |
| 117 | + |
| 118 | +## Presentation Compiler |
| 119 | + |
| 120 | +- Make sure that we can query tree.source [#24123](https://github.com/scala/scala3/pull/24123) |
| 121 | +- Add unsafe RawPresentationCompiler implementation [#24133](https://github.com/scala/scala3/pull/24133) |
| 122 | + |
| 123 | +## Reporting |
| 124 | + |
| 125 | +- Fix span of private this warning [#23947](https://github.com/scala/scala3/pull/23947) |
| 126 | +- Improve printing of strings [#22945](https://github.com/scala/scala3/pull/22945) |
| 127 | +- Better grouping of explanations in error messages [#24155](https://github.com/scala/scala3/pull/24155) |
| 128 | +- Better error message: reassignment to val [#24184](https://github.com/scala/scala3/pull/24184) |
| 129 | + |
| 130 | +## Reflection |
| 131 | + |
| 132 | +- Add missing apply constructors for `Refined` and `TypeProjection` TypeTrees [#23837](https://github.com/scala/scala3/pull/23837) |
| 133 | + |
| 134 | +## REPL |
| 135 | + |
| 136 | +- Use PPrint to handle printing of REPL output values [#23849](https://github.com/scala/scala3/pull/23849) |
| 137 | +- Invoke pprint reflectively [#24119](https://github.com/scala/scala3/pull/24119) |
| 138 | +- Consider rendering prefix when pretty printing values in the REPL [#24118](https://github.com/scala/scala3/pull/24118) |
| 139 | +- Trap Ctrl-C in the REPL: if no command is running clear the prompt, if some command is running ask for confirmation before exiting [#24127](https://github.com/scala/scala3/pull/24127) |
| 140 | +- Re-implement Ammonite's Ctrl-C interruption for Scala REPL via bytecode instrumentation [#24194](https://github.com/scala/scala3/pull/24194) |
| 141 | +- Remove pipes from multi-line REPL prompts [#24307](https://github.com/scala/scala3/pull/24307) |
| 142 | +- Reintroduce reflective REPL pprint call. [#24353](https://github.com/scala/scala3/pull/24353) |
| 143 | + |
| 144 | +## Scala Runner |
| 145 | + |
| 146 | +- Drop `scala_legacy` and `MainGenericRunner` [#24244](https://github.com/scala/scala3/pull/24244) |
| 147 | +- Drop `-run` and `-repl` in `MainGenericCompiler` [#24289](https://github.com/scala/scala3/pull/24289) |
| 148 | +- Bump Scala CLI to v1.10.0 (was v1.9.1) and Coursier to v2.1.25-M19 (was 2.1.24) [#24362](https://github.com/scala/scala3/pull/24362) |
| 149 | + |
| 150 | +## Scaladoc |
| 151 | + |
| 152 | +- Add FlexibleType support for scaladoc [#23320](https://github.com/scala/scala3/pull/23320) |
| 153 | +- Render `@consume` as the `consume` modifier [#23754](https://github.com/scala/scala3/pull/23754) |
| 154 | +- Do not render `consume update` in `scaladoc` [#23760](https://github.com/scala/scala3/pull/23760) |
| 155 | + |
| 156 | +## Scala.js |
| 157 | + |
| 158 | +- Upgrade to Scala.js 1.20.1. [#23884](https://github.com/scala/scala3/pull/23884) |
| 159 | +- Support js.async and js.await, including JSPI on Wasm. [#23846](https://github.com/scala/scala3/pull/23846) |
| 160 | +- Add JS-specific version of `VarArgsBuilder`. [#24144](https://github.com/scala/scala3/pull/24144) |
| 161 | +- Port scala-stdlib for Scala.js [#24115](https://github.com/scala/scala3/pull/24115) |
| 162 | +- Do not patch the implicit scope of `scala.Unit` in Scala.js [#24405](https://github.com/scala/scala3/pull/24405) |
| 163 | + |
| 164 | +## Settings |
| 165 | + |
| 166 | +- Option warnings are conditional [#13915](https://github.com/scala/scala3/pull/13915) |
| 167 | +- Make `-usejavacp` a private setting as `-Yusejavacp` [#24304](https://github.com/scala/scala3/pull/24304) |
| 168 | + |
| 169 | +## Specification |
| 170 | + |
| 171 | +- Update reference syntax documentation with named tuples [#23493](https://github.com/scala/scala3/pull/23493) |
| 172 | + |
| 173 | +## Standard Library |
| 174 | + |
| 175 | +- Embed the history of the scala 2 stdlib [#23099](https://github.com/scala/scala3/pull/23099) |
| 176 | +- Add language import in stdlib [#23102](https://github.com/scala/scala3/pull/23102) |
| 177 | +- Add `transparent` modifier to already assumed transparent types [#23104](https://github.com/scala/scala3/pull/23104) |
| 178 | +- Do not patch stdlib symbols anymore [#23193](https://github.com/scala/scala3/pull/23193) |
| 179 | +- Stabilise `Predef.runtimeChecked` too [#23917](https://github.com/scala/scala3/pull/23917) |
| 180 | +- Simplify `scala.runtime.Statics.releaseFence` [#23953](https://github.com/scala/scala3/pull/23953) |
| 181 | +- Deprecate `scala.runtime.SymbolLiteral` [#23970](https://github.com/scala/scala3/pull/23970) |
| 182 | +- Standard Library Sync: September 24th, 2025 [#24063](https://github.com/scala/scala3/pull/24063) |
| 183 | +- Update method signatures in RedBlackTree to accept correct Iterators [#24085](https://github.com/scala/scala3/pull/24085) |
| 184 | +- Module classes can sometimes extend `scala.runtime.AbstractFuntionN` in Scala 2 [#24147](https://github.com/scala/scala3/pull/24147) |
| 185 | +- Drop redundant `scala.caps.Pure` parent traits in stdlib [#24149](https://github.com/scala/scala3/pull/24149) |
| 186 | +- Better support for nullability in `Option.apply` and drop `Option.fromNullable` [#24238](https://github.com/scala/scala3/pull/24238) |
| 187 | +- Officially deprecate `scala.App` in Scala 3 [#24242](https://github.com/scala/scala3/pull/24242) |
| 188 | +- Be more conservative in what we copy from Scala 2 [#24339](https://github.com/scala/scala3/pull/24339) |
| 189 | +- Fix the dependencies of the bootstrapped stdlib [#24379](https://github.com/scala/scala3/pull/24379) |
| 190 | +- Fix bytecode attributes for patched files [#24180](https://github.com/scala/scala3/pull/24180) |
| 191 | +- Add `library.properties` to resources of scala-library jars [#24332](https://github.com/scala/scala3/pull/24332) |
| 192 | + |
| 193 | +## Quotes |
| 194 | + |
| 195 | +- Make typeArgs in QuotesImpl work for AnnotatedTypes [#24018](https://github.com/scala/scala3/pull/24018) |
| 196 | +- Quotes reflect: Allow to return DefDef from a val symbol tree [#22603](https://github.com/scala/scala3/pull/22603) |
| 197 | +- Add ensureApplied to the quotes reflect API [#24160](https://github.com/scala/scala3/pull/24160) |
| 198 | +- Chore: do not assume scala types as transparent, source should enforce it [#23105](https://github.com/scala/scala3/pull/23105) |
| 199 | +- Add missing version of `ValDef.let` which also accepts flags [#23388](https://github.com/scala/scala3/pull/23388) |
| 200 | +- Stabilise Quotes reflect methods used for creating new classes/objects [#23826](https://github.com/scala/scala3/pull/23826) |
| 201 | + |
| 202 | +## TASTy Format |
| 203 | + |
| 204 | +- Update the TastyFormat for matches with sub-cases [#23851](https://github.com/scala/scala3/pull/23851) |
| 205 | + |
| 206 | +## Testing |
| 207 | + |
| 208 | +- Fix line and path separators in test [#23534](https://github.com/scala/scala3/pull/23534) |
| 209 | + |
| 210 | +## Transform |
| 211 | + |
| 212 | +- Check extension method at typer [#24199](https://github.com/scala/scala3/pull/24199) |
| 213 | +- Elide conversion of receiver, extension or inline map, trailing implicit args, in DropForMap [#23416](https://github.com/scala/scala3/pull/23416) |
| 214 | +- Replace sun.misc.Unsafe used in LazyVals with VarHandles [#24109](https://github.com/scala/scala3/pull/24109) |
| 215 | +- Handle FlexibleTypes in asContextFunctionType [#23865](https://github.com/scala/scala3/pull/23865) |
| 216 | +- No mixin forwarder when ancestor is sealed [#23482](https://github.com/scala/scala3/pull/23482) |
| 217 | +- Emit mixin forwarders as ordinary, non-bridge methods again [#23942](https://github.com/scala/scala3/pull/23942) |
| 218 | +- Improve the generic signatures for singleton types [#24288](https://github.com/scala/scala3/pull/24288) |
| 219 | + |
| 220 | +## Typeclass Derivation |
| 221 | + |
| 222 | +- Support Mirror for generic tuples arity > 22 [#23363](https://github.com/scala/scala3/pull/23363) |
| 223 | + |
| 224 | +## Typer |
| 225 | + |
| 226 | +- Disable distribution of intersection types over applied types [#23441](https://github.com/scala/scala3/pull/23441) |
| 227 | +- Push distributivity rule to source future [#24376](https://github.com/scala/scala3/pull/24376) |
| 228 | +- Fix crash in Selectable unapply with custom applyDynamic [#24343](https://github.com/scala/scala3/pull/24343) |
| 229 | +- Tweak tryParameterless to use readapt [#24078](https://github.com/scala/scala3/pull/24078) |
| 230 | +- Mark the type of lifted definitions as inferred [#24104](https://github.com/scala/scala3/pull/24104) |
| 231 | +- Fix "Regression in zio/zio-schema for typer/implicit resolution" [#24156](https://github.com/scala/scala3/pull/24156) |
| 232 | + |
| 233 | +## Union types |
| 234 | + |
| 235 | +- Discard `scala.caps.Pure` in the erasure of union and intersection types [#24151](https://github.com/scala/scala3/pull/24151) |
| 236 | +- Modify rule for nullable union types in generic signatures [#24129](https://github.com/scala/scala3/pull/24129) |
| 237 | +- Modify type erasure logic of nullable unions for Scala 2 pseudo-unions [#24130](https://github.com/scala/scala3/pull/24130) |
| 238 | + |
| 239 | + |
| 240 | + |
| 241 | +# Contributors |
| 242 | + |
| 243 | +Thank you to all the contributors who made this release possible 🎉 |
| 244 | + |
| 245 | +According to `git shortlog -sn --no-merges 3.7.4..3.8.0-RC1` these are: |
| 246 | + |
| 247 | +``` |
| 248 | + 163 Martin Odersky |
| 249 | + 144 Hamza Remmal |
| 250 | + 84 noti0na1 |
| 251 | + 73 Som Snytt |
| 252 | + 39 Eugene Flesselle |
| 253 | + 21 Wojciech Mazur |
| 254 | + 19 Jan Chyb |
| 255 | + 17 Oliver Bračevac |
| 256 | + 17 Sébastien Doeraene |
| 257 | + 13 Li Haoyi |
| 258 | + 12 Yichen Xu |
| 259 | + 11 HarrisL2 |
| 260 | + 11 Natsu Kagami |
| 261 | + 10 Matthias Berndt |
| 262 | + 8 Kacper Korban |
| 263 | + 8 aherlihy |
| 264 | + 7 EnzeXing |
| 265 | + 7 dependabot[bot] |
| 266 | + 5 Emil Ejbyfeldt |
| 267 | + 5 Matt Bovel |
| 268 | + 5 Seyon Sivatharan |
| 269 | + 5 Tomasz Godzik |
| 270 | + 4 Piotr Chabelski |
| 271 | + 4 Zieliński Patryk |
| 272 | + 3 Jeon Yoonjae |
| 273 | + 3 Kenji Yoshida |
| 274 | + 3 Yoonjae Jeon |
| 275 | + 3 rjolly |
| 276 | + 2 Jamie Thompson |
| 277 | + 2 Katarzyna Marek |
| 278 | + 2 Raphael Jolly |
| 279 | + 2 katrinafyi |
| 280 | + 1 Aleksey Troitskiy |
| 281 | + 1 Alex1005a |
| 282 | + 1 Florian3k |
| 283 | + 1 Guillaume Martres |
| 284 | + 1 Jędrzej Rochala |
| 285 | + 1 Kalin-Rudnicki |
| 286 | + 1 Lukas Rytz |
| 287 | + 1 Martin Duhem |
| 288 | + 1 Martynas Mickevičius |
| 289 | + 1 Max Smirnov |
| 290 | + 1 Mirco Dotta |
| 291 | + 1 Patryk Zieliński |
| 292 | + 1 Paweł Perłakowski |
| 293 | + 1 Vadim Chelyshov |
| 294 | + 1 vder |
| 295 | + 1 zielinsky |
| 296 | + 1 虎鸣 |
| 297 | +``` |
0 commit comments