Racket v8.16 draft release notes

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


  • A variety of new treelist utility functions are available:
    treelist-filter, treelist-flatten, et cetera.
  • The mutable-treelist-prepend! function allows prepending to
    mutable treelists.
  • Mutable treelists are serializable.
  • The serialize-structs module allows the minimization of
    dependencies by providing only a handful of core forms
  • The flbit-field function allows access to the binary
    representation of IEEE floating-point numbers.
  • The top-left search box in the documentation works once more.
  • The XML reader uses a different library that is 2x-3x faster on
    inputs with large CDATA blocks, and disables contract checks to
    obtain a 25% speedup on large documents generally.
  • The pregexp syntax includes "\X" to match a grapheme cluster,
    following Perl and PCRE.
  • The read-json* and write-json* functions allow customization of
    the Racket representation of JSON elements, eliminating the need for
    a separate "translation" pass.
  • The open-input-nowhere function creates an empty input port.
  • The pipe-port? function makes it possible to determine whether a
    port is connected to a pipe.
  • A revised representation of pointers makes ptr-ref and ptr-set!
    substantially faster, reducing the overhead of foreign function
    calls.
  • In anticipation of the fifteenth RacketCon, the fifteenth function
    returns the fifteenth element of a list.
  • Racket has an improved multi-line convention for error messages.
  • The port-file-stat function allows gathering information about the
    file that is the source or target of a file-stream port.
  • The db library allows prepare on virtual statements.
  • The student-t distribution is part of the math/distributions
    library.
  • Expeditor supports customizing the prompt, using the prompt
    argument to call-with-expeditor.
  • There is a guide to adding internationalization for a new (human)
    language.
  • There is lots of new documentation, and many defects repaired!

The following people contributed to this release:

a11ce, Alex Knauth, Alexander Shopov, Alexis King, Andrew
Mauer-Oats, Anthony Carrico, Bert De Ketelaere, Bob Burger, Bogdan
Popa, D. Ben Knoble, David Van Horn, Gustavo Massaccesi, halfminami,
Hao Zhang, Jacqueline Firth, Jinser Kafka, JJ, John Clements, Jörgen
Brandt, Kraskaska, lafirest, Laurent Orseau, lukejianu, Marc
Nieper-Wißkirchen, Matthew Flatt, Matthias Felleisen, mehbark, Mike
Sperber, Noah Ma, Onorio Catenacci, Oscar Waddell, Pavel Panchekha,
payneca, Robby Findler, Sam Phillips, Sam Tobin-Hochstadt, Shu-Hung
You, Sorawee Porncharoenwase, Stephen De Gabrielle, Wing Hei Chan,
Yi Cao, and ZhangHao.


5 Likes

I recommend this PR by @mike: https://github.com/racket/htdp/pull/222
I think the debugger support of menu-based ASL has been there for a long time, but #lang htdp/asl previously didn't get the "Debug" button.

Maybe this?

How about focusing on FFI calls in general? like

  • A revised representation of pointers improves the performance of foreign function calls.
    • ptr-ref and ptr-set! are substantially faster.

Just for the record, this post details the FFI improvement (with several benchmarking results from @mflatt and @pavpanchekha):
https://racket.discourse.group/t/fixnum-slow-despite-docs/3409/6

Does it make sense to make them a secondary-level list and summarize the notes as one top-level item? (e.g.

  • Expanded support for immutable and mutable treelists.
    • ...
    • ...)

These items fall under the general "port I/O" category. Similar to the treelist items, I wonder whether grouping them under a top-level "new port I/O functions"-ish item better structures the release notes.

How about replacing "connected to a pipe" with "created by make-pipe"?

  • "connected" is not a technical phrase of ports
  • "pipes" are too generic (when compared to, e.g. "Racket pipe ports")
    For example, Racket docs specifically note that OS-level pipes are actually file-stream ports.

Did you drop the bullet point on profile?

