Racket v8.17 draft Release Notes

Here are the current draft release notes, let me know about things that are incorrect or missing!


  • 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.
  • Dynamic-require 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 windows terminal can receive mouse events as
    virtual terminal characters after using SetConsoleMode.
  • 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.
  • The new drracket-core package provides a version of drracket with
    a smaller set of dependencies.
  • The language menu, including the configuration sub-pane, have
    improved for installations that have no user-facing languages
    installed.
  • Typed Racket has support for treelists.
  • Racket and Typed Racket have better support for block-diagonal
    matrices.
  • 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.


Is it possible somehow to mention that this already works on macOS and Linux?

It does? I spent a while looking for a chunk of example code, I definitely felt like I was stumbling around in the dark. If I just use read-char/special on macOS, do I get mouse movement messages?

Dynamic-require makes it easier to use syntax bindings by allowing a

dynamic-require should be referecend as a function.

The string-append function

This should be a new bullet.

TCP ports use SO_KEEPALIVE

SO_KEEPALIVE should be in tt font.

Several judgment rendering forms in Redex

Redex does not have a capital letter in any of the actual identifiers in Racket.

The stepper again works for big-bang programs.

big-bang is an identifier

Racket and Typed Racket have better support for block-diagonal

Isn't this actually about the math library?

The language menu, including the configuration sub-pane, have
improved for installations that have no user-facing languages
installed.

What "user facing languages" are should be explained better.

@dominik.pantucek You are the best to answer this one.

First, and clearly most important... how did you manage to intersperse responses to bullets like that? Did you have to quote each one you were responding to separately ? Email was nicer here, sigh.

Done

Done

Okay, this actually raises a question. What I'm using here is scribble that generates text and also markdown, so the real question I have for you is what specific textual and markdown elements you'd like to see here. Would backticks be sufficient? Would you prefer a <code> tag in markdown?

Removed the backticks

Backticked

reworded

Yeah, actually I already wrote to Robby to see if he could help me with the wording on this. I agree that this is not acceptable yet.

Here's my revised copy.


  • 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 dynamic-require form 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 windows terminal can receive mouse events as
    virtual terminal characters after using SetConsoleMode.
  • 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.
  • The new drracket-core package provides a version of drracket with
    a smaller set of dependencies.
  • The language menu, including the configuration sub-pane, have
    improved for installations that have no user-facing languages
    installed.
  • Typed Racket has support for treelists.
  • 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.


If you select text in the web interface there's a quote button.

Yes backticks are fine.

For prioritization, I think the most significant ones are: drracket-core, treelists in TR, package manager checksums.

Yes, but when you do that you get a separate quote block for each piece; you can see the person's name at the top of each block. I see that for your most recent message, but not for your first one in this thread, suggesting you did something different there. Perhaps you manually inserted not-quote quote pairs? Not sure. Not important.

Done

Agreed, updated. New version:


  • 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 dynamic-require form 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 windows terminal can receive mouse events as
    virtual terminal characters after using SetConsoleMode.
  • 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.
  • The language menu, including the configuration sub-pane, have
    improved for installations that have no user-facing languages
    installed.
  • 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.


For most of those I copied and pasted manually.

One last note: dynamic-require is a procedure not a syntactic form.

Hehe, I'll try my best :wink:

Yes, it does - if you enable that. In tui-term[1], there's a procedure just for that: term-enable-mouse[2]. On Linux and/or a Mac, it just sends SET_ANY_EVENT_MOUSE and SET_SGR_EXT_MODE_MOUSE VT/ANSI/ECMA sequences. See the source[3].

The Windows Console support gets "injected" into the whole layered support in [4] using a "platform hook". Windows is the only platform, where this operates on a completely different layer than one would expect. The actual hook is then passed along as the last field of the tterm struct as [5].

Yup, jumping hoops thru loops only to:

  • either send "\x1b[?1003h\x1b[?1006h" to the standard output, or
  • update ConsoleMode on hStdin with bits #x290 set to one and cleared bit #x40

I plan to provide some example code in the tui-term package, however this is pretty low-level and I think only TUI toolkit authors would even want to use it. Ok, perhaps cursor positioning in expeditor using mouse is another cool feature someone might implement, but that's about it :slight_smile:

[1] TUI Terminal Support
[2] 2 Virtual Terminal
[3] term/vt-output-port.rkt · master · Dominik Joe Pantůček / tui-term · GitLab
[4] term/tty-input-port.rkt · master · Dominik Joe Pantůček / tui-term · GitLab
[5] term/tty.rkt · master · Dominik Joe Pantůček / tui-term · GitLab