Release Announcement for v9.2

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!

The following people contributed to this release:

Alexander Shopov, Alexis King, Asilo, Bert De Ketelaere, Bob Burger,
Bogdan Popa, Chung-chieh Shan, François-René Rideau, Gustavo
Massaccesi, Ilya Klyuchnikov, Jade Sailor, Jamie Taylor, John
Clements, Jonathan Simpson, LS_Hower, Matthew Flatt, Matthias
Felleisen, Mike Sperber, Pavel Panchekha, Philippe Meunier, RMOlive,
Robby Findler, Roman Klochkov, Sam Tobin-Hochstadt, Shu-Hung You,
Tejas Sanap, Vincent Lee, and Wing Hei Chan.


2 Likes

Links added.

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
  • 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.
- 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.

This might be better as: “In Typed Racket, polymorphic Struct types are printed …”

1 Like

Thanks @LiberalArtist

- 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.

@samth can we add a few words of justification of the acos asin change? Was it a soundness issue, perhaps?

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"?

1 Like

I think it was this commit: Reject non-linear `match` patterns with mismatched ellipsis depth · racket/racket@c42ebbf · GitHub

I think a link will be sufficient

- 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.
  1. Better to link to the Pull Request, here: Reject non-linear `match` patterns with mismatched ellipsis depth by samth · Pull Request #5467 · racket/racket · GitHub
  2. For the changes to asin/acos, the PR is here: Fix types of `asin` and `acos`. by samth · Pull Request #1428 · racket/typed-racket · GitHub
  3. The changes to asin and acos are indeed soundness issues; you can read about the problem here: Acos behaves differently on #s > 1.0 in TR?
  4. Here are some suggested bullet points:
  • 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.