How about this?


  • Expanded support for immutable and mutable treelists

    • A variety of new treelist utility functions are available:
      treelist-filter, treelist-flatten, et cetera.
    • The mutable-treelist-prepend! function allows prepending to
      mutable treelists.
    • Mutable treelists are serializable.
  • The serialize-structs module allows the minimization of
    dependencies by providing only a handful of core forms

  • The flbit-field function allows access to the binary
    representation of IEEE floating-point numbers.

  • The top-left search box in the documentation works once more.

  • The XML reader uses a different library that is 2x-3x faster on
    inputs with large CDATA blocks, and disables contract checks to
    obtain a 25% speedup on large documents generally.

  • The pregexp syntax includes "\X" to match a grapheme cluster,
    following Perl and PCRE.

  • The read-json* and write-json* functions allow customization of
    the Racket representation of JSON elements, eliminating the need for
    a separate "translation" pass.

  • New port I/O functions

    • The open-input-nowhere function creates an empty input port.
    • The pipe-port? function makes it possible to determine whether a
      port is created by make-pipe.
    • The port-file-stat function allows gathering information about the
      file that is the source or target of a file-stream port.
  • A revised representation of pointers improves the performance of foreign
    function calls.

  • In anticipation of the fifteenth RacketCon, the fifteenth function
    returns the fifteenth element of a list.

  • Racket has an improved multi-line convention for error messages.

  • The db library allows prepare on virtual statements.

  • The student-t distribution is part of the math/distributions
    library.

  • Expeditor supports customizing the prompt, using the prompt
    argument to call-with-expeditor.

  • There is a guide to adding internationalization for a new (human)
    language.

  • #lang htdp/asl incorporates Graphical Debugger support.

  • There is lots of new documentation, and many defects repaired!

The following people contributed to this release:

a11ce, Alex Knauth, Alexander Shopov, Alexis King, Andrew
Mauer-Oats, Anthony Carrico, Bert De Ketelaere, Bob Burger, Bogdan
Popa, D. Ben Knoble, David Van Horn, Gustavo Massaccesi, halfminami,
Hao Zhang, Jacqueline Firth, Jinser Kafka, JJ, John Clements, Jörgen
Brandt, Kraskaska, lafirest, Laurent Orseau, lukejianu, Marc
Nieper-Wißkirchen, Matthew Flatt, Matthias Felleisen, mehbark, Mike
Sperber, Noah Ma, Onorio Catenacci, Oscar Waddell, Pavel Panchekha,
payneca, Robby Findler, Sam Phillips, Sam Tobin-Hochstadt, Shu-Hung
You, Sorawee Porncharoenwase, Stephen De Gabrielle, Wing Hei Chan,
Yi Cao, and ZhangHao.


1 Like

How about:

  • The XML reader is 2-3x faster on inputs with long CDATA and comments, and avoids some internal contract checks to obtain a 25% speedup on large documents generally.

The CDATA change was more of an algorithm class change than a library change and the contract changes were minimal and limited to the private implementation of the reader. I'd even be happy to drop the "avoids some contract checks" detail since the commits are small and straightforward, so someone interested can easily take a look at them.

Updated
I’ll admit I’ve forgotten how to determine documentation links- I think they have to wait till the release is live.

S.


The following people contributed to this release:

a11ce, Alex Knauth, Alexander Shopov, Alexis King, Andrew
Mauer-Oats, Anthony Carrico, Bert De Ketelaere, Bob Burger, Bogdan
Popa, D. Ben Knoble, David Van Horn, Gustavo Massaccesi, halfminami,
Hao Zhang, Jacqueline Firth, Jinser Kafka, JJ, John Clements, Jörgen
Brandt, Kraskaska, lafirest, Laurent Orseau, lukejianu, Marc
Nieper-Wißkirchen, Matthew Flatt, Matthias Felleisen, mehbark, Mike
Sperber, Noah Ma, Onorio Catenacci, Oscar Waddell, Pavel Panchekha,
payneca, Robby Findler, Sam Phillips, Sam Tobin-Hochstadt, Shu-Hung
You, Sorawee Porncharoenwase, Stephen De Gabrielle, Wing Hei Chan,
Yi Cao, and ZhangHao.


Updated draft Racket v8.16 draft release notes - #9 by spdegabrielle with links.

:beetle:

Nope, not dropped. However, the change I made to my internal representation has not yet reached the .. "public copy", if that's a good word for it. Yes, I'm planning to include it.

Okay, here's what I've got now. I just spent way too long on an at-exp format that generates both markdown and text-file-style (no markdown links, lines broken at 80 chars). I'm going to paste the markdown one, let's see how it looks. @spdegabrielle , I diffed against your markdown, and I think the only changes are minor and deliberate. Let me know if you see problems!

As of this release:

meh, what the heck, I'll post the text-file one as well:

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

- Racket has expanded support for immutable and mutable treelists:
  - A variety of new treelist utility functions are available:
    `treelist-filter`, `treelist-flatten`, et cetera.
  - The `mutable-treelist-prepend!` function allows prepending to
    mutable treelists.
  - Mutable treelists are serializable.
- The `serialize-structs` module allows the minimization of
  dependencies by providing only a handful of core forms.
- The `flbit-field` function allows access to the binary
  representation of IEEE floating-point numbers.
- The top-left search box in the documentation works once more.
- The XML reader is 2-3x faster on inputs with long CDATA and
  comments, and avoids some internal contract checks to obtain a 25%
  speedup on large documents generally.
- The pregexp syntax includes "\X" to match a grapheme cluster),
  following Perl and PCRE.
- The `read-json*` and `write-json*` functions allow customization of
  the Racket representation of JSON elements, eliminating the need for
  a separate "translation" pass.
- Racket has new port I/O functions:
  - The `open-input-nowhere` function creates an empty input port.
  - The `pipe-port?` function makes it possible to determine whether a
    port is created by `make-pipe`.
  - The `port-file-stat` function allows gathering information about the
    file that is the source or target of a file-stream port.
- A revised representation of pointers improves the performance of
  foreign function calls. As a result, `ptr-ref` and `ptr-set!` are
  substantially faster.
- In anticipation of the fifteenth RacketCon, the `fifteenth` function
  returns the fifteenth element of a list.
- Racket has an improved multi-line convention for error messages.
- The `db` library allows `prepare` on virtual statements.
- The `student-t` distribution is part of the `math/distributions`
  library.
- Expeditor supports customizing the prompt, using the `#:prompt`
  keyword argument to `call-with-expeditor`.
- There is a guide to adding internationalization for a new (human)
  language.
- Optimizations to racket/profile improve asymptotic speed for very
  large call graphs.
- The `#lang htdp/asl` language incorporates Graphical Debugger
  support.
- There is lots of new documentation, and many defects repaired!

The following people contributed to this release:

a11ce, Alex Knauth, Alexander Shopov, Alexis King, Andrew
Mauer-Oats, Anthony Carrico, Bert De Ketelaere, Bob Burger, Bogdan
Popa, D. Ben Knoble, David Van Horn, Gustavo Massaccesi, halfminami,
Hao Zhang, Jacqueline Firth, Jinser Kafka, JJ, John Clements, Jörgen
Brandt, Kraskaska, lafirest, Laurent Orseau, lukejianu, Marc
Nieper-Wißkirchen, Matthew Flatt, Matthias Felleisen, mehbark, Mike
Sperber, Noah Ma, Onorio Catenacci, Oscar Waddell, Pavel Panchekha,
payneca, Robby Findler, Sam Phillips, Sam Tobin-Hochstadt, Shu-Hung
You, Sorawee Porncharoenwase, Stephen De Gabrielle, Wing Hei Chan,
Yi Cao, and ZhangHao.

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

I'm pretty sure that this version doesn't introduce any glaring errors, so I'm going to run with this, unless someone lets me know real soon now that there's a problem!

Also: @spdegabrielle , the new representation should make it really easy to programmatically check to see whether the new URLs are good are not, and also to automatically update pre-release doc links to release doc links. Fingers crossed.

What do you mean by "The top-left search box in the documentation works once more."? It was not working?

More or less, yes. Maybe that wasn't true for all browsers? Here's the text of the relevant commit, I believe it's in the racket/scribble repo:

--------------------------------------------------------------------------------
Matthew Flatt mflatt@racket-lang.org 2024-10-18T11:59:34Z
18dc3828f272cf19078ea345df845f0c6ef16ab9

add indirection for user-scope searches

When viewing documenation for a user-scoped package, the search box in
the top left was originally meant to find the documentation entry
point using a `PLT_Root...` cookie, which migrated to mean
`PLT_Root...` local storage. The local-storage approach stopped
working years ago, as browsers made different file count as different
domains.

This change enables a layer like `racket-index` to define cause
`user_doc_root` to be defined, which it can do as part of the
`local-redirect` layer that is alreayd in place. And that makes the
top-left search box work again.

bullet rewording welcome, BTW!

(But, uh, I see that the docs are up, so I'm proceeding with the release now-ish.)