Release Announcement for Version 8.9

Racket v8.9

----------------------------------------------------------------------

Racket version 8.9 is now available from

    https://racket-lang.org/

As of this release:

* The HtDP student languages come with checked signatures. Programmers
  can express signatures in a formal notation, and these signatures are
  checked at run-time (in a performance-neutral manner). The addition of
  this formal language associates meaning with several names that had no
  meaning before. — This feature is experimental, and we may amend or
  retract it later. (cf.
  https://docs.racket-lang.org/htdp-langs/beginner-abbr.html?q=signatures#%28part._beginner-abbr-signatures%29)

* Switching into and out of dark mode is handled better on Mac OS and
  Linux.

* Racket uses Unicode 15.0 for character and string operations.

* The `racket/hash-code` library provides support for combining hash
  codes. (cf.
  https://docs.racket-lang.org/reference/Equality.html#%28mod-path._racket%2Fhash-code%29)

* A language module can have a `configure-expand` submodule that is
  dynamically required to configure a parameterization before expansion
  of another module. (cf.
  https://docs.racket-lang.org/reference/running-sa.html#%28part._configure-expand%29)

* `stream-cons` supports multiple values. (cf.
  https://docs.racket-lang.org/reference/streams.html#%28form._%28%28lib._racket%2Fstream..rkt%29._stream-cons%29%29)

* `unit/c` subcontracts may depend on bindings from any imported or
  exported signature. Additionally, bindings’ contracts are enforced
  within subcontracts, and violations blame the contract itself (like
  `->i`). (cf.
  https://docs.racket-lang.org/reference/unitcontracts.html#%28form._%28%28lib._racket%2Funit..rkt%29._unit%2Fc%29%29)

* `racket/class` provides the `dynamic-instantiate` procedure for
  instantiating a class with a dynamic list of by-name initialization
  arguments. (cf.
  https://docs.racket-lang.org/reference/objcreation.html#%28def._%28%28lib._racket%2Fprivate%2Fclass-internal..rkt%29._dynamic-instantiate%29%29)

* TCP output block buffering implies TCP_NODELAY. (cf.
  https://docs.racket-lang.org/reference/tcp.html#%28def._%28%28lib._racket%2Ftcp..rkt%29._tcp-connect%29%29)

* Submodules and Check Syntax require arrows work better together.

* Typed Racket's shallow check generation is improved.

* Many other improvements and bug fixes are included!

## Thank you

Thank you to the people who contributed to this release:

Alex Harsányi, Alex Knauth, Alexis King, Ben Greenman, Bert De
Ketelaere, Bob Burger, Bogdan Popa, Cadence Ember, D. Ben Knoble, Denis
Hirn, dr-neptune, Eli Barzilay, Fred Fu, Gustavo Massaccesi, J. Ryan
Stinnett, Jack Firth, Jamie Taylor, Jesse Alama, Jin-Ho King, John
Clements, Lazerbeak12345, Mark Hedlund, Masaya Tojo, Matthew Flatt,
Matthias Felleisen, Mike Sperber, Philip McGrath, Robby Findler, Ryan
Culpepper, Sam Phillips, Sam Tobin-Hochstadt, sarna, Shu-Hung You,
Sorawee Porncharoenwase, Stephen De Gabrielle, sxzzsf, Tom Price, Yukai
Chou, and Zach O'Brien.


Feedback Welcome
----------------------------------------------------------------------