Release Announcement for v8.14

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


4 Likes

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

?

  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.

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

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

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?

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

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

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?

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


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

Yes, that's the plan.

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


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.

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

1 Like

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.

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

1 Like

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.

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.

I took both of these suggestions, many thanks.

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.