The release announcement sketch that I have so far is below. Please
mail me new items and/or edits.
Please phrase announcements using complete sentences and avoid the
word "now".
----------------------------------------------------------------------
Racket 9.2 uses Unicode 17.0 for character and string operations.
Typed Racket has repaired the types of asin and acos. This may
cause existing programs not to type check.
This release includes internal support for a more static "ffi2" FFI
(to be used in a future package).
The terminal-file-position function counts bytes written to ports
connected to a terminal, such as stdin and stderr.
The match form rejects non-linear patterns with mismatched
ellipsis depth.
Cross-phase persistent modules allow more types of quoted data.
The #%foreign-inline core syntactic form provides unsafe access to
facilities provided at the linklet layer by a Racket
implementation.
The implementations of member, memw, when, unless, let/ec,
and cond are rewritten to use only racket/kernel syntax
The impersonator-property-predicate-procedure? function identifies
procedures created by make-impersonator-property.
Polymorphic Struct types are printed using type arguments (e.g., (Array Byte)) rather than exposing an internal representation.
The stepper's display of numbers better matches the language
settings.
Scribble documents that do not use the Racket-manual style get an initial-scale of 1.0, instead of the manual style's 0.8, but this
can be configured using the initial-scale property.
By default, margin notes appear inline for narrow displays in all
styles, not just in the Racket-manual style.
Big-bang programs distributed as .dmg files correctly handle the close-on-stop feature.
There are many other repairs and documentation improvements!
These are what the links are expected to be. I took the links from Racket changing pre-release to docs and removing doc/ to get what I believe will be the correct address when the upgrade is published.
Racket 9.2 uses Unicode 17.0 for character and string operations.
Typed Racket has repaired the types of asin and acos. This may
cause existing programs not to type check.
This release includes internal support for a more static "ffi2" FFI
(to be used in a future package).
The terminal-file-position function counts bytes written to ports
connected to a terminal, such as stdin and stderr.
The match form rejects non-linear patterns with mismatched
ellipsis depth.
Cross-phase persistent modules allow more types of quoted data.
The #%foreign-inline core syntactic form provides unsafe access to
facilities provided at the linklet layer by a Racket
implementation.
The implementations of member, memw, when, unless, let/ec,
and cond are rewritten to use only racket/kernel syntax
Polymorphic Struct types are printed using type arguments (e.g., (Array Byte)) rather than exposing an internal representation.
The Stepper's display of numbers better matches the language
settings.
Scribble documents that do not use the Racket-manual style get an initial-scale of 1.0, instead of the manual style's 0.8, but this
can be configured using the initial-scale property.
By default, margin notes appear inline for narrow displays in all
styles, not just in the Racket-manual style.
Big-bang programs distributed as .dmg files correctly handle the close-on-stop feature.
- Racket 9.2 uses Unicode 17.0 for character and string operations.
- Typed Racket has repaired the types of `asin` and `acos`. This may
cause existing programs not to type check.
- This release includes internal support for a more static "ffi2" FFI
(to be used in a future package).
- The [`terminal-file-position`](https://docs.racket-lang.org/reference/port-buffers.html#%28def._%28%28quote._~23~25kernel%29._terminal-file-position%29%29) function counts bytes written to ports
connected to a terminal, such as `stdin` and `stderr`.
- The [`match`](https://docs.racket-lang.org/reference/match.html#%28form._%28%28lib._racket%2Fmatch..rkt%29._match%29%29) form rejects non-linear patterns with mismatched
ellipsis depth.
- Cross-phase persistent modules allow more types of `quote`d data.
- The [`#%foreign-inline`](https://docs.racket-lang.org/reference/foreign-inline.html#%28form._%28%28quote._~23~25kernel%29._~23~25foreign-inline%29%29) core syntactic form provides unsafe access to
facilities provided at the linklet layer by a Racket
implementation.
- The implementations of `member`, `memw`, `when`, `unless`, `let/ec`,
and `cond` are rewritten to use only [racket/kernel](https://docs.racket-lang.org/reference/Kernel_Forms_and_Functions.html) syntax
- The [`impersonator-property-predicate-procedure?`](https://docs.racket-lang.org/reference/chaperones.html#%28def._%28%28quote._~23~25kernel%29._impersonator-property-predicate-procedure~3f%29%29) function identifies
procedures created by `make-impersonator-property`.
- Polymorphic Struct types are printed using type arguments (e.g., `
(Array Byte)`) rather than exposing an internal representation.
- [The Stepper](https://docs.racket-lang.org/stepper/index.html)'s display of numbers better matches the language
settings.
- [Scribble](https://docs.racket-lang.org/scribble/index.html) documents that do not use the Racket-manual style get an
`initial-scale` of 1.0, instead of the manual style's 0.8, but this
can be configured using the `initial-scale` property.
- By default, margin notes appear inline for narrow displays in all
styles, not just in the Racket-manual style.
- [Big-bang](https://docs.racket-lang.org/teachpack/2htdpuniverse.html) programs distributed as .dmg files correctly handle the
`close-on-stop` feature.
- Racket 9.2 uses Unicode 17.0 for character and string operations.
- Typed Racket has repaired the types of `asin` and `acos`. This may
cause existing programs not to type check.
- This release includes internal support for a more static "ffi2" FFI
(to be used in a future package).
- The [`terminal-file-position`](https://docs.racket-lang.org/reference/port-buffers.html#%28def._%28%28quote._~23~25kernel%29._terminal-file-position%29%29) function counts bytes written to ports
connected to a terminal, such as `stdin` and `stderr`.
- The [`match`](https://docs.racket-lang.org/reference/match.html#%28form._%28%28lib._racket%2Fmatch..rkt%29._match%29%29) form rejects non-linear patterns with mismatched
ellipsis depth.
- Cross-phase persistent modules allow more types of `quote`d data.
- The [`#%foreign-inline`](https://docs.racket-lang.org/reference/foreign-inline.html#%28form._%28%28quote._~23~25kernel%29._~23~25foreign-inline%29%29) core syntactic form provides unsafe access to
facilities provided at the linklet layer by a Racket
implementation.
- The implementations of `member`, `memw`, `when`, `unless`, `let/ec`,
and `cond` are rewritten to use only [racket/kernel](https://docs.racket-lang.org/reference/Kernel_Forms_and_Functions.html) syntax
- The [`impersonator-property-predicate-procedure?`](https://docs.racket-lang.org/reference/chaperones.html#%28def._%28%28quote._~23~25kernel%29._impersonator-property-predicate-procedure~3f%29%29) function identifies
procedures created by `make-impersonator-property`.
- In Typed Racket, polymorphic `Struct` types are printed using type arguments (e.g., `
(Array Byte)`) rather than exposing an internal representation.
- [The Stepper](https://docs.racket-lang.org/stepper/index.html)'s display of numbers better matches the language
settings.
- [Scribble](https://docs.racket-lang.org/scribble/index.html) documents that do not use the Racket-manual style get an
`initial-scale` of 1.0, instead of the manual style's 0.8, but this
can be configured using the `initial-scale` property.
- By default, margin notes appear inline for narrow displays in all
styles, not just in the Racket-manual style.
- [Big-bang](https://docs.racket-lang.org/teachpack/2htdpuniverse.html) programs distributed as .dmg files correctly handle the
`close-on-stop` feature.
Perhaps also for the match change say something? (Not sure what on this one but perhaps a link to the issue? Something like "A potentially backwards-incompatible change, see [link] for details"?
- The [`match`](https://docs.racket-lang.org/reference/match.html#%28form._%28%28lib._racket%2Fmatch..rkt%29._match%29%29) form rejects non-linear patterns with mismatched
ellipsis depth. A potentially backwards-incompatible change, see [commit c42ebbf](https://github.com/racket/racket/commit/c42ebbf7bd761e843de77a8311dc3c3b4faa5bdd) for details.
match actually checks that when non-linear patterns (patterns where the same variable is used multiple times) are used with ..., the two parts of the matched value actually are equal. Additionally, match rejects non-linear patterns where one use of the variable is used with ... and another is not.
Typed Racket's types for the asin and acos procedures correctly handle situations where the function produces a complex number, avoid unsound result that were previously possible.
I've incorporated changes from @samth and @LiberalArtist , but taken certain liberties. Specifically, I lifted and tagged the two bullets that could potentially break existing code. @spdegabrielle , I have not yet incorporated your links, my apologies, I'll get to this. (Alternately, if you feel like navigating my oh-my-Lord-yet-another-custom-language format for release-notes.rkt, you're welcome to add them there.... )
Typed Racket's types for the asin and acos procedures correctly
handle situations where the function produces a complex number,
avoiding unsound results that were previously possible. This repair
could cause existing code to fail.
The updated match form checks that when non-linear patterns
(patterns where the same variable is used multiple times) are used
with ..., the two parts of the matched value actually are equal.
Additionally, match rejects non-linear patterns where one use of the
variable is used with ... and another is not. This repair could
cause existing code to fail.
Racket 9.2 uses Unicode 17.0 for character and string operations.
This release includes internal support for a more static "ffi2" FFI
(to be used in a future package).
The terminal-file-position function counts bytes written to ports
connected to a terminal, such as stdin and stderr.
Cross-phase persistent modules allow more types of quoted data.
The #%foreign-inline core syntactic form provides unsafe access to
facilities provided at the linklet layer by a Racket
implementation.
The implementations of member, memw, when, unless, let/ec,
and cond are rewritten to use only racket/kernel syntax
The impersonator-property-predicate-procedure? function identifies
procedures created by make-impersonator-property.
In Typed Racket, polymorphic struct types are printed using type
arguments (e.g., (Array Byte)) rather than exposing an internal
representation.
The stepper's display of numbers better matches the language
settings.
Scribble documents that do not use the Racket-manual style get an initial-scale of 1.0, instead of the manual style's 0.8, but this
can be configured using the initial-scale property.
By default, margin notes appear inline for narrow displays in all
styles, not just in the Racket-manual style.
Big-bang programs distributed as .dmg files correctly handle the close-on-stop feature.
There are many other repairs and documentation improvements!
Importantly, the Typed Racket changes can cause existing code to fail at compile time but not a runtime, and the match changes can cause both compile-time and run-time failures.
To avoid the abbreviation twice in a row, would “for a more static "ffi2" foreign interface” make sense?
I would mark up racket/kernel as code, especially as it’s not an extremely well-known module, and reading the “/” as something like “only racket or kernel syntax” seems plausible.
Okay, @samth took your suggestions for links as well, here's what I have now, planning to run with this:
Typed Racket's types for the asin and acos procedures correctly handle situations where the function produces a complex number, avoiding unsound results that were previously possible. This repair could cause existing code to fail at compile time, see this pull request.
The updated match form checks that when non-linear patterns (patterns where the same variable is used multiple times) are used with ..., the two parts of the matched value actually are equal. Additionally, match rejects non-linear patterns where one use of the variable is used with ... and another is not. This repair could cause existing code to fail, see this pull request.
Racket 9.2 uses Unicode 17.0 for character and string operations.
This release includes internal support for a more static "ffi2" foreign interface (to be used in a future package).
The terminal-file-position function counts bytes written to ports connected to a terminal, such as stdin and stderr.
Cross-phase persistent modules allow more types of quoted data.
The #%foreign-inline core syntactic form provides unsafe access to facilities provided at the linklet layer by a Racket implementation.
The implementations of member, memw, when, unless, let/ec, and cond are rewritten to use only racket/kernel syntax
In Typed Racket, polymorphic struct types are printed using type arguments (e.g., (Array Byte)) rather than exposing an internal representation.
The stepper's display of numbers better matches the language settings.
Scribble documents that do not use the Racket-manual style get an initial-scale of 1.0, instead of the manual style's 0.8, but this can be configured using the initial-scale property.
By default, margin notes appear inline for narrow displays in all styles, not just in the Racket-manual style.
Big-bang programs distributed as .dmg files correctly handle the close-on-stop feature.
There are many other repairs and documentation improvements!
Sorry, minor reformatting; I wanted text that made sense with no links, for inclusion in the .txt version of the release notes. Here's what I've got now:
Typed Racket's types for the asin and acos procedures correctly handle situations where the function produces a complex number, avoiding unsound results that were previously possible. This repair could cause existing code to fail at compile time.
The updated match form checks that when non-linear patterns (patterns where the same variable is used multiple times) are used with ..., the two parts of the matched value actually are equal. Additionally, match rejects non-linear patterns where one use of the variable is used with ... and another is not. This repair could cause existing code to fail.
Racket 9.2 uses Unicode 17.0 for character and string operations.
This release includes internal support for a more static "ffi2" foreign interface (to be used in a future package).
The terminal-file-position function counts bytes written to ports connected to a terminal, such as stdin and stderr.
Cross-phase persistent modules allow more types of quoted data.
The #%foreign-inline core syntactic form provides unsafe access to facilities provided at the linklet layer by a Racket implementation.
The implementations of member, memw, when, unless, let/ec, and cond are rewritten to use only racket/kernel syntax
In Typed Racket, polymorphic struct types are printed using type arguments (e.g., (Array Byte)) rather than exposing an internal representation.
The stepper's display of numbers better matches the language settings.
Scribble documents that do not use the Racket-manual style get an initial-scale of 1.0, instead of the manual style's 0.8, but this can be configured using the initial-scale property.
By default, margin notes appear inline for narrow displays in all styles, not just in the Racket-manual style.
Big-bang programs distributed as .dmg files correctly handle the close-on-stop feature.
There are many other repairs and documentation improvements!
I would omit the word "updated" in the discussion of match.
I think the discussion about #%foreign-inline should be moved to the third bullet and mention that code that handles all possible fully expanded forms will need to be updated to accommodate this new possibility.
These changes make sense to me. Here's what I have now:
The match form checks that when non-linear patterns (patterns where the same variable is used multiple times) are used with ..., the two parts of the matched value actually are equal. Additionally, match rejects non-linear patterns where one use of the variable is used with ... and another is not. This repair could cause existing code to fail.
Typed Racket's types for the asin and acos procedures correctly handle situations where the function produces a complex number, avoiding unsound results that were previously possible. This repair could cause existing code to fail at compile time.
The #%foreign-inline core syntactic form provides unsafe access to facilities provided at the linklet layer by a Racket implementation. This means that any code that handles all core forms by enumeration will need to be updated.
Racket 9.2 uses Unicode 17.0 for character and string operations.
This release includes internal support for a more static "ffi2" foreign interface (to be used in a future package).
The terminal-file-position function counts bytes written to ports connected to a terminal, such as stdin and stderr.
Cross-phase persistent modules allow more types of quoted data.
The implementations of member, memw, when, unless, let/ec, and cond are rewritten to use only racket/kernel syntax
In Typed Racket, polymorphic struct types are printed using type arguments (e.g., (Array Byte)) rather than exposing an internal representation.
The stepper's display of numbers better matches the language settings.
Scribble documents that do not use the Racket-manual style get an initial-scale of 1.0, instead of the manual style's 0.8, but this can be configured using the initial-scale property.
By default, margin notes appear inline for narrow displays in all styles, not just in the Racket-manual style.
Big-bang programs distributed as .dmg files correctly handle the close-on-stop feature.
There are many other repairs and documentation improvements!