Release Announcement for Version 8.17

Racket v8.17

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

- The new `drracket-core` package provides a version of drracket with
  a smaller set of dependencies.
- Typed Racket has support for treelists.
- The package manager computes checksums for packages when required,
  allowing the use and automatic upgrade of packages without them.
- The `bitwise-first-bit-set` function returns the smallest bit that
  is set in the twos-complement representation of the given number.
- The updated `dynamic-require` function makes it easier to use syntax
  bindings by allowing a syntax-thunk (or 'eval) to be used for them.
- The `error-module-path->string-handler` parameter allows the
  customization of the display of module-paths in error messages.
- Precision of certain numeric functions (`sin`, `cos`, and others) is
  improved on Windows platforms by using the MSVCRT/UCRT libraries.
- The `string-append` function has improved performance and reduced
  memory use for long lists of strings in the Racket CS
  implementation. Differences are clearly noticeable for lists of
  length 1 million.
- TCP ports use `SO_KEEPALIVE`, instructing the kernel to send
  periodic messages while waiting for data to check whether the
  connection is still responsive.
- Racket code using a terminal in Windows can receive mouse events as
  virtual terminal characters after using SetConsoleMode. (This is
  also already possible on macOS and Linux.) See the tui-term package
  for related example code.
- The `#:replace-malformed-surrogate?` keyword can be used to specify
  a replacement for malformed unicode surrogates in JSON input
- The http-client module no longer sends "Content-Length: 0" for
  requests without a body.
- The demodularizer (`compiler/demod`) can prune more unused
  assignments.
- Several judgment rendering forms in Redex are replaced by functions,
  allowing more convenient abstraction.
- When a distribution includes no teaching languages, DrRacket’s
  language-dialog configuration moves into the preferences dialog and
  the “Language” menu disappears.
- The math library has better support for block-diagonal matrices,
  including both Racket and Typed Racket.
- The math library contains improved implementations of acos and
  matrix-(cos-)angle.
- The stepper again works for `big-bang` programs.
- There are many other repairs and documentation imprevements!

The following people contributed to this release:

Alexander Shopov, Andrei Dorian Duma, Bert De Ketelaere, Bob Burger,
Bogdan Popa, Bogdana Vereha, Cameron Moy, Chung-chieh Shan, Cutie
Deng, D. Ben Knoble, Dario Hamidi, Dominik Pantůček, Gustavo
Massaccesi, halfminami, Jacqueline Firth, Jason Hemann, Jens Axel
Søgaard, Joel Dueck, John Clements, Jordan Harman, Marc
Nieper-Wißkirchen, Matthew Flatt, Matthias Felleisen, Mike Sperber,
Noah Ma, owaddell-ib, Philippe Meunier, Robby Findler, Ryan
Culpepper, Ryan Ficklin, Sam Phillips, Sam Tobin-Hochstadt, Shu-Hung
You, sogaiu, Sorawee Porncharoenwase, Stephen De Gabrielle, Vincent
Lee, and Wing Hei Chan.

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