Release Announcement for v8.18

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


As of this release:

  • Racket uses Unicode 16.0 for character and string operations.
  • XML structures are serializable.
  • Scribble's HTML generation conforms better to modern standards.
  • The redex-check default generation strategy always uses random generation to supplement the enumerator.
  • DrRacket supports the use of shift-tab to go backward to previous indentation positions.
  • The macro stepper supports the string-constants library, allowing internationalization of the stepper itself.
  • The struct form supports #:properties prop-alist-expr, making it more convenient to attach multiple property values to a structure type.
  • Build-system improvements support containers registered at Docker Hub to build for all platforms that have downloads form the main Racket download site; improvements also support Unix-style builds for Mac OS in the style of MacPorts.
  • The expt function produces a more accurate result when its first argument is a flonum and its second argument is an exact integer that has no equivalent flonum representation than it did in prior versions.
  • TCP ports use SO_KEEPALIVE correctly.
  • The Uninterruptible mode allows futures-based computations to run both concurrently and uninterrupted in an atomic-like mode.
  • The net/imap library supports IMAP's move operation.
  • There are many other repairs and documentation improvements!

Package regressions:


(N.B. just made small edit "tab" -> "indentation" in above.)

Should the announcement mention the end of pre-built BC downloads, and other changes/additions to the set of downloads offered?

If so, I'd probably add that to the top of the list, and I might move the Unicode update toward the bottom, as noteworthy but routine.

Stylistically, I don't like The Uninteruptable mode. The docs capitalize "uninteruptable" only at the beginning of a sentence. I'd probably use italcs or quotation marks. Maybe something like:

  • Unsafe code can use ā€œuninteruptable modeā€ instead of ā€œatomic modeā€ to allow futures to run concurrently while preventing interruptions from other threads.

Just a minor typo in Build-system improvements paragraph: It says "downloads form" but should say "downloads from". Please verify. Thank you for all your fine work.

Well, aside from my nit-pick that "uninterruptible" has an "i" before the "b", a fact I just learned and am eager to share, I support this rewording, especially because I was very uncertain about the accuracy of my own summary. Thanks!

Um... but now I have a question about the use of "unsafe" in this context. Would it be any less accurate to remove the word unsafe, and just say "Code can use ..." ?

I agree that the removal of BC builds should probably be mentioned, along with the new Linux builds.

Here's what I have now:

As of this release:

  • The racket-lang.org website no longer distributes Racket BC bundles, but it includes pre-built bundles for two flavors of ARM linux, AArch64 and 32-bit ARMv6 VFP.
  • Racket uses Unicode 16.0 for character and string operations.
  • XML structures are serializable.
  • Scribble's HTML generation conforms better to modern standards.
  • The redex-check default generation strategy always uses random generation to supplement the enumerator.
  • DrRacket supports the use of shift-tab to go backward to previous indentation positions.
  • The macro stepper supports the string-constants library, allowing internationalization of the stepper itself.
  • The struct form supports #:properties prop-alist-expr, making it more convenient to attach multiple property values to a structure type.
  • Build-system improvements support containers registered at Docker Hub to build for all platforms that have downloads from the main Racket download site; improvements also support Unix-style builds for Mac OS in the style of MacPorts.
  • The expt function produces a more accurate result when its first argument is a flonum and its second argument is an exact integer that has no equivalent flonum representation than it did in prior versions.
  • TCP ports use SO_KEEPALIVE correctly.
  • Unsafe code can use ā€œuninterruptible modeā€ instead of ā€œatomic modeā€ to allow futures to run concurrently while preventing interruptions from other threads.
  • The Uninterruptable mode allows futures-based computations to run both concurrently and uninterrupted in an atomic-like mode.
  • The net/imap library supports IMAP's move operation.
  • There are many other repairs and documentation improvements!

got this one too, many things

Spelling :wink: but if I re-read carefully, I think we intended to drop the second bullet altogether?

Glug... changed upstream, didn't re-generate. Here goes, straight from the source, and including contributors as well:

