# Racket v8.16 draft release notes

**URL:** <https://racket.discourse.group/t/racket-v8-16-draft-release-notes/3518>\
**Category:** Internals\
**Tags:** release-management, release\
**Created:** [January 27, 2025, 5:09am UTC](https://racket.discourse.group/t/racket-v8-16-draft-release-notes/3518 "2025-01-27T05:09:28Z")\
**Posts on this page:** 19\
**Page:** 1

<div class="post-metadata">

**Author:** ![jbclements](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/jbclements/32/11_2.png) [@jbclements](https://racket.discourse.group/u/jbclements)\
**Post date:** [January 27, 2025, 5:09am UTC](https://racket.discourse.group/t/racket-v8-16-draft-release-notes/3518/1 "2025-01-27T05:09:28Z")

</div>

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.

* * *

---

<div class="post-metadata">

**Author:** ![shhyou](https://avatars.discourse-cdn.com/v4/letter/s/ccd318/32.png) [@shhyou](https://racket.discourse.group/u/shhyou)\
**Post date:** [January 28, 2025, 8:55pm UTC](https://racket.discourse.group/t/racket-v8-16-draft-release-notes/3518/2 "2025-01-28T20:55:30Z")

</div>

I recommend this PR by @mike: [https://github.com/racket/htdp/pull/222](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?

- `#lang htdp/asl` incorporates [Graphical Debugger](https://docs.racket-lang.org/drracket/debugger.html#%28part._.Debugger_.Buttons%29) support.

> [@jbclements](#):
>
> A revised representation of pointers makes `ptr-ref` and `ptr-set!`  
> substantially faster, reducing the overhead of foreign function  
> calls.

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](https://racket.discourse.group/t/fixnum-slow-despite-docs/3409/6)

> [@jbclements](#):
>
> - 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.

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.
  - ...
  - ...)

> [@jbclements](#):
>
> - 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.
> - The `port-file-stat` function allows gathering information about the file that is the source or target of a file-stream port.

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.

---

<div class="post-metadata">

**Author:** ![shhyou](https://avatars.discourse-cdn.com/v4/letter/s/ccd318/32.png) [@shhyou](https://racket.discourse.group/u/shhyou)\
**Post date:** [January 28, 2025, 11:30pm UTC](https://racket.discourse.group/t/racket-v8-16-draft-release-notes/3518/3 "2025-01-28T23:30:19Z")

</div>

> [@jbclements](#):
>
> The `pipe-port?` function makes it possible to determine whether a  
> port is connected to a pipe.

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](https://docs.racket-lang.org/reference/pipeports.html#(part._pipeports)) specifically note that OS-level pipes are actually file-stream ports.

---

<div class="post-metadata">

**Author:** ![pavpanchekha](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/pavpanchekha/32/642_2.png) [@pavpanchekha](https://racket.discourse.group/u/pavpanchekha)\
**Post date:** [February 2, 2025, 1:08am UTC](https://racket.discourse.group/t/racket-v8-16-draft-release-notes/3518/4 "2025-02-02T01:08:48Z")

</div>

Did you drop the bullet point on profile?

---

<div class="post-metadata">

**Author:** ![spdegabrielle](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/spdegabrielle/32/95_2.png) [@spdegabrielle](https://racket.discourse.group/u/spdegabrielle)\
**Post date:** [February 2, 2025, 8:42pm UTC](https://racket.discourse.group/t/racket-v8-16-draft-release-notes/3518/5 "2025-02-02T20:42:23Z")

</div>

How about this?

* * *

- Expanded support for immutable and mutable treelists

- 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

- 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](https://docs.racket-lang.org/drracket/debugger.html#%28part._.Debugger_.Buttons%29) 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.

* * *

---

<div class="post-metadata">

**Author:** ![spdegabrielle](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/spdegabrielle/32/95_2.png) [@spdegabrielle](https://racket.discourse.group/u/spdegabrielle)\
**Post date:** [February 2, 2025, 11:32pm UTC](https://racket.discourse.group/t/racket-v8-16-draft-release-notes/3518/6 "2025-02-02T23:32:04Z")

</div>



---

<div class="post-metadata">

**Author:** ![spdegabrielle](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/spdegabrielle/32/95_2.png) [@spdegabrielle](https://racket.discourse.group/u/spdegabrielle)\
**Post date:** [February 2, 2025, 11:36pm UTC](https://racket.discourse.group/t/racket-v8-16-draft-release-notes/3518/7 "2025-02-02T23:36:06Z")

</div>



---

<div class="post-metadata">

**Author:** ![bogdan](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/bogdan/32/8_2.png) [@bogdan](https://racket.discourse.group/u/bogdan)\
**Post date:** [February 3, 2025, 6:08am UTC](https://racket.discourse.group/t/racket-v8-16-draft-release-notes/3518/8 "2025-02-03T06:08:04Z")

</div>

> [@jbclements](#):
>
> 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.

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.

---

<div class="post-metadata">

**Author:** ![spdegabrielle](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/spdegabrielle/32/95_2.png) [@spdegabrielle](https://racket.discourse.group/u/spdegabrielle)\
**Post date:** [February 3, 2025, 8:43am UTC](https://racket.discourse.group/t/racket-v8-16-draft-release-notes/3518/9 "2025-02-03T08:43:02Z")

</div>

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

S.

* * *

- Expanded support for immutable and mutable treelists

- The [`serialize-structs`](https://pre-release.racket-lang.org/doc/reference/serialization.html#%28mod-path._racket%2Fserialize-structs%29) module allows the minimization of  
dependencies by providing only a handful of core forms

- The [`flbit-field`](https://pre-release.racket-lang.org/doc/reference/flonums.html#%28def._%28%28lib._racket%2Fflonum..rkt%29._flbit-field%29%29) function allows access to the binary  
representation of IEEE floating-point numbers.

- The top-left search box in the [documentation](https://pre-release.racket-lang.org/doc/index.html) works once more.

- The [XML reader](https://pre-release.racket-lang.org/doc/xml/index.html#%28part._.Reading_and_.Writing_.X.M.L%29) 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](https://pre-release.racket-lang.org/doc/reference/regexp.html#(part._regexp-syntax)),  
following Perl and PCRE.

- The [`read-json*`](https://pre-release.racket-lang.org/doc/json/index.html#%28def._%28%28submod._%28lib._json%2Fmain..rkt%29._for-extension%29._read-json%2A%29%29) and [`write-json*`](https://pre-release.racket-lang.org/doc/json/index.html#%28def._%28%28submod._%28lib._json%2Fmain..rkt%29._for-extension%29._write-json%2A%29%29) functions allow customization of  
the Racket representation of JSON elements, eliminating the need for  
a separate "translation" pass.

- New port I/O functions

- A revised representation of pointers improves the performance of foreign  
function calls.

- In anticipation of the fifteenth [RacketCon](https://con.racket-lang.org), the [`fifteenth`](https://pre-release.racket-lang.org/doc/reference/pairs.html#%28def._%28%28lib._racket%2Flist..rkt%29._fifteenth%29%29) function  
returns the fifteenth element of a list.

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

- The [`db` library](https://pre-release.racket-lang.org/doc/db/index.html) allows [`prepare`](https://pre-release.racket-lang.org/doc/db/query-api.html#%28def._%28%28lib._db%2Fbase..rkt%29._prepare%29%29) on virtual statements.

- The [`student-t` distribution](https://pre-release.racket-lang.org/doc/math/Real_Distribution_Families.html#%28part._.Student-t_.Distributions%29) is part of the [`math/distributions` library](https://pre-release.racket-lang.org/doc/math/dist.html).

- [Expeditor](https://pre-release.racket-lang.org/doc/expeditor/index.html) supports customizing the prompt, using the [`prompt`  
argument to `call-with-expeditor`](https://pre-release.racket-lang.org/doc/expeditor/Expeditor_API.html#%28def._%28%28lib._expeditor%2Fmain..rkt%29._call-with-expeditor%29%29).

- There is a [guide to adding internationalization for a new (human)  
language.](https://racket.discourse.group/t/advent-2024-day-translate-drracket-interface-in-your-language/3407)

- `#lang htdp/asl` incorporates [Graphical Debugger](https://docs.racket-lang.org/drracket/debugger.html#%28part._.Debugger_.Buttons%29) 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.

* * *

---

<div class="post-metadata">

**Author:** ![spdegabrielle](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/spdegabrielle/32/95_2.png) [@spdegabrielle](https://racket.discourse.group/u/spdegabrielle)\
**Post date:** [February 14, 2025, 4:24pm UTC](https://racket.discourse.group/t/racket-v8-16-draft-release-notes/3518/10 "2025-02-14T16:24:58Z")

</div>

Updated draft [Racket v8.16 draft release notes - #9 by spdegabrielle](https://racket.discourse.group/t/racket-v8-16-draft-release-notes/3518/9) with links.

> <https://github.com/racket/racket-lang-org/pull/344>
>
> added links to pre-release.racket-lang.org/doc
> 
> I believe a simple substitutio…n give the correct address once live
> 
> \`pre-release.racket-lang.org/doc\`==\>\`docs.racket-lang.org/doc\`
> 
> Soft-wrap FTW

:beetle:

---

<div class="post-metadata">

**Author:** ![jbclements](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/jbclements/32/11_2.png) [@jbclements](https://racket.discourse.group/u/jbclements)\
**Post date:** [March 2, 2025, 12:05am UTC](https://racket.discourse.group/t/racket-v8-16-draft-release-notes/3518/11 "2025-03-02T00:05:58Z")

</div>

> [@jbclements](#):
>
> db

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.

---

<div class="post-metadata">

**Author:** ![jbclements](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/jbclements/32/11_2.png) [@jbclements](https://racket.discourse.group/u/jbclements)\
**Post date:** [March 2, 2025, 6:34pm UTC](https://racket.discourse.group/t/racket-v8-16-draft-release-notes/3518/12 "2025-03-02T18:34:15Z")

</div>

> [@jbclements](#):
>
> flbit

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:

- Racket has expanded support for immutable and mutable treelists:
  - A variety of new treelist utility functions are available: [`treelist-filter`](https://pre-release.racket-lang.org/doc/reference/treelist.html#%28def._%28%28lib._racket%2Ftreelist..rkt%29._treelist-filter%29%29), [`treelist-flatten`](https://pre-release.racket-lang.org/doc/reference/treelist.html#%28def._%28%28lib._racket%2Ftreelist..rkt%29._treelist-flatten%29%29), et cetera.
  - The [`mutable-treelist-prepend!`](https://pre-release.racket-lang.org/doc/reference/treelist.html#%28def._%28%28lib._racket%2Fmutable-treelist..rkt%29._mutable-treelist-prepend%21%29%29) function allows prepending to mutable treelists.
  - [Mutable treelists](https://pre-release.racket-lang.org/doc/reference/treelist.html#%28part._.Mutable_.Treelists%29) are [serializable](https://pre-release.racket-lang.org/doc/reference/serialization.html).

- The [`serialize-structs`](https://pre-release.racket-lang.org/doc/reference/serialization.html#%28mod-path._racket%2Fserialize-structs%29) module allows the minimization of dependencies by providing only a handful of core forms.
- The [`flbit-field`](https://pre-release.racket-lang.org/doc/reference/flonums.html#%28def._%28%28lib._racket%2Fflonum..rkt%29._flbit-field%29%29) function allows access to the binary representation of IEEE floating-point numbers.
- The top-left search box in the [documentation](https://pre-release.racket-lang.org/doc/index.html) works once more.
- The [XML reader](https://pre-release.racket-lang.org/doc/xml/index.html#%28part._.Reading_and_.Writing_.X.M.L%29) 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](https://pre-release.racket-lang.org/doc/reference/regexp.html#(part._regexp-syntax)), following Perl and PCRE.
- The [`read-json*`](https://pre-release.racket-lang.org/doc/json/index.html#%28def._%28%28submod._%28lib._json%2Fmain..rkt%29._for-extension%29._read-json%2A%29%29) and [`write-json*`](https://pre-release.racket-lang.org/doc/json/index.html#%28def._%28%28submod._%28lib._json%2Fmain..rkt%29._for-extension%29._write-json%2A%29%29) 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`](https://pre-release.racket-lang.org/doc/reference/port-lib.html#%28def._%28%28lib._racket%2Fport..rkt%29._open-input-nowhere%29%29) function creates an empty input port.
  - The [`pipe-port?`](https://pre-release.racket-lang.org/doc/reference/pipeports.html#%28def._%28%28quote._~23~25kernel%29._pipe-port~3f%29%29) function makes it possible to determine whether a port is created by [`make-pipe`](https://pre-release.racket-lang.org/doc/reference/pipeports.html#%28def._%28%28quote._~23~25kernel%29._make-pipe%29%29).
  - The [`port-file-stat`](https://pre-release.racket-lang.org/doc/reference/file-ports.html#%28def._%28%28quote._~23~25kernel%29._port-file-stat%29%29) function allows gathering information about the file that is the source or target of a file-stream port.

- A [revised representation](https://racket.discourse.group/t/fixnum-slow-despite-docs/3409/6) of pointers improves the performance of foreign function calls. As a result, [`ptr-ref`](https://pre-release.racket-lang.org/doc/foreign/foreign_pointer-funcs.html#%28def._%28%28quote._~23~25foreign%29._ptr-ref%29%29) and [`ptr-set!`](https://pre-release.racket-lang.org/doc/foreign/foreign_pointer-funcs.html#%28def._%28%28quote._~23~25foreign%29._ptr-set%21%29%29) are substantially faster.
- In anticipation of the fifteenth [RacketCon](https://con.racket-lang.org), the [`fifteenth`](https://pre-release.racket-lang.org/doc/reference/pairs.html#%28def._%28%28lib._racket%2Flist..rkt%29._fifteenth%29%29) function returns the fifteenth element of a list.
- Racket has an improved multi-line convention for error messages.
- The [`db` library](https://pre-release.racket-lang.org/doc/db/index.html) allows [`prepare`](https://pre-release.racket-lang.org/doc/db/query-api.html#%28def._%28%28lib._db%2Fbase..rkt%29._prepare%29%29) on virtual statements.
- The [`student-t` distribution](https://pre-release.racket-lang.org/doc/math/Real_Distribution_Families.html#%28part._.Student-t_.Distributions%29) is part of the [`math/distributions` library](https://pre-release.racket-lang.org/doc/math/dist.html).
- [Expeditor](https://pre-release.racket-lang.org/doc/expeditor/index.html) supports customizing the prompt, using the [`#:prompt` keyword argument to `call-with-expeditor`](https://pre-release.racket-lang.org/doc/expeditor/Expeditor_API.html#%28def._%28%28lib._expeditor%2Fmain..rkt%29._call-with-expeditor%29%29).
- There is a [guide to adding internationalization for a new (human) language.](https://racket.discourse.group/t/advent-2024-day-translate-drracket-interface-in-your-language/3407)
- Optimizations to racket/profile improve asymptotic speed for very large call graphs.
- The `#lang htdp/asl` language incorporates [Graphical Debugger](https://docs.racket-lang.org/drracket/debugger.html#%28part._.Debugger_.Buttons%29) support.
- There is lots of new documentation, and many defects repaired!

---

<div class="post-metadata">

**Author:** ![jbclements](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/jbclements/32/11_2.png) [@jbclements](https://racket.discourse.group/u/jbclements)\
**Post date:** [March 2, 2025, 6:35pm UTC](https://racket.discourse.group/t/racket-v8-16-draft-release-notes/3518/13 "2025-03-02T18:35:29Z")

</div>

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

```scheme
----------------------------------------------------------------------

- 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.

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

```

---

<div class="post-metadata">

**Author:** ![jbclements](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/jbclements/32/11_2.png) [@jbclements](https://racket.discourse.group/u/jbclements)\
**Post date:** [March 2, 2025, 6:36pm UTC](https://racket.discourse.group/t/racket-v8-16-draft-release-notes/3518/14 "2025-03-02T18:36:39Z")

</div>

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!

---

<div class="post-metadata">

**Author:** ![jbclements](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/jbclements/32/11_2.png) [@jbclements](https://racket.discourse.group/u/jbclements)\
**Post date:** [March 2, 2025, 6:47pm UTC](https://racket.discourse.group/t/racket-v8-16-draft-release-notes/3518/15 "2025-03-02T18:47:45Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![sorawee](https://avatars.discourse-cdn.com/v4/letter/s/ea5d25/32.png) [@sorawee](https://racket.discourse.group/u/sorawee)\
**Post date:** [March 2, 2025, 6:59pm UTC](https://racket.discourse.group/t/racket-v8-16-draft-release-notes/3518/16 "2025-03-02T18:59:06Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![jbclements](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/jbclements/32/11_2.png) [@jbclements](https://racket.discourse.group/u/jbclements)\
**Post date:** [March 2, 2025, 7:18pm UTC](https://racket.discourse.group/t/racket-v8-16-draft-release-notes/3518/17 "2025-03-02T19:18:35Z")

</div>

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:

```scheme
--------------------------------------------------------------------------------
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.

```

---

<div class="post-metadata">

**Author:** ![jbclements](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/jbclements/32/11_2.png) [@jbclements](https://racket.discourse.group/u/jbclements)\
**Post date:** [March 2, 2025, 7:19pm UTC](https://racket.discourse.group/t/racket-v8-16-draft-release-notes/3518/18 "2025-03-02T19:19:03Z")

</div>

bullet rewording welcome, BTW!

---

<div class="post-metadata">

**Author:** ![jbclements](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/jbclements/32/11_2.png) [@jbclements](https://racket.discourse.group/u/jbclements)\
**Post date:** [March 2, 2025, 7:22pm UTC](https://racket.discourse.group/t/racket-v8-16-draft-release-notes/3518/19 "2025-03-02T19:22:01Z")

</div>

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