Release Announcement for Version 7.0

Racket v7.0

Racket version 7.0 includes substantial internal changes toward the
long-term goal of replacing Racket's current runtime system and
supporting multiple runtime systems. We do not expect Racket users to
see a big difference between Racket v6.12 and Racket v7.0, but since
the internals differ significantly, a major-version bump helps track
the change.

Version 7.0 replaces about 1/8 of the core v6.12 implementation with a
new macro expander that bootstraps itself. The expander turns out to be
about 40% of the new code needed to replace Racket's core with Chez
Scheme. Most of the other 60% is also implemented, but it is not
included in this release; we hope and expect that Racket-on-Chez will
be ready for production use later in the v7.x series.


* The `syntax` (`#'`) form supports new template subforms: `[email protected]` for
  splicing and `~?` for choosing between subtemplates based on whether
  pattern variables have "absent" value (from an `~optional` pattern in
  `syntax-parse`, for example). The `syntax/parse/experimental/template`
  library, where these features originated, re-exports the new forms
  under old names for compatibility.

* On Windows, an `--embed-dlls` flag for `raco exe` creates a truly
  standalone, single-file ".exe" that embeds Racket's DLLs.

* DrRacket's "Create Executable" option for the teaching language
  (Beginner Student, etc.) uses `--embed-dlls` to create single-file,
  standalone ".exe"s on Windows.

* Typed Racket's support for prefab structs is significantly improved.
  This supports using prefab structs more polymorphically, and fixes
  significant bugs in the current implementation. Programs which
  currently use predicates for prefab structs on unknown data may need
  to be revised, since previous versions of Typed Racket allowed
  potentially buggy programs to type check. See Typed Racket RFC 1
  and []
  for more details on this change and on how to fix programs affected by it.

* Typed Racket supports `#:rest-star` in the `->*` type constructor,
  which allows function types to specify rest arguments with more
  complex patterns of types, such as the `hash` function.

* Interactive overlays can be added to plots produced by `plot-snip`.
  This allows constructing interactive plots or displaying additional
  information when the mouse hovers over the plot area.  Examples of how
  to use this feature can be found here:

* racket/plot provides procedures for displaying candlestick charts for
  use in financial time series analysis.

* Added contract-equivalent?, a way check if two contracts are mutually
  stronger than each other without the exponential slowdown that two
  calls to contract-stronger? brings.

* Lazy Racket supports functions with keyword arguments.

The following people contributed to this release:

Adam Davis Lee, Alex Harsányi, Alex Knauth, Alexander McLin, Alexander
Shopov, Alexis King, Andrew M. Kent, Asumu Takikawa, Ben Greenman, Caner
Derici, Daniel Feltey, David Benoit, David Kempe, Don March, Eric
Dobson, evdubs, Foo Chuan Wei, Georges Dupéron, Gustavo Massaccesi,
Hashim Muqtadir, Jakub Jirutka, James Bornholt, Jasper Pilgrim, Jay
McCarthy, Jens Axel Søgaard, John Clements, Juan Francisco Cantero
Hurtado, Kashav Madan, Kieron Hardy, Leandro Facchinetti, Leif Andersen,
Luke Lau, Matthew Butterick, Matthew Flatt, Matthias Felleisen, Michael
Ballantyne, Michael Burge, Michael Myers, Mike Sperber, Milo Turner,
NoCheroot, Oling Cat, Paulo Matos, Philip McGrath, Philippe Meunier,
Robby Findler, Ryan Culpepper, Sam Tobin-Hochstadt, Sarah Spall,
Shu-Hung You, Sorawee Porncharoenwase, Spencer Florence, Stephen Chang,
Tony Garnock-Jones, Tucker DiNapoli, UM4NO, Vincent St-Amour, and
William J. Bowman.