As of this release:

  • The racket-lang.org website no longer distributes Racket BC bundles, but it includes pre-built bundles for two flavors of ARM linux, AArch64 and 32-bit ARMv6 VFP.
  • XML structures are serializable.
  • Scribble's HTML generation conforms better to modern standards.
  • Racket uses Unicode 16.0 for character and string operations.
  • The redex-check default generation strategy always uses random generation to supplement the enumerator.
  • DrRacket supports the use of shift-tab to go backward to previous indentation positions.
  • The macro stepper supports the string-constants library, allowing internationalization of the stepper itself.
  • The struct form supports #:properties prop-alist-expr, making it more convenient to attach multiple property values to a structure type.
  • Build-system improvements support containers registered at Docker Hub to build for all platforms that have downloads from the main Racket download site; improvements also support Unix-style builds for Mac OS in the style of MacPorts.
  • The expt function produces a more accurate result when its first argument is a flonum and its second argument is an exact integer that has no equivalent flonum representation than it did in prior versions.
  • TCP ports use SO_KEEPALIVE correctly.
  • Unsafe code can use ā€œuninterruptible modeā€ instead of ā€œatomic modeā€ to allow futures to run concurrently while preventing interruptions from other threads.
  • The net/imap library supports IMAP's move operation.
  • There are many other repairs and documentation improvements!

Thank you

The following people contributed to this release:

Bob Burger, Bogdan Popa, Carl Gay, Chloé Vulquin, D. Ben Knoble, Gustavo Massaccesi, Jacqueline Firth, Jade Sailor, Jarhmander, Jason Hemann, Jens Axel Søgaard, Joel Dueck, John Clements, jyn, Jörgen Brandt, Mao Yifu, Marc Nieper-Wißkirchen, Matthew Flatt, Matthias Felleisen, Mike Sperber, Noah Ma, paralogismos, Pavel Panchekha, Philip McGrath, Robby Findler, Ryan Culpepper, Sam Tobin-Hochstadt, Shalok Shalom, Steve Byan, Vincent Lee, Wing Hei Chan, and ZC Findler.

It would in a sense be true, but any code that used uninterruptible mode would become unsafe, because uninterruptible mode, like atomic mode, is unsafe.

I think the "Build-system improvements" bullet is too brief; I don't understand what it refers to.

Matthew has built infrastructure in the distro-build library and (I believe) created a bunch of new docker images, to make it vastly more convenient to run builds using docker exclusively, eliminating the need to set up and maintain build machines that use old, sometimes insecure operating systems and are open on the internet.

Perhaps the key missing element here is a reference to the distro-build library? Maybe something like this:

New code in the distro-build library and new containers registered at Docker Hub make it possible
to run racket build farms without setting up and maintaining machines using various operating systems. These improvements also support Unix-style builds for Mac OS in the style of MacPorts.

?

Build-system improvements support containers registered at Docker Hub to build for all platforms that have downloads from the main Racket download site; improvements also support Unix-style builds for Mac OS in the style of MacPorts.

Okay, many thanks, I might understand slightly better. I will leave the word "Unsafe" in there!

This is only relevant for users of distro-build, right? That's a very small set of people. In which case a good bullet might be:

The distro-build package has improved support for building using docker images.

1 Like

This works for me, though I'd be inclined to replace "improved support" with "new infrastructure"; there's a whole new layer to the build system, essentially.

  • The distro-build package has new infrastructure for building using docker images.

Does that make sense to y'all?

Or perhaps:

The distro-build package has new infrastructure for build farms using docker images.

Either of those seem fine.

Shouldn't this be

  • The struct form supports #:properties prop-list-expr, making it more convenient to attach multiple property values to a structure type.

The commit comment agrees " struct: add #:properties prop-alist-expr option" struct: add `#:properties prop-alist-expr` option Ā· racket/racket@bf08ef2 Ā· GitHub

But the docs have #:properties prop-list-expr

The #:properties option, which can be supplied multiple times, accepts multiple properties and their values as an association list.

I feel this is a small inconsistency - but should it be changed?

Stephen

The inconsistency doesn't bother me much, especially at this stage. Either way is fine with me.

One other issue: I noticed the "Thanks" list of names in the draft announcement is formatted as a list of separate lines rather than as a single paragraph. (To clarify: I'm talking about the draft post here on Discourse.)

1 Like

Thanks
I’ve fixed the line breaks thing. Sadly we are trapped between soft and hard wrapping.
S.

I may be misunderstanding, but I think that I just kind of coincidentally fixed this a few weeks ago; that is, I think the markdown generated for the post should contain a single long line for the contributors. I'm guessing I did that after posting the draft announcement. Perhaps I'm mistaken, I'll go do some digging.