diff --git a/_config.yml b/_config.yml index 4739a1d24..b6319f112 100644 --- a/_config.yml +++ b/_config.yml @@ -17,7 +17,7 @@ keywords: scala-version: 2.13.17 scala-212-version: 2.12.20 -scala-3-version: 3.7.3 +scala-3-version: 3.7.4 collections: style: diff --git a/_ja/getting-started/install-scala.md b/_ja/getting-started/install-scala.md index a85f87263..76695cf17 100644 --- a/_ja/getting-started/install-scala.md +++ b/_ja/getting-started/install-scala.md @@ -178,4 +178,4 @@ IDE の使用に慣れている場合は、IDE から _Main.scala_ のコード 他の Scala ユーザーとすぐに連絡を取りたい場合は、多くのメーリングリストやリアルタイムのチャットルームがあります。これらのリソースのリストや、どこに問い合わせればよいかについては、[コミュニティページ](https://scala-lang.org/community/)をご覧ください。 ### (日本語のみ追記) -Scala について日本語で質問したい場合、Twitterでつぶやくと気づいた人が教えてくれます。 +Scala について日本語で質問したい場合、X(旧Twitter)でつぶやくと気づいた人が教えてくれます。 diff --git a/_overviews/core/futures.md b/_overviews/core/futures.md index 9f01a4371..b092d2117 100644 --- a/_overviews/core/futures.md +++ b/_overviews/core/futures.md @@ -1181,7 +1181,7 @@ object Test extends App { completion match { case Failure(exception) if exception.getCause != null => println(s" caused by ${exception.getCause}") - _ => () + case _ => () } } } catch { diff --git a/_overviews/jdk-compatibility/overview.md b/_overviews/jdk-compatibility/overview.md index 2ffebe457..77a17691d 100644 --- a/_overviews/jdk-compatibility/overview.md +++ b/_overviews/jdk-compatibility/overview.md @@ -4,21 +4,46 @@ title: JDK Compatibility permalink: /overviews/jdk-compatibility/overview.html --- -Scala's primary platform is the Java Virtual Machine (JVM). (Other supported platforms: [Scala.js](https://www.scala-js.org/), [Scala Native](https://scala-native.org/).) +Scala's primary platform is the Java Virtual Machine (JVM). Other supported platforms are [Scala.js](https://www.scala-js.org/) and [Scala Native](https://scala-native.org/). Sometimes new JVM and JDK (Java Development Kit) versions require us to update Scala to remain compatible. -## Scala compatibility table +## Scala 3 compatibility -Minimum Scala versions: +Scala 3 versions from 3.3 LTS through Scala 3.7 support JDK 8 and above. -| JDK | 3 | 3 LTS | 2.13 | 2.12 | 2.11 | -|:-----------:|:--------:|:--------:|:---------:|:---------:|:----------:| -| 25 (LTS) | 3.7.1 | 3.3.6 | 2.13.17 | 2.12.21* | | -| 21 (LTS) | 3.4.0 | 3.3.1 | 2.13.11 | 2.12.18 | | -| 17 (LTS) | 3.0.0 | 3.3.0 | 2.13.6 | 2.12.15 | | -| 11 (LTS) | 3.0.0 | 3.3.0 | 2.13.0 | 2.12.4 | 2.11.12 | -| 8 (LTS) | 3.0.0 | 3.3.0 | 2.13.0 | 2.12.0 | 2.11.0 | +As per [this blog post](https://www.scala-lang.org/news/next-scala-lts-jdk.html), +Scala 3.8 will have a new minimum JDK version of 17. + +The next Scala 3 LTS release will be Scala 3.9. + +Minimum Scala 3 versions for each JDK: + +| JDK | 3.8* | 3.4+ | 3.3 LTS | +|:-----------:|:------:|:--------:|:--------:| +| 25 (LTS) | 3.8.0* | 3.7.1 | 3.3.6 | +| 21 (LTS) | 3.8.0* | 3.4.0 | 3.3.1 | +| 17 (LTS) | 3.8.0* | 3.4.0 | 3.3.0 | +| 11 (LTS) | | 3.4.0 | 3.3.0 | +| 8 (LTS) | | 3.4.0 | 3.3.0 | + +\* = forthcoming; support available in [nightly builds](https://docs.scala-lang.org/overviews/core/nightlies.html) + +Even when a version combination isn't listed as supported, most features might still work. + +Using the latest patch version of your chosen Scala version line is always recommended. + +## Scala 2 compatibility + +Minimum Scala 2 versions for each JDK: + +| JDK | 2.13 | 2.12 | +|:-----------:|:---------:|:---------:| +| 25 (LTS) | 2.13.17 | 2.12.21* | +| 21 (LTS) | 2.13.11 | 2.12.18 | +| 17 (LTS) | 2.13.6 | 2.12.15 | +| 11 (LTS) | 2.13.0 | 2.12.4 | +| 8 (LTS) | 2.13.0 | 2.12.0 | \* = forthcoming; support available in [nightly builds](https://docs.scala-lang.org/overviews/core/nightlies.html) @@ -34,7 +59,7 @@ Minimum working versions: | JDK | scala-cli | sbt | mill | |:-----------:|:-----------:|:---------:|:-----------| -| 25 (LTS) | forthcoming | 1.9.0 | 1.0.0 | +| 25 (LTS) | 1.10.0 | 1.9.0 | 1.0.0 | | 21 (LTS) | 1.0.0 | 1.9.0 | 0.11.5 | | 17 (LTS) | 1.0.0 | 1.6.0 | 0.7.0 | | 11 (LTS) | 1.0.0 | 1.1.0 | 0.1.5 | @@ -50,11 +75,11 @@ Using a different build tool, such as Gradle or Maven? We invite pull requests a ## Running versus compiling -JDK 8, 11, 17, 21, and 25 are all reasonable choices both for *compiling* and *running* Scala code. +JDK 17, 21, and 25 are all good choices both for *compiling* and *running* Scala code. -Since the JVM is normally backwards compatible, it is usually safe to use a newer JVM for *running* your code than the one it was compiled on, especially if you are not using JVM features designated "experimental" or "unsafe". +JDK 8 and 11 are also possible choices. As of 2025, these versions remain in use at some shops, but usage has declined greatly and many projects are dropping support. If you compile on JDK 17+ but want to allow your users to stay on 8, use `--release 8` to avoid using APIs and features that don't exist in 8. Another option is to use a newer JDK for your daily work but do release builds on JDK 8. -JDK 8 remains in use at some shops (as of 2023), but usage is declining and some projects are dropping support. If you compile on JDK 11+ but want to allow your users to stay on 8, additional care is needed to avoid using APIs and features that don't exist in 8. (For this reason, some Scala developers use a newer JDK for their daily work but do release builds on JDK 8.) +Since the JVM is normally backwards compatible, it is usually safe to use a newer JVM for *running* your code than the one it was compiled on, especially if you are not using JVM features designated "experimental" or "unsafe". As per [this blog post](https://www.scala-lang.org/news/next-scala-lts-jdk.html), Scala 3.8 will have a new minimum JDK version of 17. @@ -74,15 +99,13 @@ In almost every case, you're free to use the JDK and JVM of your choice. JDK 8 users typically use the Oracle JDK or some flavor of OpenJDK. -Most JDK 11+ users are using OpenJDK, or GraalVM which runs in the context of OpenJDK. GraalVM performs well on the Scala benchmarks, and it benefits from GraalVM runtime and runs faster too. - OpenJDK comes in various flavors, offered by different providers. We typically build and test Scala using [Temurin](https://adoptium.net) or [Zulu](https://www.azul.com/downloads/), but the differences are unlikely to matter to most users. ## JDK 11 compatibility notes The Scala test suite and Scala community build are green on JDK 11. -In general, Scala works on JDK 11+, including GraalVM, but may not take special advantage of features that were added after JDK 8. +In general, Scala works on JDK 11+, but may not take special advantage of features that were added after JDK 8. For example, the Scala compiler does not enforce the restrictions of the Java Platform Module System, which means that code that typechecks may incur linkage errors at runtime. Scala 2.13.x will eventually provide [rudimentary support](https://github.com/scala/scala/pull/7218) for this (perhaps only in nightlies built on JDK 11). @@ -132,8 +155,6 @@ For information on timing of the forthcoming release, see: * https://contributors.scala-lang.org/t/scala-2-12-21-release-planning/6753 - - For possible Scala 3 issues, see the [area:jdk](https://github.com/scala/scala3/labels/area%3Ajdk) and [compat:java](https://github.com/scala/scala3/labels/compat%3Ajava) labels in [the Scala 3 issue tracker](https://github.com/scala/scala3/issues). For possible Scala 2 issues, see the [jdk11](https://github.com/scala/bug/labels/jdk11), [jdk17](https://github.com/scala/bug/labels/jdk17), [jdk21](https://github.com/scala/bug/labels/jdk21), and [jdk25](https://github.com/scala/bug/labels/jdk25) labels in [the Scala 2 bug tracker](https://github.com/scala/bug/issues). @@ -147,10 +168,3 @@ A few sbt plugins are offering support for GraalVM Native Image compilation: - [sbt-native-packager](https://www.scala-sbt.org/sbt-native-packager/formats/graalvm-native-image.html) - [sbt-native-image](https://github.com/scalameta/sbt-native-image) - -## Scala 3 - -At present, both Scala 3.3 LTS and Scala Next support JDK 8, as well as 11 and beyond. - -As per [this blog post](https://www.scala-lang.org/news/next-scala-lts-jdk.html), -Scala 3.8 will have a new minimum JDK version of 17. This can already be tested in Scala 3.8 nightlies. diff --git a/_overviews/scala3-book/scala-for-python-devs.md b/_overviews/scala3-book/scala-for-python-devs.md index c62c7f486..ae4a18821 100644 --- a/_overviews/scala3-book/scala-for-python-devs.md +++ b/_overviews/scala3-book/scala-for-python-devs.md @@ -40,7 +40,7 @@ At a high level, Scala shares these *similarities* with Python: - Both have a relatively simple, concise syntax - Both support a [functional style of programming][fp-intro] - Both are object-oriented programming (OOP) languages -- Both have comprehensions: Python has list comprehensions and Scala has `for` comprehensions +- Both have comprehensions: Python has list comprehensions, dict comprehensions and generator expressions and Scala has `for` comprehensions - Both languages have support for lambdas and [higher-order functions][hofs] - Both can be used with [Apache Spark](https://spark.apache.org) for big data processing - Both have a wealth of terrific libraries @@ -693,6 +693,26 @@ Scala also has `match` expressions. +### Lazily evaluated comprehensions: + +
+ from itertools import count
+
+ |
+
+ val allSquares = for n <- LazyList.from(0) yield n * n
+
+ |
+