diff --git a/_overviews/FAQ/index.md b/_overviews/FAQ/index.md
index 1316dbdda5..fbb4fe4183 100644
--- a/_overviews/FAQ/index.md
+++ b/_overviews/FAQ/index.md
@@ -362,14 +362,14 @@ setting in a multi-project build.
For example, if you add this to your `build.sbt`:
- scalaVersion := "2.13.17"
+ scalaVersion := "2.13.18"
that's a "bare" setting, and you might expect it to apply build-wide.
But it doesn't. _It only applies to the root project._
In many cases one should instead write:
- ThisBuild / scalaVersion := "2.13.17"
+ ThisBuild / scalaVersion := "2.13.18"
Other possibilities include:
diff --git a/_overviews/contribute/bug-reporting-guide.md b/_overviews/contribute/bug-reporting-guide.md
index 485a2994e1..5ccecd2137 100644
--- a/_overviews/contribute/bug-reporting-guide.md
+++ b/_overviews/contribute/bug-reporting-guide.md
@@ -65,7 +65,7 @@ If you cannot find your issue in the issue tracker, create a new bug. The detail
Please make sure to fill in as many fields as possible. Make sure you've indicated the following:
- 1. **Exact Scala version** that you are using. For example, `2.13.17` or `3.3.4`. If the bug happens in multiple versions indicate all of them.
+ 1. **Exact Scala version** that you are using. For example, `2.13.18` or `3.3.4`. If the bug happens in multiple versions indicate all of them.
2. **The component** that is affected by the bug. For example, the Standard Library, Scaladoc, etc.
3. **Labels** related to your issue. For example, if you think your issue is related to the typechecker, and if you have successfully minimized your issue, label your bug as "typechecker" and "minimized". Issue tracker will suggest names for existing labels as you type them so try not to create duplicates.
4. **Running environment**. Are you running on Linux? Windows? What JVM version are you using?
diff --git a/_overviews/core/binary-compatibility-of-scala-releases.md b/_overviews/core/binary-compatibility-of-scala-releases.md
index ba58a3482a..fb4de2be19 100644
--- a/_overviews/core/binary-compatibility-of-scala-releases.md
+++ b/_overviews/core/binary-compatibility-of-scala-releases.md
@@ -20,10 +20,10 @@ We distinguish forward and backward compatibility (think of these as properties
Thus, backward compatibility precludes the removal of (non-private) methods, as older versions could call them, not knowing they would be removed, whereas forward compatibility disallows adding new (non-private) methods, because newer programs may come to depend on them, which would prevent them from running on older versions (private methods are exempted here as well, as their definition and call sites must be in the same source file).
#### Guarantees and Versioning
-For Scala 2, the *minor* version is the *third* number in a version, e.g., 17 in v2.13.17.
+For Scala 2, the *minor* version is the *third* number in a version, e.g., 18 in v2.13.18.
The major version is the second number, which is 13 in our example.
-Scala 2 up to 2.13.17 guarantees both backward and forward compatibility across *minor* releases within a single major release.
+Scala 2 up to 2.13.18 guarantees both backward and forward compatibility across *minor* releases within a single major release.
This is about to change now that [SIP-51 has been accepted](https://docs.scala-lang.org/sips/drop-stdlib-forwards-bin-compat.html), future Scala 2.13 releases may be backward compatible only.
For Scala 3, the minor version is the *second* number in a version, e.g., 2 in v3.2.1.
diff --git a/_overviews/core/futures.md b/_overviews/core/futures.md
index 9f01a43710..b092d21172 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 2ffebe457c..77a17691dc 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 c62c7f486c..ae4a18821c 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
+ all_squares = (n**2 for n in count()) # generator expression
+ # all_squares: <generator object <genexpr> at ...>
+ |
+
+
+
+ val allSquares = for n <- LazyList.from(0) yield n * n
+ // allSquares: LazyList(<not computed>)
+ |
+
+
+
+
### `match` expressions:
diff --git a/_overviews/scala3-book/string-interpolation.md b/_overviews/scala3-book/string-interpolation.md
index 1ba335e3b7..968d49ecef 100644
--- a/_overviews/scala3-book/string-interpolation.md
+++ b/_overviews/scala3-book/string-interpolation.md
@@ -367,4 +367,4 @@ expansion, executing SQL queries, magic `$"identifier"` representations, and man
[java-format-docs]: https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Formatter.html#detail
[value-class]: {% link _overviews/core/value-classes.md %}
-[sip-11]: {% link _sips/sips/string-interpolation.md %}
+[sip-11]: {% link _sips/sips/011-string-interpolation.md %}
diff --git a/_overviews/scala3-migration/tooling-scala2-xsource3.md b/_overviews/scala3-migration/tooling-scala2-xsource3.md
index ca23203026..e48b4c1205 100644
--- a/_overviews/scala3-migration/tooling-scala2-xsource3.md
+++ b/_overviews/scala3-migration/tooling-scala2-xsource3.md
@@ -125,7 +125,7 @@ class C(x: Int) {
### Changes affecting binary encoding
-As of Scala 2.13.17, there are 3 changes in `-Xsource-features` that affect binary encoding of classfiles:
+As of Scala 2.13.18, there are 3 changes in `-Xsource-features` that affect binary encoding of classfiles:
1. `case-apply-copy-access`: the constructor modifiers of case classes (`case class C private[p] (x: Int)`) are copied to the synthetic `apply` and `copy` methods.
1. `case-companion-function`: the synthetic companion objects of case classes no longer extend `FunctionN`.
diff --git a/_overviews/toolkit/http-client-request-body.md b/_overviews/toolkit/http-client-request-body.md
index b54357e1cb..2d39e08fc1 100644
--- a/_overviews/toolkit/http-client-request-body.md
+++ b/_overviews/toolkit/http-client-request-body.md
@@ -18,7 +18,7 @@ To send a POST request with a string body, you can chain `post` and `body` on a
import sttp.client4.quick._
val response = quickRequest
- .post(uri"https://example.com/")
+ .post(uri"https://httpbin.org/post")
.body("Lorem ipsum")
.send()
@@ -31,7 +31,7 @@ println(response.code)
import sttp.client4.quick.*
val response = quickRequest
- .post(uri"https://example.com/")
+ .post(uri"https://httpbin.org/post")
.body("Lorem ipsum")
.send()
@@ -51,7 +51,7 @@ The `body` method can also take a `Array[Byte]`, a `ByteBuffer` or an `InputStre
{% tab 'Scala 2 and 3' %}
```scala mdoc
val bytes: Array[Byte] = "john".getBytes
-val request = quickRequest.post(uri"https://example.com/").body(bytes)
+val request = quickRequest.post(uri"https://httpbin.org/post").body(bytes)
```
{% endtab %}
{% endtabs %}
diff --git a/_overviews/toolkit/http-client-what-else.md b/_overviews/toolkit/http-client-what-else.md
index c467c7687a..98557527ea 100644
--- a/_overviews/toolkit/http-client-what-else.md
+++ b/_overviews/toolkit/http-client-what-else.md
@@ -55,6 +55,7 @@ import scala.concurrent.{Await, Future}
import scala.concurrent.ExecutionContext.Implicits.global
import sttp.client4._
+import sttp.client4.ws.async._
import sttp.ws.WebSocket
val asyncBackend = DefaultFutureBackend()
@@ -83,6 +84,7 @@ import scala.concurrent.{Await, Future}
import scala.concurrent.ExecutionContext.Implicits.global
import sttp.client4.*
+import sttp.client4.ws.async.*
import sttp.ws.WebSocket
val asyncBackend = DefaultFutureBackend()
diff --git a/_overviews/tutorials/binary-compatibility-for-library-authors.md b/_overviews/tutorials/binary-compatibility-for-library-authors.md
index cb5807a068..cdfac174d1 100644
--- a/_overviews/tutorials/binary-compatibility-for-library-authors.md
+++ b/_overviews/tutorials/binary-compatibility-for-library-authors.md
@@ -255,7 +255,6 @@ alice match
Later in time, you can amend the original case class definition to, say, add an optional `address` field. You
* add a new field `address` and a custom `withAddress` method,
* update the public `apply` method in the companion object to initialize all the fields,
- * tell MiMa to [ignore](https://github.com/lightbend-labs/mima#filtering-binary-incompatibilities) changes to the class constructor. This step is necessary because MiMa does not yet ignore changes in private class constructor signatures (see [#738](https://github.com/lightbend-labs/mima/issues/738)).
{% tabs case_class_compat_4 class=tabs-scala-version %}
{% tab 'Scala 2' %}
@@ -284,28 +283,6 @@ object Person:
{% endtab %}
{% endtabs %}
-And, in your build definition:
-
-{% tabs case_class_compat_5 %}
-{% tab 'sbt' %}
-~~~ scala
-import com.typesafe.tools.mima.core._
-mimaBinaryIssueFilters += ProblemFilters.exclude[DirectMissingMethodProblem]("Person.this")
-~~~
-{% endtab %}
-{% endtabs %}
-
-Otherwise, MiMa would fail with an error like “method this(java.lang.String,Int)Unit in class Person does not have a correspondent in current version”.
-
-> Note that an alternative solution, instead of adding a MiMa exclusion filter, consists of adding back the previous
-> constructor signatures as secondary constructors:
-> ~~~ scala
-> case class Person private (name: String, age: Int, address: Option[String]):
-> ...
-> // Add back the former primary constructor signature
-> private[Person] def this(name: String, age: Int) = this(name, age, None)
-> ~~~
-
The original users can use the case class `Person` as before, all the methods that existed before are present unmodified after this change, thus the compatibility with the existing usage is maintained.
The new field `address` can be used as follows:
diff --git a/_ru/overviews/collections-2.13/iterators.md b/_ru/overviews/collections-2.13/iterators.md
index 3d43d76a8f..2c472e918f 100644
--- a/_ru/overviews/collections-2.13/iterators.md
+++ b/_ru/overviews/collections-2.13/iterators.md
@@ -177,7 +177,7 @@ language: ru
def zipWithIndex[A](i: Iterator[A]): Iterator[(Int, A)] =
Iterator.from(0).zip(i)
-### Буферезированные итераторы
+### Буферизированные итераторы
Иногда вам нужен итератор, который может "заглянуть вперед", чтобы вы могли оценить следующий элемент, который будет возвращен без перемещения позиции. Рассмотрим, например, задачу пропуска впереди идущих пустых строк из итератора, который возвращает последовательность строк. У вас может возникнуть соблазн написать следующее
diff --git a/_ru/scala3/book/string-interpolation.md b/_ru/scala3/book/string-interpolation.md
index 9e37b526fa..60e0770aea 100644
--- a/_ru/scala3/book/string-interpolation.md
+++ b/_ru/scala3/book/string-interpolation.md
@@ -410,4 +410,4 @@ p"${x/5}, $x" // Point(2.4, 12.0)
[java-format-docs]: https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Formatter.html#detail
[value-class]: {% link _overviews/core/value-classes.md %}
-[sip-11]: {% link _sips/sips/string-interpolation.md %}
+[sip-11]: {% link _sips/sips/011-string-interpolation.md %}
diff --git a/_sass/layout/cheatsheet.scss b/_sass/layout/cheatsheet.scss
index 691a34b38b..a9acf9a5db 100644
--- a/_sass/layout/cheatsheet.scss
+++ b/_sass/layout/cheatsheet.scss
@@ -4,7 +4,7 @@
.content-primary.cheatsheet {
code {
- font-family: 'Consolas';
+ font-family: 'Inconsolata';
}
pre.highlight {
diff --git a/_sass/layout/type-md.scss b/_sass/layout/type-md.scss
index 6548b1ff60..76b737d048 100755
--- a/_sass/layout/type-md.scss
+++ b/_sass/layout/type-md.scss
@@ -163,7 +163,7 @@
dt,
dd {
code {
- font-family: 'Consolas';
+ font-family: 'Inconsolata';
background-color: #fff;
color: #859900;
@include border-radius($border-radius-medium);
@@ -174,7 +174,7 @@
tr,
td{
code {
- font-family: 'Consolas';
+ font-family: 'Inconsolata';
font-size: 0.9375rem;
}
}
diff --git a/_sass/vendors/bourbon/addons/_font-stacks.scss b/_sass/vendors/bourbon/addons/_font-stacks.scss
index 57128f422a..351f5df5f2 100755
--- a/_sass/vendors/bourbon/addons/_font-stacks.scss
+++ b/_sass/vendors/bourbon/addons/_font-stacks.scss
@@ -22,7 +22,7 @@ $lucida-grande: "Lucida Grande", "Tahoma", "Verdana", "Arial", sans-serif;
///
/// @type List
-$monospace: "Bitstream Vera Sans Mono", "Consolas", "Courier", monospace;
+$monospace: "Bitstream Vera Sans Mono", "Inconsolata", "Courier", monospace;
/// Verdana font stack.
///
diff --git a/_sips/all.md b/_sips/all.md
index befff8ec61..19c649b9d3 100644
--- a/_sips/all.md
+++ b/_sips/all.md
@@ -2,47 +2,19 @@
layout: sips
title: List of All SIPs
-redirect_from:
+redirect_from:
- "/sips/sip-list.html"
- "/sips/pending/index.html"
---
-{% assign sips = site.sips | sort: title %}
+{% assign sips = site.sips | sort: 'number' | reverse %}
{% assign sipData = site.data.sip-data %}
-## Pre-SIP Discussions
-
-You can find so-called “pre-SIP discussions” in the Scala Contributors forum, under
-the category [Scala Improvement Process](https://contributors.scala-lang.org/c/sip/13).
-The goal of pre-SIP discussions is to gather initial community feedback and support.
-
## Pending SIPs
-Proposals that are at the design or implementation stage, and that are actively
-discussed by the committee and the proposals’ authors. Click on a proposal to
-read its content, or the corresponding discussions on GitHub if its design has
-not been accepted yet.
-
-
-
- {% for sip in sips %}
- {% if sip.stage == "design" or sip.stage == "implementation" %}
- -
-
-
- {{ sip.title }}
-
-
-
Stage: {{ sipData[sip.stage].text }}
- Status: {{ sipData[sip.status].text }}
- {% if sip.recommendation %}
- Recommendation: {{ sipData[sip.recommendation].text }}
- {% endif %}
-
- {% endif %}
- {% endfor %}
-
-
+For proposals that are at the design or implementation stage, and that are actively
+discussed by the committee and the proposals' authors, please
+refer to the [GitHub PR queue](https://github.com/scala/improvement-proposals/pulls?q=is%3Apr+is%3Aopen).
## Completed SIPs
@@ -55,44 +27,25 @@ of the compiler (accepted). Click on a proposal to read its content.
{% for sip in sips %}
{% if sip.stage == "completed" %}
- {{ sip.title }}
+ {{ sip.kind | default: 'SIP' }}-{{ sip.number }} - {{ sip.title }}
{{ sipData[sip.status].text }}
{% endif %}
- {% endfor %}
+ {% endfor %}
## Rejected SIPs
-Proposals that have been rejected by the committee. Click on a proposal to read the
-corresponding discussions on GitHub.
-
-
-
- {% for sip in sips %}
- {% if sip.status == "rejected" %}
- -
- {{ sip.title }}
-
- {% endif %}
- {% endfor %}
-
-
+Please refer to [GitHub](https://github.com/scala/improvement-proposals/pulls?q=is%3Apr+label%3Astatus%3Arejected) for proposals that have been rejected by the committee and the corresponding discussions.
## Withdrawn SIPs
-Proposals that have been withdrawn by their authors. Click on a proposal to read the
-corresponding discussions on GitHub.
+Please refer to [GitHub](https://github.com/scala/improvement-proposals/pulls?q=is%3Apr+label%3Astatus%3Awithdrawn) for proposals that have been withdrawn
+and the corresponding discussions.
-
-
- {% for sip in sips %}
- {% if sip.status == "withdrawn" %}
- -
- {{ sip.title }}
-
- {% endif %}
- {% endfor %}
-
-
+## Pre-SIP Discussions
+
+You can find so-called “pre-SIP discussions” in the Scala Contributors forum, under
+the category [Scala Improvement Process](https://contributors.scala-lang.org/c/sip/13).
+The goal of pre-SIP discussions is to gather initial community feedback and support.
\ No newline at end of file
diff --git a/_sips/results/2025-01-24-meeting.md b/_sips/results/2025-01-24-meeting.md
new file mode 100644
index 0000000000..19c6b7cf0a
--- /dev/null
+++ b/_sips/results/2025-01-24-meeting.md
@@ -0,0 +1,7 @@
+---
+layout: sip-meeting-results
+title: SIP Meeting Results - 24th January 2025
+partof: results
+proposals: []
+---
+SIP-51, SIP-60, SIP-62, SIP-63, SIP-66, SIP-67, SIP-68, and SIP-69 were discussed but no vote was held.
diff --git a/_sips/results/2025-02-21-meeting.md b/_sips/results/2025-02-21-meeting.md
new file mode 100644
index 0000000000..c88390710d
--- /dev/null
+++ b/_sips/results/2025-02-21-meeting.md
@@ -0,0 +1,13 @@
+---
+layout: sip-meeting-results
+title: SIP Meeting Results - 21st February 2025
+partof: results
+proposals:
+ - url: https://github.com/scala/improvement-proposals/pull/58
+ name: SIP-52 - Binary APIs
+ result: accepted
+ - url: https://github.com/scala/improvement-proposals/pull/97
+ name: SIP-67 - Strict equality
+ result: accepted
+---
+SIP-62 and SIP-68 were discussed but no vote was held.
diff --git a/_sips/results/2025-03-21-meeting.md b/_sips/results/2025-03-21-meeting.md
new file mode 100644
index 0000000000..f78e0caa82
--- /dev/null
+++ b/_sips/results/2025-03-21-meeting.md
@@ -0,0 +1,10 @@
+---
+layout: sip-meeting-results
+title: SIP Meeting Results - 21st March 2025
+partof: results
+proposals:
+ - url: https://github.com/scala/improvement-proposals/pull/54
+ name: SIP-51 - Drop Forwards Binary Compatibility of the Scala 2.13 Standard Library
+ result: accepted
+---
+SIP-36, SIP-49, SIP-51, SIP-52, SIP-55, SIP-57, SIP-59, SIP-61, and SIP-70 were discussed but no vote was held.
diff --git a/_sips/results/2025-04-25-meeting.md b/_sips/results/2025-04-25-meeting.md
new file mode 100644
index 0000000000..c92bbec4f9
--- /dev/null
+++ b/_sips/results/2025-04-25-meeting.md
@@ -0,0 +1,7 @@
+---
+layout: sip-meeting-results
+title: SIP Meeting Results - 25th April 2025
+partof: results
+proposals: []
+---
+SIP-71 was discussed but no vote was held.
diff --git a/_sips/results/2025-05-23-meeting.md b/_sips/results/2025-05-23-meeting.md
new file mode 100644
index 0000000000..aba801a1a2
--- /dev/null
+++ b/_sips/results/2025-05-23-meeting.md
@@ -0,0 +1,13 @@
+---
+layout: sip-meeting-results
+title: SIP Meeting Results - 21st March 2025
+partof: results
+proposals:
+ - url: https://github.com/scala/improvement-proposals/pull/67
+ name: SIP-57 - Replace non-sensical @unchecked annotations
+ result: accepted
+ - url: https://github.com/scala/improvement-proposals/pull/109
+ name: SIP-71 - Allow fully implicit conversions in Scala 3 with into
+ result: accepted
+---
+No other SIP was discussed.
diff --git a/_sips/sips/named-and-default-arguments.md b/_sips/sips/001-named-and-default-arguments.md
similarity index 99%
rename from _sips/sips/named-and-default-arguments.md
rename to _sips/sips/001-named-and-default-arguments.md
index 3d56605ad7..f088d157bb 100644
--- a/_sips/sips/named-and-default-arguments.md
+++ b/_sips/sips/001-named-and-default-arguments.md
@@ -1,10 +1,12 @@
---
+kind: SID
layout: sip
-title: SID-1 Named and Default Arguments
-stage: completed
-status: shipped
+number: 1
permalink: /sips/:title.html
redirect_from: /sips/pending/named-and-default-arguments.html
+stage: completed
+status: shipped
+title: Named and Default Arguments
---
**Lukas Rytz**
diff --git a/_sips/sips/scala-compiler-phase-plugin-in.md b/_sips/sips/002-scala-compiler-phase-plugin-in.md
similarity index 72%
rename from _sips/sips/scala-compiler-phase-plugin-in.md
rename to _sips/sips/002-scala-compiler-phase-plugin-in.md
index 24f0330e91..24c330db73 100644
--- a/_sips/sips/scala-compiler-phase-plugin-in.md
+++ b/_sips/sips/002-scala-compiler-phase-plugin-in.md
@@ -1,10 +1,12 @@
---
+kind: SID
layout: sip
-title: SID-2 Scala Compiler Phase and Plug-In Initialization for Scala 2.8
-stage: completed
-status: shipped
+number: 2
permalink: /sips/:title.html
redirect_from: /sips/pending/scala-compiler-phase-plugin-in.html
+stage: completed
+status: shipped
+title: Scala Compiler Phase and Plug-In Initialization for Scala 2.8
---
This was an older SID that can be found [here](https://www.scala-lang.org/sid/2)
diff --git a/_sips/sips/new-collection-classes.md b/_sips/sips/003-new-collection-classes.md
similarity index 81%
rename from _sips/sips/new-collection-classes.md
rename to _sips/sips/003-new-collection-classes.md
index d8bb9b8047..e6b593260a 100644
--- a/_sips/sips/new-collection-classes.md
+++ b/_sips/sips/003-new-collection-classes.md
@@ -1,10 +1,12 @@
---
+kind: SID
layout: sip
-title: SID-3 - New Collection classes
-stage: completed
-status: shipped
+number: 3
permalink: /sips/:title.html
redirect_from: /sips/pending/new-collection-classes.html
+stage: completed
+status: shipped
+title: New Collection classes
---
This was an older SID that can be found [here](https://www.scala-lang.org/sid/3)
diff --git a/_sips/sips/early-member-definitions.md b/_sips/sips/004-early-member-definitions.md
similarity index 81%
rename from _sips/sips/early-member-definitions.md
rename to _sips/sips/004-early-member-definitions.md
index 244b7c15b3..2f5049c0a5 100644
--- a/_sips/sips/early-member-definitions.md
+++ b/_sips/sips/004-early-member-definitions.md
@@ -1,10 +1,12 @@
---
+kind: SID
layout: sip
-title: SID-4 - Early Member Definitions
-stage: completed
-status: shipped
+number: 4
permalink: /sips/:title.html
redirect_from: /sips/pending/early-member-definitions.html
+stage: completed
+status: shipped
+title: Early Member Definitions
---
This was an older SID that can be found [here](https://www.scala-lang.org/sid/4)
diff --git a/_sips/sips/internals-of-scala-annotations.md b/_sips/sips/005-internals-of-scala-annotations.md
similarity index 79%
rename from _sips/sips/internals-of-scala-annotations.md
rename to _sips/sips/005-internals-of-scala-annotations.md
index 792f7ee8ee..32d0e822d8 100644
--- a/_sips/sips/internals-of-scala-annotations.md
+++ b/_sips/sips/005-internals-of-scala-annotations.md
@@ -1,10 +1,12 @@
---
+kind: SID
layout: sip
-title: SID-5 - Internals of Scala Annotations
-stage: completed
-status: shipped
+number: 5
permalink: /sips/:title.html
redirect_from: /sips/pending/internals-of-scala-annotations.html
+stage: completed
+status: shipped
+title: Internals of Scala Annotations
---
This was an older SID that can be found [here](https://www.scala-lang.org/sid/5)
diff --git a/_sips/sips/scala-2-8-arrays.md b/_sips/sips/007-scala-2-8-arrays.md
similarity index 99%
rename from _sips/sips/scala-2-8-arrays.md
rename to _sips/sips/007-scala-2-8-arrays.md
index 7f5999d651..864e6582a5 100644
--- a/_sips/sips/scala-2-8-arrays.md
+++ b/_sips/sips/007-scala-2-8-arrays.md
@@ -1,10 +1,12 @@
---
+kind: SID
layout: sip
-title: SID-7 - Scala 2.8 Arrays
-stage: completed
-status: shipped
+number: 7
permalink: /sips/:title.html
redirect_from: /sips/pending/scala-2-8-arrays.html
+stage: completed
+status: shipped
+title: Scala 2.8 Arrays
---
*(This is an older SID, its original PDF can be found [here](https://www.scala-lang.org/sid/7))*
diff --git a/_sips/sips/scala-swing-overview.md b/_sips/sips/008-scala-swing-overview.md
similarity index 82%
rename from _sips/sips/scala-swing-overview.md
rename to _sips/sips/008-scala-swing-overview.md
index a539dc352c..b3f4d1829f 100644
--- a/_sips/sips/scala-swing-overview.md
+++ b/_sips/sips/008-scala-swing-overview.md
@@ -1,10 +1,12 @@
---
+kind: SID
layout: sip
-title: SID-8 - Scala Swing Overview
-stage: completed
-status: shipped
+number: 8
permalink: /sips/:title.html
redirect_from: /sips/pending/scala-swing-overview.html
+stage: completed
+status: shipped
+title: Scala Swing Overview
---
This was an older SID that can be found [here](https://www.scala-lang.org/sid/8)
diff --git a/_sips/sips/scala-specialization.md b/_sips/sips/009-scala-specialization.md
similarity index 82%
rename from _sips/sips/scala-specialization.md
rename to _sips/sips/009-scala-specialization.md
index d9bd06e36e..120f6084cb 100644
--- a/_sips/sips/scala-specialization.md
+++ b/_sips/sips/009-scala-specialization.md
@@ -1,10 +1,12 @@
---
+kind: SID
layout: sip
-title: SID-9 - Scala Specialization
-stage: completed
-status: shipped
+number: 9
permalink: /sips/:title.html
redirect_from: /sips/pending/scala-specialization.html
+stage: completed
+status: shipped
+title: Scala Specialization
---
This was an older SID that can be found [here](https://www.scala-lang.org/sid/9)
diff --git a/_sips/sips/picked-signatures.md b/_sips/sips/010-picked-signatures.md
similarity index 73%
rename from _sips/sips/picked-signatures.md
rename to _sips/sips/010-picked-signatures.md
index 12f205a4e1..16fcf11f4a 100644
--- a/_sips/sips/picked-signatures.md
+++ b/_sips/sips/010-picked-signatures.md
@@ -1,10 +1,12 @@
---
+kind: SID
layout: sip
-title: SID-10 - Storage of pickled Scala signatures in class files
-stage: completed
-status: shipped
+number: 10
permalink: /sips/:title.html
redirect_from: /sips/pending/picked-signatures.html
+stage: completed
+status: shipped
+title: Storage of pickled Scala signatures in class files
---
This was an older SID that can be found [here](https://www.scala-lang.org/sid/10)
diff --git a/_sips/sips/string-interpolation.md b/_sips/sips/011-string-interpolation.md
similarity index 85%
rename from _sips/sips/string-interpolation.md
rename to _sips/sips/011-string-interpolation.md
index f1343fdb22..1332d4a004 100644
--- a/_sips/sips/string-interpolation.md
+++ b/_sips/sips/011-string-interpolation.md
@@ -1,11 +1,11 @@
---
layout: sip
-title: SIP-11 - String Interpolation
+number: 11
+permalink: /sips/string-interpolation.html
+redirect_from: /sips/pending/string-interpolation.html
stage: completed
status: shipped
-vote-status: complete
-permalink: /sips/:title.html
-redirect_from: /sips/pending/string-interpolation.html
+title: String Interpolation
---
**By: Martin Odersky**
diff --git a/_sips/sips/implicit-classes.md b/_sips/sips/013-implicit-classes.md
similarity index 98%
rename from _sips/sips/implicit-classes.md
rename to _sips/sips/013-implicit-classes.md
index 495bcadf23..56e6e4886a 100644
--- a/_sips/sips/implicit-classes.md
+++ b/_sips/sips/013-implicit-classes.md
@@ -1,10 +1,11 @@
---
layout: sip
-title: SIP-13 - Implicit classes
-stage: completed
-status: shipped
+number: 13
permalink: /sips/:title.html
redirect_from: /sips/pending/implicit-classes.html
+stage: completed
+status: shipped
+title: Implicit classes
---
**By: Josh Suereth**
diff --git a/_sips/sips/futures-promises.md b/_sips/sips/014-futures-promises.md
similarity index 99%
rename from _sips/sips/futures-promises.md
rename to _sips/sips/014-futures-promises.md
index 26e067bfaa..460bc15540 100644
--- a/_sips/sips/futures-promises.md
+++ b/_sips/sips/014-futures-promises.md
@@ -1,10 +1,11 @@
---
layout: sip
-title: SIP-14 - Futures and Promises
-stage: completed
-status: shipped
+number: 14
permalink: /sips/:title.html
redirect_from: /sips/pending/futures-promises.html
+stage: completed
+status: shipped
+title: Futures and Promises
---
**By: Philipp Haller, Aleksandar Prokopec, Heather Miller, Viktor Klang, Roland Kuhn, and Vojin Jovanovic**
diff --git a/_sips/sips/value-classes.md b/_sips/sips/015-value-classes.md
similarity index 99%
rename from _sips/sips/value-classes.md
rename to _sips/sips/015-value-classes.md
index 48ad643281..e8956533ca 100644
--- a/_sips/sips/value-classes.md
+++ b/_sips/sips/015-value-classes.md
@@ -1,10 +1,11 @@
---
layout: sip
-title: SIP-15 - Value Classes
-stage: completed
-status: shipped
+number: 15
permalink: /sips/:title.html
redirect_from: /sips/pending/value-classes.html
+stage: completed
+status: shipped
+title: Value Classes
---
**By: Martin Odersky and Jeff Olson and Paul Phillips and Joshua Suereth**
diff --git a/_sips/sips/type-dynamic.md b/_sips/sips/017-type-dynamic.md
similarity index 94%
rename from _sips/sips/type-dynamic.md
rename to _sips/sips/017-type-dynamic.md
index c359ec0627..ac31d4cbbd 100644
--- a/_sips/sips/type-dynamic.md
+++ b/_sips/sips/017-type-dynamic.md
@@ -1,10 +1,11 @@
---
layout: sip
-title: SIP-17 - Type Dynamic
-stage: completed
-status: shipped
+number: 17
permalink: /sips/:title.html
redirect_from: /sips/pending/type-dynamic.html
+stage: completed
+status: shipped
+title: Type Dynamic
---
diff --git a/_sips/sips/modularizing-language-features.md b/_sips/sips/018-modularizing-language-features.md
similarity index 94%
rename from _sips/sips/modularizing-language-features.md
rename to _sips/sips/018-modularizing-language-features.md
index 4de88d18be..9c27ac2ce9 100644
--- a/_sips/sips/modularizing-language-features.md
+++ b/_sips/sips/018-modularizing-language-features.md
@@ -1,10 +1,11 @@
---
layout: sip
-title: SIP-18 - Modularizing Language Features
-stage: completed
-status: shipped
+number: 18
permalink: /sips/:title.html
redirect_from: /sips/pending/modularizing-language-features.html
+stage: completed
+status: shipped
+title: Modularizing Language Features
---
diff --git a/_sips/sips/42.type.md b/_sips/sips/023-42.type.md
similarity index 99%
rename from _sips/sips/42.type.md
rename to _sips/sips/023-42.type.md
index 861505d42e..11160ccaa5 100644
--- a/_sips/sips/42.type.md
+++ b/_sips/sips/023-42.type.md
@@ -1,10 +1,11 @@
---
layout: sip
-title: SIP-23 - Literal-based singleton types
-stage: completed
-status: shipped
+number: 23
permalink: /sips/:title.html
redirect_from: /sips/pending/42.type.html
+stage: completed
+status: shipped
+title: Literal-based singleton types
---
**Authors: George Leontiev, Eugene Burmako, Jason Zaugg, Adriaan Moors, Paul Phillips, Oron Port, Miles
diff --git a/_sips/sips/trait-parameters.md b/_sips/sips/025-trait-parameters.md
similarity index 96%
rename from _sips/sips/trait-parameters.md
rename to _sips/sips/025-trait-parameters.md
index 633f0c0b73..f8ad666eee 100644
--- a/_sips/sips/trait-parameters.md
+++ b/_sips/sips/025-trait-parameters.md
@@ -1,10 +1,11 @@
---
layout: sip
-title: SIP-25 - Trait Parameters
-stage: completed
-status: shipped
+number: 25
permalink: /sips/:title.html
redirect_from: /sips/pending/trait-parameters.html
+stage: completed
+status: shipped
+title: Trait Parameters
---
> This proposal has been implemented in Scala 3.0.
@@ -69,4 +70,4 @@ the evaluation order would be `e1`, initializer of `T`, `e2`, initializer of `V`
## See Also ##
-[Dotty Issue #640](https://github.com/scala/scala3/issues/640)
+[Dotty Issue #640](https://github.com/lampepfl/dotty/issues/640)
diff --git a/_sips/sips/trailing-commas.md b/_sips/sips/027-trailing-commas.md
similarity index 99%
rename from _sips/sips/trailing-commas.md
rename to _sips/sips/027-trailing-commas.md
index 7eef93dd03..323b8512e8 100644
--- a/_sips/sips/trailing-commas.md
+++ b/_sips/sips/027-trailing-commas.md
@@ -1,10 +1,11 @@
---
layout: sip
-title: SIP-27 - Trailing Commas
-stage: completed
-status: shipped
+number: 27
permalink: /sips/:title.html
redirect_from: /sips/pending/trailing-commas.html
+stage: completed
+status: shipped
+title: Trailing Commas
---
> This proposal has been shipped in Scala 2.12.2.
diff --git a/_sips/sips/static-members.md b/_sips/sips/030-static-members.md
similarity index 99%
rename from _sips/sips/static-members.md
rename to _sips/sips/030-static-members.md
index 1c0df79d75..546261f1b7 100644
--- a/_sips/sips/static-members.md
+++ b/_sips/sips/030-static-members.md
@@ -1,10 +1,11 @@
---
layout: sip
-title: SIP-30 - @static fields and methods in Scala objects (SI-4581)
-stage: completed
-status: shipped
+number: 30
permalink: /sips/:title.html
redirect_from: /sips/pending/static-members.html
+stage: completed
+status: shipped
+title: "@static fields and methods in Scala objects (SI-4581)"
---
> This proposal has been implemented in Scala 3.0.0
diff --git a/_sips/sips/byname-implicits.md b/_sips/sips/031-byname-implicits.md
similarity index 99%
rename from _sips/sips/byname-implicits.md
rename to _sips/sips/031-byname-implicits.md
index fd63269068..4ed6256c45 100644
--- a/_sips/sips/byname-implicits.md
+++ b/_sips/sips/031-byname-implicits.md
@@ -1,10 +1,11 @@
---
layout: sip
-title: SIP-31 - Byname implicit arguments
-stage: completed
-status: shipped
+number: 31
permalink: /sips/:title.html
redirect_from: /sips/pending/byname-implicits.html
+stage: completed
+status: shipped
+title: Byname implicit arguments
---
> This proposal has been implemented in Scala 2.13.0 and Scala 3.0.0.
@@ -39,7 +40,7 @@ the knot" implicitly.
### Implementation status
-Byname implicits have been implemented in [Dotty](https://github.com/scala/scala3/issues/1998)
+Byname implicits have been implemented in [Dotty](https://github.com/lampepfl/dotty/issues/1998)
with an earlier iteration of the divergence checking algorithm described below. A full
implementation of this proposal exists as a [pull request](https://github.com/scala/scala/pull/6050)
relative to the 2.13.x branch of the Lightbend Scala compiler and it is scheduled to be included in
@@ -851,7 +852,7 @@ object Test {
because the path `foo` in `foo.Out` is not stable. Full parity with shapeless's `Lazy` would require
lazy (rather than byname) implicit parameters (see [this Dotty
-ticket](https://github.com/scala/scala3/issues/3005) for further discussion) and is orthogonal to
+ticket](https://github.com/lampepfl/dotty/issues/3005) for further discussion) and is orthogonal to
this SIP in that they would drop out of support for lazy parameters more generally, as described in
[this Scala ticket](https://github.com/scala/bug/issues/240).
diff --git a/_sips/sips/priority-based-infix-type-precedence.md b/_sips/sips/033-priority-based-infix-type-precedence.md
similarity index 97%
rename from _sips/sips/priority-based-infix-type-precedence.md
rename to _sips/sips/033-priority-based-infix-type-precedence.md
index a67d84dbb5..e55daa9890 100644
--- a/_sips/sips/priority-based-infix-type-precedence.md
+++ b/_sips/sips/033-priority-based-infix-type-precedence.md
@@ -1,10 +1,11 @@
---
layout: sip
-title: SIP-33 - Priority-based infix type precedence
-stage: completed
-status: shipped
+number: 33
permalink: /sips/:title.html
redirect_from: /sips/pending/priority-based-infix-type-precedence.html
+stage: completed
+status: shipped
+title: Priority-based infix type precedence
---
**By: Oron Port**
@@ -137,7 +138,7 @@ However, it is very unlikely that such interaction would occur.
**Related Issues**
-* [Dotty Issue #1961](https://github.com/scala/scala3/issues/1961)
+* [Dotty Issue #1961](https://github.com/lampepfl/dotty/issues/1961)
## Backward Compatibility
diff --git a/_sips/sips/opaque-types.md b/_sips/sips/035-opaque-types.md
similarity index 99%
rename from _sips/sips/opaque-types.md
rename to _sips/sips/035-opaque-types.md
index a33083181d..37eeada83c 100644
--- a/_sips/sips/opaque-types.md
+++ b/_sips/sips/035-opaque-types.md
@@ -1,10 +1,11 @@
---
layout: sip
-title: SIP-35 - Opaque types
-stage: completed
-status: shipped
+number: 35
permalink: /sips/:title.html
redirect_from: /sips/pending/opaque-types.html
+stage: completed
+status: shipped
+title: Opaque types
---
> This proposal has been implemented with some changes in Scala 3.0.0.
diff --git a/_sips/sips/interpolation-quote-escape.md b/_sips/sips/037-interpolation-quote-escape.md
similarity index 95%
rename from _sips/sips/interpolation-quote-escape.md
rename to _sips/sips/037-interpolation-quote-escape.md
index 6f0398ce33..9aec1e3cd9 100644
--- a/_sips/sips/interpolation-quote-escape.md
+++ b/_sips/sips/037-interpolation-quote-escape.md
@@ -1,10 +1,11 @@
---
layout: sip
-title: SIP-37 - Quote escapes for interpolations
-stage: completed
-status: shipped
+number: 37
permalink: /sips/:title.html
redirect_from: /sips/pending/interpolation-quote-escape.html
+stage: completed
+status: shipped
+title: Quote escapes for interpolations
---
> This proposal has been implemented in Scala 2.13.6 and Scala 3.0.0.
@@ -129,4 +130,4 @@ proposals.
[^4]: https://github.com/scala/bug/issues/6476#issuecomment-292412577 "@retronym said: +1 to s"$"". Because it doesn't compile today, we don't risk changing the meaning of existing programs."
[^5]: https://github.com/Scala/Scala/pull/6953/files#diff-0023b3bfa053fb16603156b785efa7ad ""
[^6]: https://github.com/Scala/Scala/pull/4308 "SI-6476 Accept escaped quotes in interp strings"
-[^7]: https://github.com/scala/scala3/pull/7486 "PR in dotty"
+[^7]: https://github.com/lampepfl/dotty/pull/7486 "PR in dotty"
diff --git a/_sips/sips/converters-among-optional-functions-partialfunctions-and-extractor-objects.md b/_sips/sips/038-converters-among-optional-functions-partialfunctions-and-extractor-objects.md
similarity index 97%
rename from _sips/sips/converters-among-optional-functions-partialfunctions-and-extractor-objects.md
rename to _sips/sips/038-converters-among-optional-functions-partialfunctions-and-extractor-objects.md
index cad08453c3..28d1829faa 100644
--- a/_sips/sips/converters-among-optional-functions-partialfunctions-and-extractor-objects.md
+++ b/_sips/sips/038-converters-among-optional-functions-partialfunctions-and-extractor-objects.md
@@ -1,10 +1,11 @@
---
layout: sip
-title: SIP-38 - Converters among optional Functions, PartialFunctions and extractor objects
-stage: completed
-status: shipped
+number: 38
permalink: /sips/:title.html
redirect_from: /sips/pending/converters-among-optional-functions-partialfunctions-and-extractor-object.html
+stage: completed
+status: shipped
+title: Converters among optional Functions, PartialFunctions and extractor objects
---
> This proposal has been implemented in Scala 2.13.0 and Scala 3.0.0.
diff --git a/_sips/sips/right-associative-by-name-operators.md b/_sips/sips/039-right-associative-by-name-operators.md
similarity index 98%
rename from _sips/sips/right-associative-by-name-operators.md
rename to _sips/sips/039-right-associative-by-name-operators.md
index 3d247af33d..13e02ca1f6 100644
--- a/_sips/sips/right-associative-by-name-operators.md
+++ b/_sips/sips/039-right-associative-by-name-operators.md
@@ -1,10 +1,11 @@
---
layout: sip
-title: SIP-39 - Right-Associative By-Name Operators
-stage: completed
-status: shipped
+number: 39
permalink: /sips/:title.html
redirect_from: /sips/pending/right-associative-by-name-operators.html
+stage: completed
+status: shipped
+title: Right-Associative By-Name Operators
---
> This proposal has been implemented in Scala 2.13.0 and Scala 3.0.0.
diff --git a/_sips/sips/binary-integer-literals.md b/_sips/sips/042-binary-integer-literals.md
similarity index 96%
rename from _sips/sips/binary-integer-literals.md
rename to _sips/sips/042-binary-integer-literals.md
index ef761601fb..e15f57e949 100644
--- a/_sips/sips/binary-integer-literals.md
+++ b/_sips/sips/042-binary-integer-literals.md
@@ -1,9 +1,10 @@
---
layout: sip
-title: SIP-42 - Support Binary Integer Literals
+number: 42
+permalink: /sips/:title.html
stage: completed
status: shipped
-permalink: /sips/:title.html
+title: Support Binary Integer Literals
---
**By: NthPortal**
diff --git a/_sips/sips/fewer-braces.md b/_sips/sips/044-fewer-braces.md
similarity index 97%
rename from _sips/sips/fewer-braces.md
rename to _sips/sips/044-fewer-braces.md
index 321f665233..8897c9d4a0 100644
--- a/_sips/sips/fewer-braces.md
+++ b/_sips/sips/044-fewer-braces.md
@@ -1,9 +1,10 @@
---
layout: sip
+number: 44
permalink: /sips/:title.html
stage: completed
status: shipped
-title: SIP-44 - Fewer Braces
+title: Fewer Braces
---
**By: Martin Odersky**
@@ -131,7 +132,7 @@ If there would be code using these idioms, it can be rewritten quite simply to a
### Tooling
-Since this affects parsing, the scalameta parser and any other parser used in an IDE will also need to be updated. The necessary changes to the Scala 3 parser were made here: https://github.com/scala/scala3/pull/15273/commits. The commit that embodies the core change set is here: https://github.com/scala/scala3/pull/15273/commits/421bdd660b0456c2ff1ae386f032c41bb1e0212a.
+Since this affects parsing, the scalameta parser and any other parser used in an IDE will also need to be updated. The necessary changes to the Scala 3 parser were made here: https://github.com/lampepfl/dotty/pull/15273/commits. The commit that embodies the core change set is here: https://github.com/lampepfl/dotty/pull/15273/commits/421bdd660b0456c2ff1ae386f032c41bb1e0212a.
### Handling Edge Cases
@@ -288,7 +289,7 @@ This is a tradeoff between conciseness and consistency. In the interest of minim
- Doc page for proposed change: https://dotty.epfl.ch/docs/reference/other-new-features/indentation.html#variant-indentation-marker--for-arguments
- - Merged PR implementing the proposal under experimental flag: https://github.com/scala/scala3/pull/15273/commits/421bdd660b0456c2ff1ae386f032c41bb1e0212a
+ - Merged PR implementing the proposal under experimental flag: https://github.com/lampepfl/dotty/pull/15273/commits/421bdd660b0456c2ff1ae386f032c41bb1e0212a
- Latest discussion on contributors (there were several before when we discussed indentation in general): https://contributors.scala-lang.org/t/make-fewerbraces-available-outside-snapshot-releases/5024/166
diff --git a/_sips/sips/scala-cli.md b/_sips/sips/046-scala-cli.md
similarity index 99%
rename from _sips/sips/scala-cli.md
rename to _sips/sips/046-scala-cli.md
index de9aaece39..e8b7a4b48f 100644
--- a/_sips/sips/scala-cli.md
+++ b/_sips/sips/046-scala-cli.md
@@ -1,9 +1,10 @@
---
layout: sip
+number: 46
permalink: /sips/:title.html
stage: completed
status: shipped
-title: SIP-46 - Scala CLI as default Scala command
+title: Scala CLI as default Scala command
---
**By: Krzysztof Romanowski and Scala CLI team**
diff --git a/_sips/sips/clause-interleaving.md b/_sips/sips/047-clause-interleaving.md
similarity index 98%
rename from _sips/sips/clause-interleaving.md
rename to _sips/sips/047-clause-interleaving.md
index e9809815e2..29f334df6f 100644
--- a/_sips/sips/clause-interleaving.md
+++ b/_sips/sips/047-clause-interleaving.md
@@ -1,9 +1,10 @@
---
layout: sip
-title: SIP-47 - Clause Interleaving
+number: 47
+permalink: /sips/:title.html
stage: completed
status: shipped
-permalink: /sips/:title.html
+title: Clause Interleaving
---
**By: Quentin Bernet and Guillaume Martres and Sébastien Doeraene**
@@ -167,7 +168,7 @@ As discussed above, we may want to consider generalizing class parameter lists a
## Related work
* Pre-SIP: [https://contributors.scala-lang.org/t/clause-interweaving-allowing-def-f-t-x-t-u-y-u/5525](https://contributors.scala-lang.org/t/clause-interweaving-allowing-def-f-t-x-t-u-y-u/5525)
-* An implementation of the proposal is available as a pull request at [https://github.com/scala/scala3/pull/14019](https://github.com/scala/scala3/pull/14019)
+* An implementation of the proposal is available as a pull request at [https://github.com/lampepfl/dotty/pull/14019](https://github.com/lampepfl/dotty/pull/14019)
## FAQ
Currently empty.
diff --git a/_sips/sips/polymorphic-eta-expansion.md b/_sips/sips/049-polymorphic-eta-expansion.md
similarity index 98%
rename from _sips/sips/polymorphic-eta-expansion.md
rename to _sips/sips/049-polymorphic-eta-expansion.md
index 4099e05cc8..c000b8f7c6 100644
--- a/_sips/sips/polymorphic-eta-expansion.md
+++ b/_sips/sips/049-polymorphic-eta-expansion.md
@@ -1,9 +1,10 @@
---
layout: sip
-title: SIP-49 - Polymorphic Eta-Expansion
+number: 49
+permalink: /sips/:title.html
stage: implementation
status: waiting-for-implementation
-permalink: /sips/:title.html
+title: Polymorphic Eta-Expansion
---
**By: Quentin Bernet and Guillaume Martres**
@@ -420,7 +421,7 @@ No other alternatives have been imagined, the similarity between this proposal a
- If there is already a proof-of-concept implementation, a link to it will be welcome here. -->
* Pre-SIP: https://contributors.scala-lang.org/t/polymorphic-eta-expansion/5516
-* A naive implementation can be found at https://github.com/scala/scala3/pull/14015 (it is more general than this proposal and thus breaks compatibility)
+* A naive implementation can be found at https://github.com/lampepfl/dotty/pull/14015 (it is more general than this proposal and thus breaks compatibility)
* A compatibility-preserving implementation is in development.
diff --git a/_sips/sips/drop-stdlib-forwards-bin-compat.md b/_sips/sips/051-drop-stdlib-forwards-bin-compat.md
similarity index 99%
rename from _sips/sips/drop-stdlib-forwards-bin-compat.md
rename to _sips/sips/051-drop-stdlib-forwards-bin-compat.md
index 771804f668..8bfbaa1487 100644
--- a/_sips/sips/drop-stdlib-forwards-bin-compat.md
+++ b/_sips/sips/051-drop-stdlib-forwards-bin-compat.md
@@ -1,9 +1,10 @@
---
layout: sip
+number: 51
permalink: /sips/:title.html
-stage: implementation
-status: under-review
-title: SIP-51 - Drop Forwards Binary Compatibility of the Scala 2.13 Standard Library
+stage: completed
+status: shipped
+title: Drop Forwards Binary Compatibility of the Scala 2.13 Standard Library
---
**By: Lukas Rytz**
diff --git a/_sips/sips/binary-api.md b/_sips/sips/052-binary-api.md
similarity index 95%
rename from _sips/sips/binary-api.md
rename to _sips/sips/052-binary-api.md
index e94bf85a54..2574dd37d4 100644
--- a/_sips/sips/binary-api.md
+++ b/_sips/sips/052-binary-api.md
@@ -1,9 +1,10 @@
---
layout: sip
+number: 52
permalink: /sips/:title.html
-stage: implementation
-status: under-review
-title: SIP-52 - Binary APIs
+stage: completed
+status: shipped
+title: Binary APIs
---
**By: Author Nicolas Stucki**
@@ -33,7 +34,7 @@ Currently, the compiler automatically generates accessors for references to priv
* Changing the implementation of an inline definition can be a binary incompatible change
* Removing final from a class is a binary incompatible change
-You can find more details in [https://github.com/scala/scala3/issues/16983](https://github.com/scala/scala3/issues/16983)
+You can find more details in [https://github.com/lampepfl/dotty/issues/16983](https://github.com/lampepfl/dotty/issues/16983)
### Avoid duplication of inline accessors
@@ -249,7 +250,7 @@ Using references to `@publicInBinary` in inline code can cause binary incompatib
### Add a `@binaryAccessor`
This annotation would generate an stable accessor. This annotation could be used on `private` definition. It would also mitigate [migration costs](https://gist.github.com/nicolasstucki/003f7293941836b08a0d53dbcb913e3c) for library authors that have published unstable accessors.
-* Implementation https://github.com/scala/scala3/pull/16992
+* Implementation https://github.com/lampepfl/dotty/pull/16992
### Make all `private[C]` part of the binary API
@@ -268,9 +269,9 @@ The drawback of this approach is that that we would need to force users to keep
## Related work
-* Initial discussions: [https://github.com/scala/scala3/issues/16983](https://github.com/scala/scala3/issues/16983)
-* Initial proof of concept (outdated): [https://github.com/scala/scala3/pull/16992](https://github.com/scala/scala3/pull/16992)
-* Single annotation proof of concept: [https://github.com/scala/scala3/pull/18402](https://github.com/scala/scala3/pull/18402)
+* Initial discussions: [https://github.com/lampepfl/dotty/issues/16983](https://github.com/lampepfl/dotty/issues/16983)
+* Initial proof of concept (outdated): [https://github.com/lampepfl/dotty/pull/16992](https://github.com/lampepfl/dotty/pull/16992)
+* Single annotation proof of concept: [https://github.com/lampepfl/dotty/pull/18402](https://github.com/lampepfl/dotty/pull/18402)
* Community migration analysis: [Gist](https://gist.github.com/nicolasstucki/003f7293941836b08a0d53dbcb913e3c)
* Kotlin: [PublishedApi](https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-published-api/) plays the same role as `@publicInBinary`
but its interaction with (inline definitions)[https://kotlinlang.org/docs/inline-functions.html#restrictions-for-public-api-inline-functions]
diff --git a/_sips/sips/quote-pattern-type-variable-syntax.md b/_sips/sips/053-quote-pattern-type-variable-syntax.md
similarity index 93%
rename from _sips/sips/quote-pattern-type-variable-syntax.md
rename to _sips/sips/053-quote-pattern-type-variable-syntax.md
index 64f58fafb8..f011c3aadf 100644
--- a/_sips/sips/quote-pattern-type-variable-syntax.md
+++ b/_sips/sips/053-quote-pattern-type-variable-syntax.md
@@ -1,9 +1,10 @@
---
layout: sip
+number: 53
permalink: /sips/:title.html
stage: completed
status: shipped
-title: SIP-53 - Quote pattern explicit type variable syntax
+title: Quote pattern explicit type variable syntax
---
**By: Nicolas Stucki**
@@ -61,11 +62,11 @@ We want to be able to set the bounds of type variables to be able to match again
```scala
case '[ head *: tail ] => h[tail]
```
-See [https://github.com/scala/scala3/issues/11738](https://github.com/scala/scala3/issues/11738).
+See [https://github.com/lampepfl/dotty/issues/11738](https://github.com/lampepfl/dotty/issues/11738).
### Support matching on any kind of type
We want to match against higher-kinded (or `AnyKind`) types. This is not possible due to the default upper bound of `Any`.
-See [https://github.com/scala/scala3/issues/10864](https://github.com/scala/scala3/issues/10864).
+See [https://github.com/lampepfl/dotty/issues/10864](https://github.com/lampepfl/dotty/issues/10864).
### Support multiple references to the same type in quoted type patterns
We want to be able to match using several references to the same type variable.
@@ -137,8 +138,8 @@ TASTy only contains explicit type variable definitions, and this encoding would
## Related work
-* Proof of concept of type variable syntax: [https://github.com/scala/scala3/pull/16910](https://github.com/scala/scala3/pull/16910)
-* Proof of concept of backticks (only interested in the first bullet point): [https://github.com/scala/scala3/pull/16935](https://github.com/scala/scala3/pull/16935)
+* Proof of concept of type variable syntax: [https://github.com/lampepfl/dotty/pull/16910](https://github.com/lampepfl/dotty/pull/16910)
+* Proof of concept of backticks (only interested in the first bullet point): [https://github.com/lampepfl/dotty/pull/16935](https://github.com/lampepfl/dotty/pull/16935)
* Implementation: [https://github.com/scala/scala3/pull/17362](https://github.com/scala/scala3/pull/17362)
* Stabilized implementation: [https://github.com/scala/scala3/pull/18574](https://github.com/scala/scala3/pull/18574)
diff --git a/_sips/sips/multi-source-extension-overloads.md b/_sips/sips/054-multi-source-extension-overloads.md
similarity index 98%
rename from _sips/sips/multi-source-extension-overloads.md
rename to _sips/sips/054-multi-source-extension-overloads.md
index fdcfd7050b..bc79b2fb57 100644
--- a/_sips/sips/multi-source-extension-overloads.md
+++ b/_sips/sips/054-multi-source-extension-overloads.md
@@ -1,9 +1,10 @@
---
layout: sip
+number: 54
permalink: /sips/:title.html
stage: completed
status: shipped
-title: SIP-54 - Multi-Source Extension Overloads
+title: Multi-Source Extension Overloads
---
**By: Sébastien Doeraene and Martin Odersky**
@@ -226,7 +227,7 @@ A number of alternatives were mentioned in [the Contributors thread](https://con
## Related work
- [Contributors thread acting as de facto Pre-SIP](https://contributors.scala-lang.org/t/change-shadowing-mechanism-of-extension-methods-for-on-par-implicit-class-behavior/5831)
-- [Pull Request in dotty](https://github.com/scala/scala3/pull/17050) to support it under an experimental import
+- [Pull Request in dotty](https://github.com/lampepfl/dotty/pull/17050) to support it under an experimental import
## FAQ
diff --git a/_sips/sips/match-types-spec.md b/_sips/sips/056-match-types-spec.md
similarity index 99%
rename from _sips/sips/match-types-spec.md
rename to _sips/sips/056-match-types-spec.md
index 049fad9415..88022e7f57 100644
--- a/_sips/sips/match-types-spec.md
+++ b/_sips/sips/056-match-types-spec.md
@@ -1,9 +1,10 @@
---
layout: sip
+number: 56
permalink: /sips/:title.html
stage: completed
status: shipped
-title: SIP-56 - Proper Specification for Match Types
+title: Proper Specification for Match Types
---
**By: Sébastien Doeraene**
@@ -95,7 +96,7 @@ It is however not possible to guarantee that property for *all* cases, since the
#### Preamble
Some of the concepts mentioned here are defined in the existing Scala 3 specification draft.
-That draft can be found in the dotty repository at https://github.com/scala/scala3/tree/main/docs/_spec.
+That draft can be found in the dotty repository at https://github.com/lampepfl/dotty/tree/main/docs/_spec.
It is not rendered anywhere yet, though.
Here are some of the relevant concepts that are perhaps lesser-known:
@@ -583,7 +584,7 @@ Notable prior work related to this proposal includes:
- [Current reference page for Scala 3 match types](https://dotty.epfl.ch/docs/reference/new-types/match-types.html)
- [Abstractions for Type-Level Programming](https://infoscience.epfl.ch/record/294024), Olivier Blanvillain, Chapter 4 (Match Types)
- ["Pre-Sip" discussion in the Contributors forum](https://contributors.scala-lang.org/t/pre-sip-proper-specification-for-match-types/6265) (submitted at the same time as this SIP document)
-- [PR with the proposed implementation](https://github.com/scala/scala3/pull/18262)
+- [PR with the proposed implementation](https://github.com/lampepfl/dotty/pull/18262)
## FAQ
diff --git a/_sips/sips/replace-nonsensical-unchecked-annotation.md b/_sips/sips/057-replace-nonsensical-unchecked-annotation.md
similarity index 81%
rename from _sips/sips/replace-nonsensical-unchecked-annotation.md
rename to _sips/sips/057-replace-nonsensical-unchecked-annotation.md
index 3bb8609940..24da792513 100644
--- a/_sips/sips/replace-nonsensical-unchecked-annotation.md
+++ b/_sips/sips/057-replace-nonsensical-unchecked-annotation.md
@@ -1,10 +1,11 @@
---
layout: sip
+number: 57
permalink: /sips/:title.html
-stage: implementation
-status: under-review
presip-thread: https://contributors.scala-lang.org/t/pre-sip-replace-non-sensical-unchecked-annotations/6342
-title: SIP-57 - Replace non-sensical @unchecked annotations
+stage: completed
+status: shipped
+title: Replace non-sensical @unchecked annotations
---
**By: Martin Odersky and Jamie Thompson**
@@ -15,12 +16,13 @@ title: SIP-57 - Replace non-sensical @unchecked annotations
|---------------|--------------------|
| Dec 8th 2023 | Initial Draft |
| Jan 19th 2024 | Clarification about current @unchecked behavior |
+| Jun 3rd 2025 | Rename `.runtimeCheck` to `.runtimeChecked` |
## Summary
We propose to replace the mechanism to silence warnings for "unchecked" patterns, in the cases where silencing the warning will still result in the pattern being checked at runtime.
-Currently, a user can silence warnings that a scrutinee may not be matched by a pattern, by annotating the scrutinee with the `@unchecked` annotation. This SIP proposes to use a new annotation `@RuntimeCheck` to replace `@unchecked` for this purpose. For convenience, an extension method will be added to `Predef` that marks the receiver with the annotation (used as follows: `foo.runtimeCheck`). Functionally it behaves the same as the old annotation, but improves readability at the callsite.
+Currently, a user can silence warnings that a scrutinee may not be matched by a pattern, by annotating the scrutinee with the `@unchecked` annotation. This SIP proposes to use a new annotation `@RuntimeCheck` to replace `@unchecked` for this purpose. For convenience, an extension method will be added to `Predef` that marks the receiver with the annotation (used as follows: `foo.runtimeChecked`). Functionally it behaves the same as the old annotation, but improves readability at the callsite.
## Motivation
@@ -92,15 +94,15 @@ In all usages where the compiler looks for `@unchecked` for this purpose, we ins
By placing the annotation in the `internal` package, we communicate that the user is not meant to directly use the annotation.
-Instead, for convenience, we provide an extension method `Predef.runtimeCheck`, which can be applied to any expression.
+Instead, for convenience, we provide an extension method `Predef.runtimeChecked`, which can be applied to any expression.
The new usage to assert that a pattern is checked at runtime then becomes as follows:
```scala
def xs: List[Any] = ???
-val y :: ys = xs.runtimeCheck
+val y :: ys = xs.runtimeChecked
```
-We also make `runtimeCheck` a transparent inline method. This ensures that the elaboration of the method defines its semantics. (i.e. `runtimeCheck` is not meaningful because it is immediately inlined at type-checking).
+We also make `runtimeChecked` a transparent inline method. This ensures that the elaboration of the method defines its semantics. (i.e. `runtimeChecked` is not meaningful because it is immediately inlined at type-checking).
### Specification
@@ -113,7 +115,7 @@ import scala.annotation.internal.RuntimeCheck
object Predef:
extension [T](x: T)
- transparent inline def runtimeCheck: x.type =
+ transparent inline def runtimeChecked: x.type =
x: @RuntimeCheck
```
@@ -128,8 +130,8 @@ Considering backwards source compatibility, the following situation will change:
package example
extension (predef: scala.Predef.type)
- transparent inline def runtimeCheck[T](x: T): x.type =
- println("fake runtimeCheck")
+ transparent inline def runtimeChecked[T](x: T): x.type =
+ println("fake runtimeChecked")
x
```
```scala
@@ -138,16 +140,16 @@ package example
@main def Test =
val xs = List[Any](1,2,3)
- val y :: ys = Predef.runtimeCheck(xs)
+ val y :: ys = Predef.runtimeChecked(xs)
assert(ys == List(2, 3))
```
-Previously this code would print `fake runtimeCheck`, however with the proposed change then recompiling this code will _succeed_ and no longer will print.
+Previously this code would print `fake runtimeChecked`, however with the proposed change then recompiling this code will _succeed_ and no longer will print.
Potentially we could mitigate this if necessary with a migration warning when the new method is resolved (`@experimental` annotation would be a start)
-In general however, the new `runtimeCheck` method will not change any previously linking method without causing an ambiguity compilation error.
+In general however, the new `runtimeChecked` method will not change any previously linking method without causing an ambiguity compilation error.
### Other concerns
@@ -216,9 +218,9 @@ On line 2: warning: non-variable type argument Int in type pattern scala.collect
val res2: Int = 1
```
-#### Aligning to Scala 2.13 semantics with runtimeCheck
+#### Aligning to Scala 2.13 semantics with `runtimeChecked`
-with `xs.runtimeCheck` we should still produce an unchecked warning for `case is: ::[Int] =>`
+with `xs.runtimeChecked` we should still produce an unchecked warning for `case is: ::[Int] =>`
```scala
scala> xs.runtimeChecked match {
| case is: ::[Int] => is.head
@@ -239,15 +241,15 @@ scala> xs.runtimeChecked match {
| }
val res14: Int = 1
```
-This has a small extra migration cost because if the scrutinee changes from `(xs: @unchecked)` to `xs.runtimeCheck` now some individual cases might need to add `@unchecked` on type arguments to avoid creating new warnings - however this cost is offset by perhaps revealing unsafe patterns previously unaccounted for.
+This has a small extra migration cost because if the scrutinee changes from `(xs: @unchecked)` to `xs.runtimeChecked` now some individual cases might need to add `@unchecked` on type arguments to avoid creating new warnings - however this cost is offset by perhaps revealing unsafe patterns previously unaccounted for.
Once again `@nowarn` can be used to fully restore any old behavior
## Alternatives
-1) make `runtimeCheck` a method on `Any` that returns the receiver (not inline). The compiler would check for presence of a call to this method when deciding to perform static checking of pattern exhaustivity. This idea was criticised for being brittle with respect to refactoring, or automatic code transformations via macro.
+1) make `runtimeChecked` a method on `Any` that returns the receiver (not inline). The compiler would check for presence of a call to this method when deciding to perform static checking of pattern exhaustivity. This idea was criticised for being brittle with respect to refactoring, or automatic code transformations via macro.
-2) `runtimeCheck` should elaborate to code that matches the expected type, e.g. to heal `t: Any` to `Int` when the expected type is `Int`. The problem is that this is not useful for patterns that can not be runtime checked by type alone. Also, it implies a greater change to the spec, because now `runtimeCheck` would have to be specially treated.
+2) `runtimeChecked` should elaborate to code that matches the expected type, e.g. to heal `t: Any` to `Int` when the expected type is `Int`. The problem is that this is not useful for patterns that can not be runtime checked by type alone. Also, it implies a greater change to the spec, because now `runtimeChecked` would have to be specially treated.
## Related work
diff --git a/_sips/sips/named-tuples.md b/_sips/sips/058-named-tuples.md
similarity index 99%
rename from _sips/sips/named-tuples.md
rename to _sips/sips/058-named-tuples.md
index 431107cd14..01c1461c02 100644
--- a/_sips/sips/named-tuples.md
+++ b/_sips/sips/058-named-tuples.md
@@ -1,10 +1,11 @@
---
layout: sip
+number: 58
permalink: /sips/named-tuples.html
+presip-thread: https://contributors.scala-lang.org/t/pre-sip-named-tuples/6403/164
stage: completed
status: shipped
-presip-thread: https://contributors.scala-lang.org/t/pre-sip-named-tuples/6403/164
-title: SIP-58 - Named Tuples
+title: Named Tuples
---
**By: Martin Odersky**
@@ -382,7 +383,7 @@ This section should list prior work related to the proposal, notably:
- [SIP 43 on Pattern Matching with Named Fields](https://github.com/scala/improvement-proposals/pull/44)
-- [Experimental Implementation](https://github.com/scala/scala3/pull/19174)
+- [Experimental Implementation](https://github.com/lampepfl/dotty/pull/19174)
## FAQ
diff --git a/_sips/sips/multiple-assignments.md b/_sips/sips/059-multiple-assignments.md
similarity index 99%
rename from _sips/sips/multiple-assignments.md
rename to _sips/sips/059-multiple-assignments.md
index b55044b7d9..d0267f7826 100644
--- a/_sips/sips/multiple-assignments.md
+++ b/_sips/sips/059-multiple-assignments.md
@@ -1,10 +1,11 @@
---
layout: sip
+number: 59
permalink: /sips/:title.html
+presip-thread: https://contributors.scala-lang.org/t/pre-sip-multiple-assignments/6425
stage: implementation
status: under-review
-presip-thread: https://contributors.scala-lang.org/t/pre-sip-multiple-assignments/6425
-title: SIP-59 - Multiple Assignments
+title: Multiple Assignments
---
**By: Dimi Racordon**
diff --git a/_sips/sips/alternative-bind-variables.md b/_sips/sips/060-alternative-bind-variables.md
similarity index 98%
rename from _sips/sips/alternative-bind-variables.md
rename to _sips/sips/060-alternative-bind-variables.md
index ab6899a026..211ad8d41a 100644
--- a/_sips/sips/alternative-bind-variables.md
+++ b/_sips/sips/060-alternative-bind-variables.md
@@ -1,10 +1,11 @@
---
layout: sip
+number: 60
permalink: /sips/:title.html
+presip-thread: https://contributors.scala-lang.org/t/pre-sip-bind-variables-for-alternative-patterns/6321/13
stage: implementation
status: waiting-for-implementation
-presip-thread: https://contributors.scala-lang.org/t/pre-sip-bind-variables-for-alternative-patterns/6321/13
-title: SIP-60 - Bind variables within alternative patterns
+title: Bind variables within alternative patterns
---
**By: Yilin Wei**
@@ -317,7 +318,7 @@ The associated [thread](https://contributors.scala-lang.org/t/pre-sip-bind-varia
## Implementation
The author has a current in-progress implementation focused on the typer which compiles the examples with the expected types. Interested
- parties are welcome to see the WIP [here](https://github.com/scala/scala3/compare/main...yilinwei:dotty:main).
+ parties are welcome to see the WIP [here](https://github.com/lampepfl/dotty/compare/main...yilinwei:dotty:main).
### Further work
diff --git a/_sips/sips/unroll-default-arguments.md b/_sips/sips/061-unroll-default-arguments.md
similarity index 99%
rename from _sips/sips/unroll-default-arguments.md
rename to _sips/sips/061-unroll-default-arguments.md
index 6d90188b57..4674ccde86 100644
--- a/_sips/sips/unroll-default-arguments.md
+++ b/_sips/sips/061-unroll-default-arguments.md
@@ -1,9 +1,10 @@
---
layout: sip
+number: 61
permalink: /sips/:title.html
stage: implementation
status: under-review
-title: SIP-61 - Unroll Default Arguments for Binary Compatibility
+title: Unroll Default Arguments for Binary Compatibility
---
**By: Li Haoyi**
diff --git a/_sips/sips/better-fors.md b/_sips/sips/062-better-fors.md
similarity index 99%
rename from _sips/sips/better-fors.md
rename to _sips/sips/062-better-fors.md
index 10cfa733ea..a317f044ca 100644
--- a/_sips/sips/better-fors.md
+++ b/_sips/sips/062-better-fors.md
@@ -1,9 +1,10 @@
---
layout: sip
+number: 62
permalink: /sips/:title.html
stage: implementation
status: under-review
-title: SIP-62 - For comprehension improvements
+title: For comprehension improvements
---
**By: Kacper Korban (VirtusLab)**
@@ -472,9 +473,9 @@ The only Open community build library that failed because of the change to the d
## Links
1. Scala contributors discussion thread (pre-SIP): https://contributors.scala-lang.org/t/pre-sip-improve-for-comprehensions-functionality/3509/51
-2. Github issue discussion about for desugaring: https://github.com/scala/scala3/issues/2573
+2. Github issue discussion about for desugaring: https://github.com/lampepfl/dotty/issues/2573
3. Scala 2 implementation of some of the improvements: https://github.com/oleg-py/better-monadic-for
-4. Implementation of one of the simplifications: https://github.com/scala/scala3/pull/16703
+4. Implementation of one of the simplifications: https://github.com/lampepfl/dotty/pull/16703
5. Draft implementation branch: https://github.com/dotty-staging/dotty/tree/improved-fors
6. Minimized issue reproducing the problem with the current desugaring: https://github.com/scala/scala3/issues/21804
7. (empty :sad:) Contributors thread about better effect loops with for-comprehensions: https://contributors.scala-lang.org/t/pre-sip-sip-62-addition-proposal-better-effect-loops-with-for-comprehensions/6759
diff --git a/_sips/sips/typeclasses-syntax.md b/_sips/sips/064-typeclasses-syntax.md
similarity index 99%
rename from _sips/sips/typeclasses-syntax.md
rename to _sips/sips/064-typeclasses-syntax.md
index 38dcba9293..ec63bb4309 100644
--- a/_sips/sips/typeclasses-syntax.md
+++ b/_sips/sips/064-typeclasses-syntax.md
@@ -1,9 +1,11 @@
---
layout: sip
+number: 64
+permalink: /sips/:title.html
+presip-thread: https://contributors.scala-lang.org/t/pre-sip-improve-syntax-for-context-bounds-and-givens/6576/97
stage: completed
status: shipped
-presip-thread: https://contributors.scala-lang.org/t/pre-sip-improve-syntax-for-context-bounds-and-givens/6576/97
-title: SIP-64 - Improve Syntax for Context Bounds and Givens
+title: Improve Syntax for Context Bounds and Givens
---
**By: Martin Odersky**
diff --git a/_sips/sips/068-reference-package-objects.md b/_sips/sips/068-reference-package-objects.md
new file mode 100644
index 0000000000..62eedbdee4
--- /dev/null
+++ b/_sips/sips/068-reference-package-objects.md
@@ -0,0 +1,254 @@
+---
+layout: sip
+number: 68
+permalink: /sips/:title.html
+stage: completed
+status: shipped
+title: Reference-able Package Objects
+---
+
+**By: Li Haoyi**
+
+## History
+
+| Date | Version |
+|---------------|--------------------|
+| Dec 14th 2024 | Initial Draft |
+
+## Summary
+
+This proposal is to allow the following:
+
+```scala
+package a
+package object b
+
+val z = a.b // Currently fails with "package is not a value"
+```
+
+
+Currently the workaround is to use a `.package` suffix:
+
+```scala
+val z = a.b.`package`
+```
+
+This proposal is to make it such that given `a.b`, if `b` is a `package`
+containing a `package object`, expands to `a.b.package` automatically
+
+
+One limitation with `package object`s is that we cannot currently assign them to
+values: `a.b` fails to compile when `b` is a `package object`, even though it succeeds when
+`b` is a normal `object`. The workaround is to call `a.b.package`, which is ugly and
+non-obvious, or to use a normal `object`, which is not always possible. There is no other
+way to refer to the `package object b` in the example above.
+
+Allowing `a.b` to automatically expand into `a.b.package` when `b` is a
+`package object` will simplify the language, simplify IDE support for the
+language, and generally make things more uniform and regular.
+
+
+Prior Discussion can be found [here](https://contributors.scala-lang.org/t/pre-sip-reference-able-package-objects/6939)
+
+## Motivation
+
+Although package objects have been discussed [being dropped](https://docs.scala-lang.org/scala3/reference/dropped-features/package-objects.html)
+in Scala 3, no concrete plans have been made as to how to do so, and we argue that they
+are sufficiently useful that keeping them around is preferably to dropping them.
+
+### Package Entrypoints
+
+`package object`s are the natural "entry point" of a package. While top-level declarations
+reduce their need somewhat, they do not replace it: `package object`s are still necessary
+for adding package-level documentation or having the package-level API inherit from traits
+or classes. For example the [Acyclic Plugin](https://github.com/com-lihaoyi/acyclic) uses package
+objects as a place to put package-level annotations in source code to apply package-level
+semantics in the compiler plugin.
+
+Other languages have equivalent constructs (`module-info.java` or `__init__.py`)
+that fulfil the same need, so it's not just a quirk of the Scala language.
+
+### Package API Facades
+
+Many libraries use package objects to expose the "facade" of the package hierarchy:
+
+- Mill uses `package object`s to expose the build definitions within each `package`, and
+ each one is an instance of `mill.Module`
+
+- Requests-Scala uses a `package object` to represent the default `requests.BaseSession`
+ instance with the default configuration for people to use
+
+- PPrint uses a `package object` to expose the `pprint.log` and other APIs for people to use
+ directly, as a default instance of `PPrinter`
+
+- OS-Lib uses a `package object` to expose the primary API of the `os.*` operations
+
+None of these use cases can be satisfied by normal `object`s or by top-level declarations,
+due to the necessity of documentation and inheritance. They need to be `package object`s.
+
+However, the fact that you cannot easily pass around these default instances as values e.g.
+`val x: PPrinter = pprint` without calling `pprint.package` is a source of friction.
+
+### Uniform Semantics
+
+This source of friction is not just for humans, but for tools as well. For example, IntelliJ
+needs a special case and special handling in the Scala plugin specifically to support this irregularity:
+
+* Original irregularity https://github.com/JetBrains/intellij-scala/blob/idea242.x/scala/scala-impl/src/org/jetbrains/plugins/scala/lang/psi/impl/expr/ScReferenceExpressionImpl.scala#L198
+
+* Special casing to support Mill, which allows references to package objects https://github.com/JetBrains/intellij-scala/pull/672
+
+The fact that it is impossible to refer to the `package object` without using a `.package` suffix
+is a wart: `.package` is an implementation/encoding detail, and so should not be a necessary part
+of the user-facing language. We can refer to all other Scala definitions and objects without
+leaking implementation/encoding details, and it would be more uniform to allow that for
+`package object`s as well.
+
+
+## User Alternatives
+
+The two main alternatives now are to use `.package` suffixes, e.g. in Mill writing:
+
+```scala
+def moduleDeps = Seq(foo.`package`, bar.`package`, qux.baz.`package`)
+```
+
+Or to use normal `object`s. Notably, normal `object`s do not allow `package`s of the
+same name, which leads to contortions. e.g. Rather than:
+
+```scala
+package object foo extends _root_.foo.bar.Qux{
+ val bar = 1
+}
+```
+```scala
+package foo.bar
+class Qux
+```
+
+We need to move the `package foo` contents into `package foo2` to avoid conflicts with
+`object foo`, and then we need to add back aliases to all the declarations in `foo2` to make
+them available in `foo`:
+
+```scala
+object foo extends foo2.bar.Qux{
+ val bar = 1
+ object bar{
+ type Qux = foo2.bar.Qux
+ }
+}
+```
+```scala
+package foo2.bar
+class Qux
+```
+
+Both of these workarounds are awkward and non-idiomatic, but are necessary due to current
+limitations in referencing `package object`s directly
+
+Notably, normal `object`s are not a replacement for `package object`s, because only
+`package object`s allow the package contents to be defined in other files. Normal `object`s
+would require that the package contents be all defined in a single file in the `object` body,
+or scattered into other files as `trait`s in _different_ `package`s and mixed into the
+`object`, both of which are messy and sub-optimal.
+
+It's possible to have a convention _"the `object` named `foo` is always going to be the
+primary entrypoint for a package"_, but that is just a poor-man's `package object` with worse
+syntax and less standardization.
+
+## Implementation Alternatives
+
+* We could make `a.b` where `b` is a `package` refer to the entire `package b` namespace, not
+ just the `package object`. This cannot in general work due to the JVM's _open packages_ and
+ separate compilation: while `package object`s can only exist in one file present in one
+ compilation run, JVM `package`s can contain arbitrary sets of classes from different compilation
+ runs. Thus it is impossible in general to define a "complete" API for a JVM `package` for us to
+ generate an object to refer to.
+
+* Using Scala 3 [Top Level Definitions](https://docs.scala-lang.org/scala3/book/taste-toplevel-definitions.html)
+ is one possible alternative to `package object`s, but they fall short on many use cases:
+ * Top-level definitions cannot generate objects that inherit from classes or traits, which
+ is necessary in many use cases: Mill (needs them to inherit `mill.Module`), Requests-
+ Scala (needs it to inherit from `requests.BaseSession`), etc.
+ * Top-level definitions can be defined in multiple files, so suffer from the issue that
+ it is at any point in time impossible to know the "entire" API of a `package` provided
+ by top-level definitions
+ * Top-level definitions do not provide a natural "package entrypoint" to the `package` source folder,
+ to provide package-level documentation, annotations, etc.. We could provide another `.scala`
+ file that we specify by-convention to be the "package entrypoint", but we already have
+ `package.scala` and it does the job just fine
+
+
+## Limitations
+
+* With this proposal, `a.b.c` can be refactored to `val x = a.b; x.c` only when `c` is declared inside
+ the `a.b` package object. This is slightly more irregular than the status quo, which disallows such
+ a refactoring at any time. In general, a package with a package object no longer behaves the same
+ as a package without.
+
+## Open Questions
+
+There are some open questions that can be resolved during experimentation
+
+* Should package objects be usable as singleton type prefixes, e.g. `type foo == scala.type`?
+* Should package objects participate in `foo() -> foo.apply()` desugaring, e.g. `_root_.pprint(124)`?
+*
+
+## Implementation & Testing
+
+
+Mill since version 0.12.0 already emulates this proposed behavior in Scala 2 using source-code
+mangling hacks, with custom support in IntelliJ. It works great and does what it was intended
+to do (allow passing around `package object`s as values without having to call `.package` every time)
+
+We have a prototype Scala3 implementation here:
+
+* https://github.com/scala/scala3/pull/22011
+
+The necessary IntelliJ changes have been made below:
+
+* https://github.com/JetBrains/intellij-scala/pull/672
+
+With IntelliJ-side discussion:
+
+* https://youtrack.jetbrains.com/issue/SCL-23198/Direct-references-to-package-objects-should-be-allowed-in-.mill-files
+
+These IntelliJ changes are currently guarded to only apply to `.mill` files, but the
+guard can easily be removed to make it apply to any Scala files. In fact, implementing
+this proposal would involve _removing_ a considerable amount of special casing from
+the Intellij-Scala plugin, resulting in the code analysis for looking up references in
+the Scala language to become much more regular and straightforward:
+
+```diff
+lihaoyi intellij-scala$ git diff
+diff --git a/scala/scala-impl/src/org/jetbrains/plugins/scala/lang/psi/impl/expr/ScReferenceExpressionImpl.scala b/scala/scala-impl/src/org/jetbrains/plugins/scala/lang/psi/impl/expr/ScReferenceExpressionImpl.scala
+index b820dff8c3..29ba15bcdd 100644
+--- a/scala/scala-impl/src/org/jetbrains/plugins/scala/lang/psi/impl/expr/ScReferenceExpressionImpl.scala
++++ b/scala/scala-impl/src/org/jetbrains/plugins/scala/lang/psi/impl/expr/ScReferenceExpressionImpl.scala
+@@ -182,24 +182,7 @@ class ScReferenceExpressionImpl(node: ASTNode) extends ScReferenceImpl(node) wit
+ })
+
+ override def getKinds(incomplete: Boolean, completion: Boolean = false): _root_.org.jetbrains.plugins.scala.lang.resolve.ResolveTargets.ValueSet = {
+- val context = getContext
+- context match {
+- case _ if completion =>
+- StdKinds.refExprQualRef // SCL-3092
+- case _: ScReferenceExpression =>
+- StdKinds.refExprQualRef
+- case postf: ScPostfixExpr if this == postf.operation || this == postf.getBaseExpr =>
+- StdKinds.refExprQualRef
+- case pref: ScPrefixExpr if this == pref.operation || this == pref.getBaseExpr =>
+- StdKinds.refExprQualRef
+- case inf: ScInfixExpr if this == inf.operation || this == inf.getBaseExpr =>
+- StdKinds.refExprQualRef
+- case _ =>
+- // Mill files allow direct references to package
+- // objects, even though normal .scala files do not
+- if (this.containingScalaFile.exists(_.isMillFile)) StdKinds.refExprQualRef
+- else StdKinds.refExprLastRef
+- }
++ StdKinds.refExprQualRef
+ }
+
+ override def multiType: Array[TypeResult] = {
+```
diff --git a/_sips/sips/adding-prefix-types.md b/_sips/sips/adding-prefix-types.md
deleted file mode 100644
index 611baff9c0..0000000000
--- a/_sips/sips/adding-prefix-types.md
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: SIP-36 - Adding prefix types
-status: withdrawn
-pull-request-number: 35
-
----
diff --git a/_sips/sips/allow-referring-to-other-arguments-in-default-parameters.md b/_sips/sips/allow-referring-to-other-arguments-in-default-parameters.md
deleted file mode 100644
index 9eaec18d7b..0000000000
--- a/_sips/sips/allow-referring-to-other-arguments-in-default-parameters.md
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: SIP-32 - Allow referring to other arguments in default parameters
-status: rejected
-pull-request-number: 29
-
----
diff --git a/_sips/sips/async.md b/_sips/sips/async.md
deleted file mode 100644
index 49448af0cb..0000000000
--- a/_sips/sips/async.md
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: SIP-22 - Async
-status: withdrawn
-pull-request-number: 21
-
----
diff --git a/_sips/sips/comonadic-comprehensions.md b/_sips/sips/comonadic-comprehensions.md
deleted file mode 100644
index d668fc4d78..0000000000
--- a/_sips/sips/comonadic-comprehensions.md
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: SIP-NN - comonadic-comprehensions
-status: rejected
-pull-request-number: 32
-
----
diff --git a/_sips/sips/concurrency-with-higher-order-coroutines.md b/_sips/sips/concurrency-with-higher-order-coroutines.md
deleted file mode 100644
index 837df46236..0000000000
--- a/_sips/sips/concurrency-with-higher-order-coroutines.md
+++ /dev/null
@@ -1,7 +0,0 @@
----
-title: SIP-55 - Concurrency with Higher-Order Coroutines
-status: under-review
-pull-request-number: 63
-stage: design
-
----
diff --git a/_sips/sips/curried-varargs.md b/_sips/sips/curried-varargs.md
deleted file mode 100644
index 402630e152..0000000000
--- a/_sips/sips/curried-varargs.md
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: SIP-45 - Curried varargs
-status: rejected
-pull-request-number: 41
-
----
diff --git a/_sips/sips/eference-able-package-objects.md b/_sips/sips/eference-able-package-objects.md
deleted file mode 100644
index cfba956529..0000000000
--- a/_sips/sips/eference-able-package-objects.md
+++ /dev/null
@@ -1,7 +0,0 @@
----
-title: 'SIP-68: Reference-able Package Objects'
-status: under-review
-pull-request-number: 100
-stage: implementation
-
----
diff --git a/_sips/sips/implicit-macro-conversions.md b/_sips/sips/implicit-macro-conversions.md
deleted file mode 100644
index 82e7ab2ff5..0000000000
--- a/_sips/sips/implicit-macro-conversions.md
+++ /dev/null
@@ -1,7 +0,0 @@
----
-title: SIP-66 - Implicit macro conversions
-status: under-review
-pull-request-number: 86
-stage: design
-
----
diff --git a/_sips/sips/implicit-source-locations.md b/_sips/sips/implicit-source-locations.md
deleted file mode 100644
index a51a574f5d..0000000000
--- a/_sips/sips/implicit-source-locations.md
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: SIP-19 - Implicit Source Locations
-status: rejected
-pull-request-number: 18
-
----
diff --git a/_sips/sips/improve-strictequality-feature-for-better-compatibility-with-existing-code-bases.md b/_sips/sips/improve-strictequality-feature-for-better-compatibility-with-existing-code-bases.md
deleted file mode 100644
index 29276bba12..0000000000
--- a/_sips/sips/improve-strictequality-feature-for-better-compatibility-with-existing-code-bases.md
+++ /dev/null
@@ -1,8 +0,0 @@
----
-title: SIP-67 - Improve strictEquality feature for better compatibility with existing
- code bases
-status: waiting-for-implementation
-pull-request-number: 97
-stage: implementation
-
----
diff --git a/_sips/sips/improved-lazy-vals-initialization.md b/_sips/sips/improved-lazy-vals-initialization.md
deleted file mode 100644
index efb891962b..0000000000
--- a/_sips/sips/improved-lazy-vals-initialization.md
+++ /dev/null
@@ -1,7 +0,0 @@
----
-title: SIP-20 - Improved Lazy Vals Initialization
-status: shipped
-pull-request-number: 19
-stage: completed
-
----
diff --git a/_sips/sips/improving-binary-compatibility-with-stableabi.md b/_sips/sips/improving-binary-compatibility-with-stableabi.md
deleted file mode 100644
index 6e48e46553..0000000000
--- a/_sips/sips/improving-binary-compatibility-with-stableabi.md
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: SIP-34 - Improving binary compatibility with @stableABI
-status: withdrawn
-pull-request-number: 30
-
----
diff --git a/_sips/sips/inline-meta.md b/_sips/sips/inline-meta.md
deleted file mode 100644
index c27ee3530a..0000000000
--- a/_sips/sips/inline-meta.md
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: SIP-28 - Inline meta
-status: withdrawn
-pull-request-number: 28
-
----
diff --git a/_sips/sips/name-based-xml-literals.md b/_sips/sips/name-based-xml-literals.md
deleted file mode 100644
index 1b3e699b01..0000000000
--- a/_sips/sips/name-based-xml-literals.md
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: SIP-40 - Name Based XML Literals
-status: rejected
-pull-request-number: 42
-
----
diff --git a/_sips/sips/pattern-matching-with-named-fields.md b/_sips/sips/pattern-matching-with-named-fields.md
deleted file mode 100644
index c1c304a61f..0000000000
--- a/_sips/sips/pattern-matching-with-named-fields.md
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: SIP-43 - Pattern matching with named fields
-status: withdrawn
-pull-request-number: 44
-
----
diff --git a/_sips/sips/precise-type-modifier.md b/_sips/sips/precise-type-modifier.md
deleted file mode 100644
index 9c316bbd8c..0000000000
--- a/_sips/sips/precise-type-modifier.md
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: SIP-48 - Precise Type Modifier
-status: withdrawn
-pull-request-number: 48
-
----
diff --git a/_sips/sips/repeated-by-name-parameters.md b/_sips/sips/repeated-by-name-parameters.md
deleted file mode 100644
index 6949fcf87c..0000000000
--- a/_sips/sips/repeated-by-name-parameters.md
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: SIP-24 - Repeated By Name Parameters
-status: withdrawn
-pull-request-number: 23
-
----
diff --git a/_sips/sips/scala-3-macro-annotations.md b/_sips/sips/scala-3-macro-annotations.md
deleted file mode 100644
index 497a56896e..0000000000
--- a/_sips/sips/scala-3-macro-annotations.md
+++ /dev/null
@@ -1,7 +0,0 @@
----
-title: SIP-63 - Scala 3 Macro Annotations
-status: under-review
-pull-request-number: 80
-stage: design
-
----
diff --git a/_sips/sips/sealed-types.md b/_sips/sips/sealed-types.md
deleted file mode 100644
index 04754c6be7..0000000000
--- a/_sips/sips/sealed-types.md
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: SIP-41 - Sealed Types
-status: withdrawn
-pull-request-number: 43
-
----
diff --git a/_sips/sips/self-cleaning-macros.md b/_sips/sips/self-cleaning-macros.md
deleted file mode 100644
index 056a674a38..0000000000
--- a/_sips/sips/self-cleaning-macros.md
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: SIP-16 - Self-cleaning Macros
-status: rejected
-pull-request-number: 15
-
----
diff --git a/_sips/sips/spores.md b/_sips/sips/spores.md
deleted file mode 100644
index 2b9c51d5a3..0000000000
--- a/_sips/sips/spores.md
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: SIP-21 - Spores
-status: withdrawn
-pull-request-number: 20
-
----
diff --git a/_sips/sips/struct-classes.md b/_sips/sips/struct-classes.md
deleted file mode 100644
index a9109fd45b..0000000000
--- a/_sips/sips/struct-classes.md
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: SIP-50 - Struct Classes
-status: withdrawn
-pull-request-number: 50
-
----
diff --git a/_sips/sips/uncluttering-abuse-of-match.md b/_sips/sips/uncluttering-abuse-of-match.md
deleted file mode 100644
index 49f004f812..0000000000
--- a/_sips/sips/uncluttering-abuse-of-match.md
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: SIP-39 - Uncluttering Abuse of Match
-status: rejected
-pull-request-number: 37
-
----
diff --git a/_sips/sips/uncluttering-scalas-syntax-for-control-structures.md b/_sips/sips/uncluttering-scalas-syntax-for-control-structures.md
deleted file mode 100644
index a4c9d95a95..0000000000
--- a/_sips/sips/uncluttering-scalas-syntax-for-control-structures.md
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: SIP-12 - Uncluttering Scala’s syntax for control structures.
-status: rejected
-pull-request-number: 12
-
----
diff --git a/_sips/sips/unsigned-integers.md b/_sips/sips/unsigned-integers.md
deleted file mode 100644
index 4cfa9995db..0000000000
--- a/_sips/sips/unsigned-integers.md
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: SIP-26 - Unsigned Integers
-status: rejected
-pull-request-number: 27
-
----
diff --git a/_sips/sips/wildcard-context-bounds.md b/_sips/sips/wildcard-context-bounds.md
deleted file mode 100644
index 7ef71f1f61..0000000000
--- a/_sips/sips/wildcard-context-bounds.md
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: SIP-52 - Wildcard context bounds
-status: withdrawn
-pull-request-number: 55
-
----
diff --git a/_sips/sips/xistential-containers.md b/_sips/sips/xistential-containers.md
deleted file mode 100644
index a3f4764c3e..0000000000
--- a/_sips/sips/xistential-containers.md
+++ /dev/null
@@ -1,7 +0,0 @@
----
-title: 'SIP-69: Existential containers'
-status: under-review
-pull-request-number: 101
-stage: design
-
----
diff --git a/_zh-cn/overviews/scala3-book/string-interpolation.md b/_zh-cn/overviews/scala3-book/string-interpolation.md
index 372eccc5e0..c09fed715e 100644
--- a/_zh-cn/overviews/scala3-book/string-interpolation.md
+++ b/_zh-cn/overviews/scala3-book/string-interpolation.md
@@ -353,4 +353,4 @@ p"${x/5}, $x" // Point(2.4, 12.0)
[java-format-docs]: https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Formatter.html#detail
[value-classes]: {% link _overviews/core/value-classes.md %}
-[sip-11]: {% link _sips/sips/string-interpolation.md %}
+[sip-11]: {% link _sips/sips/011-string-interpolation.md %}
diff --git a/api/all.md b/api/all.md
index b5dfde2f05..a655d74c1b 100644
--- a/api/all.md
+++ b/api/all.md
@@ -12,10 +12,10 @@ redirect_from:
* [Library API](https://www.scala-lang.org/api/{{site.scala-3-version}}/)
* Scala 3.3.7 LTS
* [Library API](https://www.scala-lang.org/api/3.3.7/)
-* Scala 2.13.17
- * [Library API](https://www.scala-lang.org/api/2.13.17/)
- * [Compiler API](https://www.scala-lang.org/api/2.13.17/scala-compiler/scala/)
- * [Reflection API](https://www.scala-lang.org/api/2.13.17/scala-reflect/scala/reflect/)
+* Scala 2.13.18
+ * [Library API](https://www.scala-lang.org/api/2.13.18/)
+ * [Compiler API](https://www.scala-lang.org/api/2.13.18/scala-compiler/scala/)
+ * [Reflection API](https://www.scala-lang.org/api/2.13.18/scala-reflect/scala/reflect/)
* Scala 2.12.20
* [Library API](https://www.scala-lang.org/api/2.12.20/)
* [Compiler API](https://www.scala-lang.org/api/2.12.20/scala-compiler/scala/)
@@ -64,6 +64,8 @@ https://scala-ci.typesafe.com/artifactory/scala-integration/org/scala-lang/
## Previous releases
+* Scala 3.7.3
+ * [Library API](https://www.scala-lang.org/api/3.7.3/)
* Scala 3.7.2
* [Library API](https://www.scala-lang.org/api/3.7.2/)
* Scala 3.7.1
@@ -122,6 +124,10 @@ https://scala-ci.typesafe.com/artifactory/scala-integration/org/scala-lang/
* [Library API](https://www.scala-lang.org/api/3.0.1/)
* Scala 3.0.0
* [Library API](https://www.scala-lang.org/api/3.0.0/)
+* Scala 2.13.17
+ * [Library API](https://www.scala-lang.org/api/2.13.17/)
+ * [Compiler API](https://www.scala-lang.org/api/2.13.17/scala-compiler/scala/)
+ * [Reflection API](https://www.scala-lang.org/api/2.13.17/scala-reflect/scala/reflect/)
* Scala 2.13.16
* [Library API](https://www.scala-lang.org/api/2.13.16/)
* [Compiler API](https://www.scala-lang.org/api/2.13.16/scala-compiler/scala/)
diff --git a/resources/css/highlightjs.css b/resources/css/highlightjs.css
index 1db8a26ed4..acbdceed9d 100644
--- a/resources/css/highlightjs.css
+++ b/resources/css/highlightjs.css
@@ -5,7 +5,7 @@ github.com style (c) Vasily Polovnyov
*/
.hljs {
- font-family: 'Consolas';
+ font-family: 'Inconsolata';
display: block;
overflow-x: auto;
padding: 0.5em;
diff --git a/resources/css/monospace.css b/resources/css/monospace.css
index 67e622e269..661410f641 100644
--- a/resources/css/monospace.css
+++ b/resources/css/monospace.css
@@ -2,41 +2,29 @@
---
@font-face {
- font-family: 'Consolas';
- src: url('{{ site.baseurl }}/resources/glyphs/Consolas.eot');
- src: url('{{ site.baseurl }}/resources/glyphs/Consolas.eot?#iefix') format('embedded-opentype'),
- url('{{ site.baseurl }}/resources/glyphs/Consolas.woff') format('woff'),
- url('{{ site.baseurl }}/resources/glyphs/Consolas.ttf') format('truetype');
+ font-family: 'Inconsolata';
+ src:url('{{ site.baseurl }}/resources/glyphs/Inconsolata_SemiExpanded-SemiBold.ttf') format('truetype');
font-weight: normal;
font-style: normal;
}
@font-face {
- font-family: 'Consolas';
- src: url('{{ site.baseurl }}/resources/glyphs/Consolas-BoldItalic.eot');
- src: url('{{ site.baseurl }}/resources/glyphs/Consolas-BoldItalic.eot?#iefix') format('embedded-opentype'),
- url('{{ site.baseurl }}/resources/glyphs/Consolas-BoldItalic.woff') format('woff'),
- url('{{ site.baseurl }}/resources/glyphs/Consolas-BoldItalic.ttf') format('truetype');
+ font-family: 'Inconsolata';
+ src: url('{{ site.baseurl }}/resources/glyphs/Inconsolata_SemiExpanded-Bold.ttf') format('truetype');
font-weight: bold;
font-style: italic;
}
@font-face {
- font-family: 'Consolas';
- src: url('{{ site.baseurl }}/resources/glyphs/Consolas-Italic.eot');
- src: url('{{ site.baseurl }}/resources/glyphs/Consolas-Italic.eot?#iefix') format('embedded-opentype'),
- url('{{ site.baseurl }}/resources/glyphs/Consolas-Italic.woff') format('woff'),
- url('{{ site.baseurl }}/resources/glyphs/Consolas-Italic.ttf') format('truetype');
+ font-family: 'Inconsolata';
+ src: url('{{ site.baseurl }}/resources/glyphs/Inconsolata_SemiExpanded-SemiBold.ttf') format('truetype');
font-weight: normal;
font-style: italic;
}
@font-face {
- font-family: 'Consolas';
- src: url('{{ site.baseurl }}/resources/glyphs/Consolas-Bold.eot');
- src: url('{{ site.baseurl }}/resources/glyphs/Consolas-Bold.eot?#iefix') format('embedded-opentype'),
- url('{{ site.baseurl }}/resources/glyphs/Consolas-Bold.woff') format('woff'),
- url('{{ site.baseurl }}/resources/glyphs/Consolas-Bold.ttf') format('truetype');
+ font-family: 'Inconsolata';
+ src: url('{{ site.baseurl }}/resources/glyphs/Inconsolata_SemiExpanded-Bold.ttf') format('truetype');
font-weight: bold;
font-style: normal;
}
diff --git a/resources/glyphs/Consolas-Bold.eot b/resources/glyphs/Consolas-Bold.eot
deleted file mode 100644
index 1981119648..0000000000
Binary files a/resources/glyphs/Consolas-Bold.eot and /dev/null differ
diff --git a/resources/glyphs/Consolas-Bold.ttf b/resources/glyphs/Consolas-Bold.ttf
deleted file mode 100644
index 231576b0e9..0000000000
Binary files a/resources/glyphs/Consolas-Bold.ttf and /dev/null differ
diff --git a/resources/glyphs/Consolas-Bold.woff b/resources/glyphs/Consolas-Bold.woff
deleted file mode 100644
index 1899dbd063..0000000000
Binary files a/resources/glyphs/Consolas-Bold.woff and /dev/null differ
diff --git a/resources/glyphs/Consolas-BoldItalic.eot b/resources/glyphs/Consolas-BoldItalic.eot
deleted file mode 100644
index 107dc0bef7..0000000000
Binary files a/resources/glyphs/Consolas-BoldItalic.eot and /dev/null differ
diff --git a/resources/glyphs/Consolas-BoldItalic.ttf b/resources/glyphs/Consolas-BoldItalic.ttf
deleted file mode 100644
index 2a98047bd3..0000000000
Binary files a/resources/glyphs/Consolas-BoldItalic.ttf and /dev/null differ
diff --git a/resources/glyphs/Consolas-BoldItalic.woff b/resources/glyphs/Consolas-BoldItalic.woff
deleted file mode 100644
index 828c0282dc..0000000000
Binary files a/resources/glyphs/Consolas-BoldItalic.woff and /dev/null differ
diff --git a/resources/glyphs/Consolas-Italic.eot b/resources/glyphs/Consolas-Italic.eot
deleted file mode 100644
index deeed93678..0000000000
Binary files a/resources/glyphs/Consolas-Italic.eot and /dev/null differ
diff --git a/resources/glyphs/Consolas-Italic.ttf b/resources/glyphs/Consolas-Italic.ttf
deleted file mode 100644
index 9966bed49f..0000000000
Binary files a/resources/glyphs/Consolas-Italic.ttf and /dev/null differ
diff --git a/resources/glyphs/Consolas-Italic.woff b/resources/glyphs/Consolas-Italic.woff
deleted file mode 100644
index 9828b0da82..0000000000
Binary files a/resources/glyphs/Consolas-Italic.woff and /dev/null differ
diff --git a/resources/glyphs/Consolas.eot b/resources/glyphs/Consolas.eot
deleted file mode 100644
index 3506f34f1e..0000000000
Binary files a/resources/glyphs/Consolas.eot and /dev/null differ
diff --git a/resources/glyphs/Consolas.ttf b/resources/glyphs/Consolas.ttf
deleted file mode 100644
index 743cbfaf1a..0000000000
Binary files a/resources/glyphs/Consolas.ttf and /dev/null differ
diff --git a/resources/glyphs/Consolas.woff b/resources/glyphs/Consolas.woff
deleted file mode 100644
index 6078102f80..0000000000
Binary files a/resources/glyphs/Consolas.woff and /dev/null differ
diff --git a/resources/glyphs/Inconsolata_SemiExpanded-Bold.ttf b/resources/glyphs/Inconsolata_SemiExpanded-Bold.ttf
new file mode 100644
index 0000000000..7e9e39ac34
Binary files /dev/null and b/resources/glyphs/Inconsolata_SemiExpanded-Bold.ttf differ
diff --git a/resources/glyphs/Inconsolata_SemiExpanded-SemiBold.ttf b/resources/glyphs/Inconsolata_SemiExpanded-SemiBold.ttf
new file mode 100644
index 0000000000..6036377d37
Binary files /dev/null and b/resources/glyphs/Inconsolata_SemiExpanded-SemiBold.ttf differ
diff --git a/resources/images/scala3-book/hierarchy.dot b/resources/images/scala3-book/hierarchy.dot
index 24e6c2a896..d6e1ff8783 100644
--- a/resources/images/scala3-book/hierarchy.dot
+++ b/resources/images/scala3-book/hierarchy.dot
@@ -1,7 +1,7 @@
digraph unix {
rankdir = BT;
size="6,6";
- node [color=lightblue2, style=filled, fontname="Consolas"];
+ node [color=lightblue2, style=filled, fontname="Inconsolata"];
{rank=same; "AnyVal"; "AnyRef / Object"}
diff --git a/resources/images/scala3-book/hierarchy.svg b/resources/images/scala3-book/hierarchy.svg
index 013848749e..5f83fcf2b8 100644
--- a/resources/images/scala3-book/hierarchy.svg
+++ b/resources/images/scala3-book/hierarchy.svg
@@ -13,13 +13,13 @@
AnyVal
-AnyVal
+AnyVal
Matchable
-Matchable
+Matchable
@@ -31,7 +31,7 @@
AnyRef / Object
-AnyRef / Object
+AnyRef / Object
@@ -43,7 +43,7 @@
Unit
-Unit
+Unit
@@ -55,7 +55,7 @@
Boolean
-Boolean
+Boolean
@@ -67,7 +67,7 @@
Int
-Int
+Int
@@ -79,7 +79,7 @@
... (value types)
-... (value types)
+... (value types)
@@ -91,7 +91,7 @@
String
-String
+String
@@ -103,7 +103,7 @@
List[Int]
-List[Int]
+List[Int]
@@ -115,7 +115,7 @@
... (reference types)
-... (reference types)
+... (reference types)
@@ -127,7 +127,7 @@
Any
-Any
+Any
@@ -139,7 +139,7 @@
Null
-Null
+Null
@@ -163,7 +163,7 @@
Nothing
-Nothing
+Nothing
diff --git a/scripts/run-mdoc.sh b/scripts/run-mdoc.sh
index 80e431cd42..11228c4ea8 100755
--- a/scripts/run-mdoc.sh
+++ b/scripts/run-mdoc.sh
@@ -1,14 +1,14 @@
#!/bin/bash
set -eux
-cs launch --scala-version 2.13.17 org.scalameta::mdoc:2.3.3 -- \
+cs launch --scala-version 2.13.18 org.scalameta::mdoc:2.3.3 -- \
--in . \
--out /tmp/mdoc-out/ \
--classpath \
- $(cs fetch --scala-version 2.13.17 -p \
+ $(cs fetch --scala-version 2.13.18 -p \
com.chuusai::shapeless:2.3.10 \
- org.scala-lang::toolkit:0.1.7 \
- org.scala-lang::toolkit-test:0.1.7 \
+ org.scala-lang::toolkit:0.7.0 \
+ org.scala-lang::toolkit-test:0.7.0 \
) \
--scalac-options "-Xfatal-warnings -feature" \
--no-link-hygiene \