# Release Announcement for v8.14

**URL:** https://racket.discourse.group/t/release-announcement-for-v8-14/3048
**Category:** Internals
**Tags:** release-management, release
**Created:** [July 24, 2024, 3:09pm UTC](https://racket.discourse.group/t/release-announcement-for-v8-14/3048 "2024-07-24T15:09:39Z")
**Posts on this page:** 20
**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: [July 24, 2024, 3:09pm UTC](https://racket.discourse.group/t/release-announcement-for-v8-14/3048/1 "2024-07-24T15:09:39Z")

</div>

```
The release announcement sketch that I have so far is below. Please
mail me new items and/or edits.

Please phrase announcements using complete sentences and avoid the
word "now".

```

* * *

- Demodularization is more flexible, with better support for libraries  
and definition pruning. The `compiler/demod` language facilitates  
these changes.

- Identifiers such as `case-λ`, `match-λ` and `λ` are equivalent to  
their latin-alphabet equivalents (`case-lambda`, `match-lambda`, and  
`lambda`) in more contexts, including uses of `match`.

- The `hash-filter` function allows the use of a predicate to select a  
sub-table of a hash table.

- The module browser can perform filtering on submodules.

- The `equal-always?` predicate is more correct than before for paths,  
fxvectors, flvectors, extflvectors, and stencil vectors.

- The `raco test` command-line form respects the  
`current-test-invocation-directory` parameter, and shows well-formed  
module paths in its output.

- The `contract-in` form has the same features as `contract-out`.

- The `#%declare` form supports the `#:flatten-requires` and  
`#:unlimited-compile` keywords

- Racket CS allows the use of in-memory boot files.

- The `raco/testing` collection brings together a variety of testing-  
related functions and forms.

- This release also includes many bug-fixes and documentation updates!

The following people contributed to this release:

Alex Knauth, Alexander Shopov, Ben Greenman, Bert De Ketelaere, Bob  
Burger, Bogdan Popa, Cadence Ember, Carl Gay, D. Ben Knoble, Gregory  
Rosenblatt, Gustavo Massaccesi, John Clements, John Sullivan, Jordan  
Johnson, luistung, Matthew Flatt, Matthias Felleisen, Noah Ma, Philip  
McGrath, Robby Findler, Ryan Culpepper, Sam Tobin-Hochstadt, Sergey  
Fedorov, Sorawee Porncharoenwase, Wing Hei Chan, and ZhangHao

* * *

---

<div class="post-metadata">

### Author: ![robby](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/robby/32/7_2.png) [@robby](https://racket.discourse.group/u/robby)
#### Post date: [July 24, 2024, 4:51pm UTC](https://racket.discourse.group/t/release-announcement-for-v8-14/3048/2 "2024-07-24T16:51:26Z")

</div>

I think we refrained from mentioning `contract-in` in the last release so how about a bullet like:

- `contract-in` enables contracts to be specified in the importing module

?

---

<div class="post-metadata">

### Author: ![samth](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/samth/32/3_2.png) [@samth](https://racket.discourse.group/u/samth)
#### Post date: [July 24, 2024, 6:04pm UTC](https://racket.discourse.group/t/release-announcement-for-v8-14/3048/3 "2024-07-24T18:04:49Z")

</div>

1. We should write a significantly more extensive bullet for the demodularizer changes.
2. `raco/testing` isn't significant. Neither is the `equal-always?` bug fix.
3. The `contract-in` addition is probably the second most important change, followed by the additions to `#%declare`.

---

<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: [July 24, 2024, 6:45pm UTC](https://racket.discourse.group/t/release-announcement-for-v8-14/3048/4 "2024-07-24T18:45:04Z")

</div>

I disagree with "`raco/testing` isn't significant". If anyone writes a testing framework, they should know that the library to use is moved.

---

<div class="post-metadata">

### Author: ![shawnw](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/shawnw/32/1031_2.png) [@shawnw](https://racket.discourse.group/u/shawnw)
#### Post date: [July 26, 2024, 1:59am UTC](https://racket.discourse.group/t/release-announcement-for-v8-14/3048/5 "2024-07-26T01:59:53Z")

</div>

It would be nice if the bug fixes were actually listed out.

---

<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: [July 26, 2024, 11:25am UTC](https://racket.discourse.group/t/release-announcement-for-v8-14/3048/6 "2024-07-26T11:25:59Z")

</div>

Oh, interesting. Since we haven't ever mentioned contract-in, it sounds to me like we should use your bullet _instead_ of the other one, right?

---

<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: [July 26, 2024, 11:36am UTC](https://racket.discourse.group/t/release-announcement-for-v8-14/3048/7 "2024-07-26T11:36:04Z")

</div>

"Significantly" more extensive? I get paid by the word here, you know 🙂

My understanding of compiler/demod is shallow, so the more I write, the less correct it's likely to be. I would say something like this:

...

Actually, I'm struggling with wording this in a way that doesn't push lots of people toward using demodularization. I think it would be easy to get the sense that demodularization confers some fantastic benefit, when IIUC the principal benefit is a 25% reduction in load times? I do see that for modules such as lang/rhombus (IIUC), this is significant. Okay let me try again.

...

Demodularization rewrites programs during compilation to bundle cross-file dependencies, which can reduce load times (and compiled size?). Doing this correctly for libraries requires significant configuration, which is made possible by the `compiler/demod` language. Programs in the `compiler/demod` language are specifications of the way in which another module should be demodularized during the build process.

Not sure I like that better, feel free to suggest edits. I do think that this is one of the places where we might consider a use of one of those precious `now`s.

---

<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: [July 26, 2024, 11:37am UTC](https://racket.discourse.group/t/release-announcement-for-v8-14/3048/8 "2024-07-26T11:37:03Z")

</div>

There are literally dozens, probably hundreds of these. I think that enumerating them would be time-consuming and of limited value. Perhaps we could direct people to the commit logs?

---

<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: [July 29, 2024, 3:12pm UTC](https://racket.discourse.group/t/release-announcement-for-v8-14/3048/9 "2024-07-29T15:12:33Z")

</div>

I've adopted Robby's contract-in bullet instead of the existing one, reordered the bullets per Sam's suggestion, removed the equal-always fixes bullet, and substituted my alternate text for demodularization, though I would very much appreciate some feedback in that regard. Here's what I have now:

* * *

- Demodularization rewrites programs during compilation to bundle  
cross-file dependencies, which can reduce load times (and compiled  
size?). Doing this correctly for libraries requires significant  
configuration, which is made possible by the `compiler/demod`  
language. Programs in the `compiler/demod` language are specifications  
of the way in which another module should be demodularized during the  
build process.

- The `contract-in` form enables contracts to be specified in an importing  
module.

- The `#%declare` form supports the `#:flatten-requires` and  
`#:unlimited-compile` keywords

- Identifiers such as `case-λ`, `match-λ` and `λ` are equivalent to  
their latin-alphabet equivalents (`case-lambda`, `match-lambda`, and  
`lambda`) in more contexts, including uses of `match`.

- The `hash-filter` function allows the use of a predicate to select a  
sub-table of a hash table.

- The module browser can perform filtering on submodules.

- The `raco test` command-line form respects the  
`current-test-invocation-directory` parameter, and shows well-formed  
module paths in its output.

- Racket CS allows the use of in-memory boot files.

- The `raco/testing` collection brings together a variety of testing-  
related functions and forms.

- This release also includes many bug-fixes and documentation updates!

The following people contributed to this release:

Alex Knauth, Alexander Shopov, Ben Greenman, Bert De Ketelaere, Bob  
Burger, Bogdan Popa, Cadence Ember, Carl Gay, D. Ben Knoble, Gregory  
Rosenblatt, Gustavo Massaccesi, John Clements, John Sullivan, Jordan  
Johnson, luistung, Matthew Flatt, Matthias Felleisen, Noah Ma, Philip  
McGrath, Robby Findler, Ryan Culpepper, Sam Tobin-Hochstadt, Sergey  
Fedorov, Sorawee Porncharoenwase, Wing Hei Chan, and ZhangHao

* * *

---

<div class="post-metadata">

### Author: ![cadence](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/cadence/32/998_2.png) [@cadence](https://racket.discourse.group/u/cadence)
#### Post date: [July 31, 2024, 10:33pm UTC](https://racket.discourse.group/t/release-announcement-for-v8-14/3048/10 "2024-07-31T22:33:45Z")

</div>

> [@jbclements](#):
>
> Demodularization rewrites programs during compilation to bundle  
> cross-file dependencies, which can reduce load times (and compiled  
> size?). Doing this correctly for libraries requires significant  
> configuration, which is made possible by the `compiler/demod`  
> language. Programs in the `compiler/demod` language are specifications  
> of the way in which another module should be demodularized during the  
> build process.

> [@jbclements](#):
>
> Racket CS allows the use of in-memory boot files.

In the final release announcement, these will have links to documentation showing me how to activate the new features, right?

---

<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: [August 1, 2024, 3:46pm UTC](https://racket.discourse.group/t/release-announcement-for-v8-14/3048/11 "2024-08-01T15:46:38Z")

</div>

Yes, that's the plan.

---

<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: [August 8, 2024, 2:34pm UTC](https://racket.discourse.group/t/release-announcement-for-v8-14/3048/12 "2024-08-08T14:34:24Z")

</div>

Okay, about ready for the final build. Here are the release notes as they now stand; the only new thing here is the note about the windows build problem.

* * *

- Demodularization rewrites programs during compilation to bundle  
cross-file dependencies, which can reduce load times (and compiled  
size?). Doing this correctly for libraries requires significant  
configuration, which is made possible by the `compiler/demod`  
language. Programs in the `compiler/demod` language are specifications  
of the way in which another module should be demodularized during the  
build process.

- The `contract-in` form enables contracts to be specified in an importing  
module.

- The `#%declare` form supports the `#:flatten-requires` and  
`#:unlimited-compile` keywords

- Identifiers such as `case-λ`, `match-λ` and `λ` are equivalent to  
their latin-alphabet equivalents (`case-lambda`, `match-lambda`, and  
`lambda`) in more contexts, including uses of `match`.

- The `hash-filter` function allows the use of a predicate to select a  
sub-table of a hash table.

- The module browser can perform filtering on submodules.

- The `raco test` command-line form respects the  
`current-test-invocation-directory` parameter, and shows well-formed  
module paths in its output.

- Racket CS allows the use of in-memory boot files.

- The `raco/testing` collection brings together a variety of testing-  
related functions and forms.

- This release also includes many bug-fixes and documentation updates!

- NOTE: This release (and version 8.13) have a known build problem that  
affects the builtpkgs source bundle on Windows. In order to avoid this  
problem, use a pre-built bundle or build using a source bundle other  
than the `builtpkgs` one. Nightly builds do not suffer from this  
problem.

The following people contributed to this release:

Alex Knauth, Alexander Shopov, Ben Greenman, Bert De Ketelaere, Bob  
Burger, Bogdan Popa, Cadence Ember, Carl Gay, D. Ben Knoble, Gregory  
Rosenblatt, Gustavo Massaccesi, John Clements, John Sullivan, Jordan  
Johnson, luistung, Matthew Flatt, Matthias Felleisen, Noah Ma, Philip  
McGrath, Robby Findler, Ryan Culpepper, Sam Tobin-Hochstadt, Sergey  
Fedorov, Sorawee Porncharoenwase, Wing Hei Chan, and ZhangHao

* * *

---

<div class="post-metadata">

### Author: ![samth](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/samth/32/3_2.png) [@samth](https://racket.discourse.group/u/samth)
#### Post date: [August 8, 2024, 2:37pm UTC](https://racket.discourse.group/t/release-announcement-for-v8-14/3048/13 "2024-08-08T14:37:03Z")

</div>

Here's a suggestion.

The `compiler/demod` language integrates demodularization into the program rather than an external tool. Using the language approach cooperates with other Racket tools and allows demodularization to be used in libraries. Additionally demodularization handles submodules, and can now prune definitions, significantly shrinking the size of some programs.

---

<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: [August 8, 2024, 3:55pm UTC](https://racket.discourse.group/t/release-announcement-for-v8-14/3048/14 "2024-08-08T15:55:59Z")

</div>

We have the Windows arm64 build in this release as well, right? Should we announce that as well?

---

<div class="post-metadata">

### Author: ![encomer](https://yyz2.discourse-cdn.com/free1/user_avatar/racket.discourse.group/encomer/32/280_2.png) [@encomer](https://racket.discourse.group/u/encomer)
#### Post date: [August 8, 2024, 4:11pm UTC](https://racket.discourse.group/t/release-announcement-for-v8-14/3048/15 "2024-08-08T16:11:31Z")

</div>

Suggestions about two very minor points:

1). Update the font type of the first instance of the word `builtpkgs` in the NOTE.  
2). Add the final period, for the paragraph of the people that contributed to this release.

Another point associated with the words "(and compiled size?)" concerning demodularization, in order to substitute the use of the _question mark_, is subsumed in the proposal of @samth.

Thank you very much for your outstanding work. It is much appreciated.  
_Kind regards_.

---

<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: [August 8, 2024, 10:46pm UTC](https://racket.discourse.group/t/release-announcement-for-v8-14/3048/16 "2024-08-08T22:46:55Z")

</div>

It is okay to include the "When upgrading" suggestion on [https://download.racket-lang.org/](https://download.racket-lang.org/) in the release (blog) post?

---

<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: [August 9, 2024, 1:23pm UTC](https://racket.discourse.group/t/release-announcement-for-v8-14/3048/17 "2024-08-09T13:23:55Z")

</div>

For sure, yes! Here's my proposed bullet:

- 64-bit ARM Windows is one of the standard pre-built downloads.

I think this should be the first bullet.

---

<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: [August 9, 2024, 1:29pm UTC](https://racket.discourse.group/t/release-announcement-for-v8-14/3048/18 "2024-08-09T13:29:03Z")

</div>

Okay, I used your wording, with several minor edits (removed "now", moved some commas around, changed an "in" to "on". How's this?

- The compiler/demod language integrates demodularization into the  
program rather than an external tool. Using the language approach  
cooperates with other Racket tools and allows demodularization to be  
used on libraries. Additionally, demodularization handles submodules  
and can prune definitions, significantly shrinking the size of some  
programs.

---

<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: [August 9, 2024, 1:29pm UTC](https://racket.discourse.group/t/release-announcement-for-v8-14/3048/19 "2024-08-09T13:29:34Z")

</div>

I took both of these suggestions, many thanks.

---

<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: [August 9, 2024, 1:38pm UTC](https://racket.discourse.group/t/release-announcement-for-v8-14/3048/20 "2024-08-09T13:38:16Z")

</div>

Hmm... I feel like those instructions are very likely to be seen when people are downloading the new release, no? With that said, I don't feel strongly about this. Also, @spdegabrielle adds all of the pretty stuff to the release notes, he should be a part of the conversation.

[Next page](https://racket.discourse.group/t/release-announcement-for-v8-14/3048.md?page=2)
