# Racket changelog > A general-purpose, multi-paradigm Lisp descendant and a platform for programming-language design. - Vendor: Racket - Category: Languages & Runtimes - Official site: https://racket-lang.org - Tracked by: What's New (https://whatsnew.fyi/product/racket) - Harvested from: GitHub (racket/racket) - Entries below: 10 (newest first) What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. ## Releases ### v9.3 — Racket v9.3 - Date: 2026-08-13 - Version: v9.3 - Original notes: https://github.com/racket/racket/releases/tag/v9.3 - Permalink: https://whatsnew.fyi/product/racket/releases/v9.3 - **added** — The `raco setup` command can generate markdown documentation using the `--doc-markdown` option - **changed** — The "#lang" teaching languages (BSL, ISL+, DeinProgram) have reached parity with the ones chosen using the Language dialog and are the recommended choice - **changed** — DrRacket's background expansion disables errortrace annotations for faster syntax checking - **added** — The `raco pkg install` command includes new options `--adjacent-deps`, `--destdir`, and `--attach`, and a refined `--skip-installed` - **added** — The `ffi/unsafe/runtime-lib` library provides a `define-runtime-lib` mechanism similar to `define-runtime-path` for locating libraries relative to a source file - **changed** — The `prompt-tag/c` contract generator no longer performs checking on `call/cc` when the `#:call/cc` option is not present - **changed** — The `impersonate-prompt-tag` function takes an additional argument allowing checking and update of results for composable continuations - **added** — The `error-syntax->srcloc-handler` parameter provides control over the mapping from syntactic forms to source locations for error handling - **changed** — Uses of `(tcp-listen 0)` will retry when it fails with "address in use" - **changed** — The `racket/base` module requires fewer internal modules and instantiations - **added** — The `file/zip` package provides a new mechanism for greatly increased control over zip file generation, allowing in-memory file sources and per-file compression control ---------------------------------------------------------------------- - The `raco setup` command can generate markdown documentation, using the `--doc-markdown` option. - The "#lang" teaching languages (BSL, ..., ISL+; plus DeinProgram) have reached parity with the ones chosen using the Language dialog, and are the recommended choice. - DrRacket's background expansion disables errortrace annotations, for faster syntax checking. - The `raco pkg install` command includes new options that provide more install-time configuration flexibility: `--adjacent-deps`, `--destdir`, and `--attach`, and a refined `--skip-installed`. - The `ffi/unsafe/runtime-lib` library provides a `define-runtime-lib` mechanism similar to `define-runtime-path`, allowing location of libraries located relative to a source file. - The `prompt-tag/c` contract generator no longer performs checking on `call/cc` when the `#:call/cc` option is not present. - The `impersonate-prompt-tag` function takes an additional argument that allows checking and update of results for composable continuations. - The `error-syntax->srcloc-handler` parameter provides control over the mapping from syntactic forms to source locations for error handling. - Uses of `(tcp-listen 0)` will retry when it fails with "address in use". - The `racket/base` module requires fewer internal modules and instantiations. - The `file/zip` package provides a new mechanism for greatly increased control over zip file generation, allowing in-memory file sources and per-file compression control. The following people contributed to this release: Alex Knauth, Alexander Shopov, Aris Spathis, Bert De Ketelaere, Bob Burger, Caleb Mazalevskis, Cameron Moy, Geoffrey J. Teale, Gustavo Massaccesi, Hannes Braun, Jade Sailor, Jason Hemann, Jens Axel Søgaard, John Clements, Jordan Johnson, Matthew Flatt, Matthias Felleisen, Mike Sperber, Nathan Dykman, Noah Ma, Philip McGrath, Robby Findler, Romeo Ahmed, Sam Tobin-Hochstadt, Shu-Hung You, Stefan Schwarzer, Stephen De Gabrielle, and Wing Hei Chan. ---------------------------------------------------------------------- ### v9.2 — Racket v9.2 - Date: 2026-05-28 - Version: v9.2 - Original notes: https://github.com/racket/racket/releases/tag/v9.2 - Permalink: https://whatsnew.fyi/product/racket/releases/v9.2 - **fixed** — The match form checks that non-linear patterns with ... have equal parts and rejects non-linear patterns where one use of a variable has ... and another does not - **fixed** — Typed Racket's types for asin and acos procedures correctly handle situations where the function produces a complex number - **added** — The #%foreign-inline core syntactic form provides unsafe access to facilities provided at the linklet layer by a Racket implementation - **changed** — Unicode 17.0 is used for character and string operations - **added** — Internal support for a more static ffi2 foreign interface - **added** — The terminal-file-position function counts bytes written to ports connected to a terminal, such as stdin and stderr - **changed** — Cross-phase persistent modules allow more types of quoted data - **changed** — The implementations of member, memw, when, unless, let/ec, and cond are rewritten to use only racket/kernel syntax - **added** — The impersonator-property-predicate-procedure? function identifies procedures created by make-impersonator-property - **changed** — In Typed Racket, polymorphic struct types are printed using type arguments rather than exposing an internal representation - **changed** — The stepper's display of numbers better matches the language settings - **changed** — Scribble documents that do not use the Racket-manual style get an initial-scale of 1.0 instead of 0.8, but this can be configured using the initial-scale property - **changed** — By default, margin notes appear inline for narrow displays in all styles, not just in the Racket-manual style - **fixed** — Big-bang programs distributed as .dmg files correctly handle the close-on-stop feature ---------------------------------------------------------------------- - The `match` form checks that when non-linear patterns (patterns where the same variable is used multiple times) are used with `...`, the two parts of the matched value actually are equal. Additionally, match rejects non-linear patterns where one use of the variable is used with `...` and another is not. This repair could cause existing code to fail. - Typed Racket's types for the `asin` and `acos` procedures correctly handle situations where the function produces a complex number, avoiding unsound results that were previously possible. This repair could cause existing code to fail at compile time. - The `#%foreign-inline` core syntactic form provides unsafe access to facilities provided at the linklet layer by a Racket implementation. This means that any code that handles all core forms by enumeration will need to be updated. - Unicode 17.0 is used for character and string operations. - This release includes internal support for a more static "ffi2" foreign interface (to be used in a future package). - The `terminal-file-position` function counts bytes written to ports connected to a terminal, such as `stdin` and `stderr`. - Cross-phase persistent modules allow more types of `quote`d data. - The implementations of `member`, `memw`, `when`, `unless`, `let/ec`, and `cond` are rewritten to use only `racket/kernel` syntax - The `impersonator-property-predicate-procedure?` function identifies procedures created by `make-impersonator-property`. - In Typed Racket, polymorphic struct types are printed using type arguments (e.g., `(Array Byte)`) rather than exposing an internal representation. - The stepper's display of numbers better matches the language settings. - Scribble documents that do not use the Racket-manual style get an `initial-scale` of 1.0, instead of the manual style's 0.8, but this can be configured using the `initial-scale` property. - By default, margin notes appear inline for narrow displays in all styles, not just in the Racket-manual style. - Big-bang programs distributed as .dmg files correctly handle the `close-on-stop` feature. - There are many other repairs and documentation improvements! The following people contributed to this release: Alexander Shopov, Alexis King, Asilo, Bert De Ketelaere, Bob Burger, Bogdan Popa, Chung-chieh Shan, François-René Rideau, Gustavo Massaccesi, Ilya Klyuchnikov, Jade Sailor, Jamie Taylor, John Clements, Jonathan Simpson, LS_Hower, Matthew Flatt, Matthias Felleisen, Mike Sperber, Pavel Panchekha, Philippe Meunier, RMOlive, Robby Findler, Roman Klochkov, Sam Tobin-Hochstadt, Shu-Hung You, Stephen de Gabrielle, Tejas Sanap, Vincent Lee, and Wing Hei Chan. ---------------------------------------------------------------------- ### v9.1 — Racket v9.1 - Date: 2026-02-24 - Version: v9.1 - Original notes: https://github.com/racket/racket/releases/tag/v9.1 - Permalink: https://whatsnew.fyi/product/racket/releases/v9.1 - **added** — Documentation organization and navigation can be specialized by language family - **added** — The `for` form and its variants accept an `#:on-length-mismatch` specifier - **added** — The `exn-classify-errno` function maps network and filesystem error numbers to posix-standard symbols - **added** — The `make-struct-type` procedure can inherit the current inspector using a `'current` flag - **added** — The `openssl/legacy` library provides access to OpenSSL's legacy provider for insecure and outdated algorithms - **added** — The `system-type` function can report on platform and shared-object-library conventions with new flags - **changed** — Behavior of Racket BC on certain character operations is changed to match Racket CS - **changed** — DrRacket improves the GUI for choosing color schemes - **changed** — DrRacket now displays curved syntax arrows with curvature indicating relative displacement - **changed** — DrRacket's Insert Large Letters uses characters that match the comment syntax of the buffer's language - **changed** — Typed Racket improves expected type propagation for keyword argument functions - **changed** — Bundle configurations can better control conventions for locating shared object files with `--enable-sofind=` flags ---------------------------------------------------------------------- - Documentation organization and navigation can be specialized by language family, to allow users to interact with documentation in a way that is tailored to that language family. This is currently used by Rhombus. - The `for` form and its variants accept an `#:on-length-mismatch` specifier. 3.18 Iterations and Comprehensions: for, for/list, ... - DrRacket improves the GUI for choosing color schemes. - DrRacket has curved syntax arrows. The degree of curvature indicates the relative left- or right-displacement of the arrow's target. - DrRacket's "Insert Large Letters" uses characters that match the comment syntax of the buffer's language, making it useful (and fun!) in Rhombus. - The `exn-classify-errno` maps network and filesystem error numbers on various platforms to posix-standard symbols, to enable more portable code. 10.2 Exceptions - The behavior of Racket BC on certain character operations (most notably `eq?`) is changed to match that of Racket CS, with a small performance penalty for these operations for BC programs. 19 Performance 1.5 Implementations - The `make-struct-type` procedure can inherit the current inspector using a `'current` flag. This is the default behavior, but there are situations in which it's not possible to refer to the current inspector. 5.2 Creating Structure Types - Bundle configurations can better control the conventions for locating shared object files with the `--enable-sofind=` flags. - The `system-type` function can report on platform and shared-object-library conventions with new flags. 15.8 Environment and Runtime Information - The `openssl/legacy` library makes it possible to access OpenSSL's built-in "legacy" provider, to get access to insecure and outdated algorithms. OpenSSL: Secure Communication - Typed Racket improves expected type propagation for keyword argument functions. - There are many other repairs and documentation improvements! The following people contributed to this release: Alexander Shopov, beast-hacker, Bob Burger, Brad Lucier, Cadence Ember, David Van Horn, evan, François-René Rideau, Gustavo Massaccesi, Jacqueline Firth, Jade Sailor, Jason Hemann, Jens Axel Søgaard, John Clements, Jonas Rinke, Matthew Flatt, Matthias Felleisen, Mike Sperber, Noah Ma, Pavel Panchekha, Rob Durst, Robby Findler, Ryan Culpepper, Sam Tobin-Hochstadt, Stephen De Gabrielle, and Wing Hei Chan. ---------------------------------------------------------------------- ### v9.0 — Racket v9.0 - Date: 2025-11-23 - Version: v9.0 - Original notes: https://github.com/racket/racket/releases/tag/v9.0 - Permalink: https://whatsnew.fyi/product/racket/releases/v9.0 - **added** — Racket supports parallel threads that can be created using the `#:pool` argument to thread creation - **added** — Threads created with `#:keep` set to `'results` will record their results for later retrieval with `thread-wait` - **added** — The `black-box` wrapper prevents the optimizing compiler from optimizing away certain computations entirely - **added** — The `decompile-linklet` function can map linklets back to s-expressions - **added** — Distribute natipkg packages for AArch64 useful for package-build and package-testing infrastructure - **added** — The `math` library includes Weibull distributions - **changed** — When using BC Racket, the `processor-count` function is changed to always return the parallel count - **changed** — Check Syntax tracks identifiers more deeply nested in the origin field of syntax objects - **fixed** — Many repairs and documentation improvements ---------------------------------------------------------------------- - Racket supports parallel threads. For more information see the new blog post on the topic. - Parallel threads can be created using the `#:pool` argument to thread creation. - Threads created with `#:keep` set to `'results` will record their results for later retrieval with `thread-wait`. - The `black-box` wrapper prevents the optimizing compiler from optimizing away certain computations entirely. This can be helpful in ensuring that benchmarks are accurate. - The `decompile-linklet` function can map linklets back to s-expressions. - When using BC Racket, the `processor-count` function is changed to always return the parallel count. - We now distribute "natipkg" packages for AArch64, useful for package-build and package-testing infrastructure. - Check Syntax tracks identifiers more deeply nested in the "origin" field of syntax objects. - The `math` library includes Weibull distributions. - There are many other repairs and documentation improvements! The following people contributed to this release: Alexander Shopov, Anthony Carrico, Bert De Ketelaere, Bogdan Popa, Cadence Ember, David Van Horn, Gustavo Massaccesi, Jade Sailor, Jakub Zalewski, Jens Axel Søgaard, jestarray, John Clements, Jordan Johnson, Matthew Flatt, Matthias Felleisen, Mike Sperber, Philip McGrath, RMOlive, Robby Findler, Ruifeng Xie, Ryan Culpepper, Sam Phillips, Sam Tobin-Hochstadt, Sebastian Rakel, shenleban tongying, Shu-Hung You, Stephen De Gabrielle, Steve Byan, and Wing Hei Chan. ---------------------------------------------------------------------- ### v8.18 — Racket v8.18 - Date: 2025-08-22 - Version: v8.18 - Original notes: https://github.com/racket/racket/releases/tag/v8.18 - Permalink: https://whatsnew.fyi/product/racket/releases/v8.18 - **changed** — The racket-lang.org website no longer distributes Racket BC bundles, but includes pre-built bundles for AArch64 and 32-bit ARMv6 VFP ARM linux - **added** — XML structures are serializable - **changed** — Scribble's HTML generation conforms better to modern standards - **changed** — Racket uses Unicode 16.0 for character and string operations - **changed** — The redex-check default generation strategy always uses random generation to supplement the enumerator - **added** — DrRacket supports shift-tab to go backward to previous indentation positions - **added** — The macro stepper supports the string-constants library for internationalization - **added** — The struct form supports #:properties prop-list-expr for attaching multiple property values to a structure type - **changed** — Build-system improvements support containers registered at Docker Hub to build for all platforms and Unix-style builds for Mac OS in the style of MacPorts - **fixed** — 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 - **fixed** — TCP ports use SO_KEEPALIVE correctly - **added** — Unsafe code can use uninterruptible mode instead of atomic mode to allow futures to run concurrently while preventing interruptions from other threads - **added** — The net/imap library supports IMAP's move operation ---------------------------------------------------------------------- - 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-list-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! The following people contributed to this release: Bob Burger, Bogdan Popa, Brad Lucier, 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, Stephen De Gabrielle, Steve Byan, Vincent Lee, Wing Hei Chan, and ZC Findler. ---------------------------------------------------------------------- ### v8.17 — Racket v8.17 - Date: 2025-05-17 - Version: v8.17 - Original notes: https://github.com/racket/racket/releases/tag/v8.17 - Permalink: https://whatsnew.fyi/product/racket/releases/v8.17 - **added** — The new `drracket-core` package provides a version of drracket with a smaller set of dependencies - **added** — Typed Racket has support for treelists - **added** — The `bitwise-first-bit-set` function returns the smallest bit that is set in the twos-complement representation of the given number - **added** — The `error-module-path->string-handler` parameter allows customization of the display of module-paths in error messages - **added** — Racket code using a terminal in Windows can receive mouse events as virtual terminal characters after using SetConsoleMode - **added** — The `#:replace-malformed-surrogate?` keyword can be used to specify a replacement for malformed unicode surrogates in JSON input - **changed** — The package manager computes checksums for packages when required, allowing the use and automatic upgrade of packages without them - **changed** — The `dynamic-require` function allows a syntax-thunk (or 'eval) to be used for syntax bindings - **changed** — Precision of certain numeric functions (`sin`, `cos`, and others) is improved on Windows platforms by using the MSVCRT/UCRT libraries - **changed** — The `string-append` function has improved performance and reduced memory use for long lists of strings in the Racket CS implementation - **changed** — TCP ports use `SO_KEEPALIVE`, instructing the kernel to send periodic messages while waiting for data to check whether the connection is still responsive - **changed** — The http-client module no longer sends "Content-Length: 0" for requests without a body - **changed** — The demodularizer (`compiler/demod`) can prune more unused assignments - **changed** — Several judgment rendering forms in Redex are replaced by functions, allowing more convenient abstraction - **changed** — When a distribution includes no teaching languages, DrRacket's language-dialog configuration moves into the preferences dialog and the "Language" menu disappears - **changed** — The math library has better support for block-diagonal matrices, including both Racket and Typed Racket - **changed** — The math library contains improved implementations of acos and matrix-(cos-)angle - **fixed** — The stepper again works for `big-bang` programs ---------------------------------------------------------------------- - The new `drracket-core` package provides a version of drracket with a smaller set of dependencies. - Typed Racket has support for treelists. - The package manager computes checksums for packages when required, allowing the use and automatic upgrade of packages without them. - The `bitwise-first-bit-set` function returns the smallest bit that is set in the twos-complement representation of the given number. - The updated `dynamic-require` function makes it easier to use syntax bindings by allowing a syntax-thunk (or 'eval) to be used for them. - The `error-module-path->string-handler` parameter allows the customization of the display of module-paths in error messages. - Precision of certain numeric functions (`sin`, `cos`, and others) is improved on Windows platforms by using the MSVCRT/UCRT libraries. - The `string-append` function has improved performance and reduced memory use for long lists of strings in the Racket CS implementation. Differences are clearly noticeable for lists of length 1 million. - TCP ports use `SO_KEEPALIVE`, instructing the kernel to send periodic messages while waiting for data to check whether the connection is still responsive. - Racket code using a terminal in Windows can receive mouse events as virtual terminal characters after using SetConsoleMode. (This is also already possible on macOS and Linux.) See the tui-term package for related example code. - The `#:replace-malformed-surrogate?` keyword can be used to specify a replacement for malformed unicode surrogates in JSON input - The http-client module no longer sends "Content-Length: 0" for requests without a body. - The demodularizer (`compiler/demod`) can prune more unused assignments. - Several judgment rendering forms in Redex are replaced by functions, allowing more convenient abstraction. - When a distribution includes no teaching languages, DrRacket’s language-dialog configuration moves into the preferences dialog and the “Language” menu disappears. - The math library has better support for block-diagonal matrices, including both Racket and Typed Racket. - The math library contains improved implementations of acos and matrix-(cos-)angle. - The stepper again works for `big-bang` programs. - There are many other repairs and documentation imprevements! The following people contributed to this release: Alexander Shopov, Andrei Dorian Duma, Bert De Ketelaere, Bob Burger, Bogdan Popa, Bogdana Vereha, Cameron Moy, Chung-chieh Shan, Cutie Deng, D. Ben Knoble, Dario Hamidi, Dominik Pantůček, Gustavo Massaccesi, halfminami, Jacqueline Firth, Jason Hemann, Jens Axel Søgaard, Joel Dueck, John Clements, Jordan Harman, Marc Nieper-Wißkirchen, Matthew Flatt, Matthias Felleisen, Mike Sperber, Noah Ma, owaddell-ib, Philippe Meunier, Robby Findler, Ryan Culpepper, Ryan Ficklin, Sam Phillips, Sam Tobin-Hochstadt, Shu-Hung You, sogaiu, Sorawee Porncharoenwase, Stephen De Gabrielle, Vincent Lee, and Wing Hei Chan. ---------------------------------------------------------------------- ### v8.16 — Racket v8.16 - Date: 2025-03-02 - Version: v8.16 - Original notes: https://github.com/racket/racket/releases/tag/v8.16 - Permalink: https://whatsnew.fyi/product/racket/releases/v8.16 - **added** — Added treelist utility functions including treelist-filter and treelist-flatten - **added** — Added mutable-treelist-prepend! function to prepend to mutable treelists - **added** — Mutable treelists are now serializable - **added** — Added serialize-structs module for minimizing dependencies with core forms - **added** — Added flbit-field function for access to the binary representation of IEEE floating-point numbers - **added** — Added \X to pregexp syntax to match grapheme clusters - **added** — Added read-json* and write-json* functions for customization of Racket representation of JSON elements - **added** — Added open-input-nowhere function to create an empty input port - **added** — Added pipe-port? function to determine whether a port is created by make-pipe - **added** — Added port-file-stat function to gather information about the file that is the source or target of a file-stream port - **added** — Added fifteenth function to return the fifteenth element of a list - **added** — Added student-t distribution to the math/distributions library - **added** — Added support for customizing the Expeditor prompt using the #:prompt keyword argument to call-with-expeditor - **added** — Added guide to adding internationalization for a new human language - **changed** — XML reader is 2-3x faster on inputs with long CDATA and comments, with 25% speedup on large documents generally - **changed** — Revised representation of pointers improves performance of foreign function calls, making ptr-ref and ptr-set! substantially faster - **changed** — Improved multi-line convention for error messages - **changed** — The db library now allows prepare on virtual statements - **changed** — Optimizations to racket/profile improve asymptotic speed for very large call graphs - **changed** — The #lang htdp/asl language now incorporates Graphical Debugger support - **fixed** — Fixed the top-left search box in the documentation ---------------------------------------------------------------------- - 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. ---------------------------------------------------------------------- ### v8.15 — Racket v8.15 - Date: 2024-11-05 - Version: v8.15 - Original notes: https://github.com/racket/racket/releases/tag/v8.15 - Permalink: https://whatsnew.fyi/product/racket/releases/v8.15 - **changed** — Documentation search results are ordered with visual cues indicating their source and grouped by language family - **added** — DrRacket offers to restore previously open files when starting, which can be made the default - **added** — In DrRacket, Picts can be saved by right-clicking - **added** — raco pkg introduces the uninstall command as the opposite of install - **changed** — raco pkg improves the handling of --clone and --unclone - **added** — iOS is a compilation target, distinct from macOS - **added** — Racket supports falling back to IPv4 during hostname resolution when IPv6 fails - **added** — Memory allocated using the ffi/unsafe library can be initially zeroed using the 'zeroed-atomic and 'zeroed-atomic-interior flags - **fixed** — Many bugs have been fixed ---------------------------------------------------------------------- - Documentation search results are ordered, with visual cues indicating what their source is (core, main-distribution, etc.). These results are also grouped by language family (Racket, Rhombus, etc.). (See https://docs.racket-lang.org/search/index.html?q=second .) - DrRacket offers to restore previously open files when starting, which can be made the default. - In DrRacket, Picts can be saved by right-clicking. - `raco pkg` introduces the `uninstall` command as the opposite of `install`. The `remove` name for this functionality is retained for compatibility. (See https://docs.racket-lang.org/pkg/cmdline.html#%28part._raco-pkg-uninstall%29 .) - `raco pkg` improves the handling of `--clone` and `--unclone`. (See https://docs.racket-lang.org/pkg/cmdline.html#%28part._raco-pkg-update%29 .) - iOS is a compilation target, distinct from macOS. - Racket supports falling back to IPv4 during hostname resolution when IPv6 fails. - Memory allocated using the ffi/unsafe library can be initially zeroed, using the `'zeroed-atomic` and `'zeroed-atomic-interior` flags. (See https://docs.racket-lang.org/foreign/foreign_pointer-funcs.html#%28idx._%28gentag._11._%28lib._scribblings%2Fforeign%2Fforeign..scrbl%29%29%29 .) - Many other bugs are fixed and documentation has been improved! The following people contributed to this release: Alec Mills, Alex Knauth, Alexander Shopov, Ashlynn Anderson, Ashton Wiersdorf, Ben Greenman, Benjamin Yeung, Bob Burger, Bogdan Popa, Breck Yunits, Carl Gay, Claes Wallin (韋嘉誠), CooperCorad, Crystal Jacobs, D. Ben Knoble, Dexter Santucci, Eduardo Cavazos, Emil Szpakowski, evelynmitchell, Greg Hendershott, Gunnar Ahlberg, Gwen Weinholt, Idiomdrottning, Ikko Eltociear Ashimine, Jacqueline Firth, Jarhmander, Jay McCarthy, Jens Axel Søgaard, Jimmy McNutt, jinser, Jinser Kafka, John Clements, lukejianu, Marc Nieper-Wißkirchen, Matej Fandl, Matthew Flatt, Matthias Felleisen, Michael Ballantyne, Mike Sperber, olopierpa, Paul Morris, Phil Nguyen, Philip McGrath, Robby Findler, Ronald Garcia, Ryan Culpepper, Sam Phillips, Sam Tobin-Hochstadt, Siddhartha Kasivajhula, Sorawee Porncharoenwase, Stephen De Gabrielle, Syntacticlosure, Taylor Allred, Tomas Fabrizio Orsi, Wing Hei Chan, and Yafei Yang. ---------------------------------------------------------------------- ### v8.14 — Racket v8.14 - Date: 2024-08-20 - Version: v8.14 - Original notes: https://github.com/racket/racket/releases/tag/v8.14 - Permalink: https://whatsnew.fyi/product/racket/releases/v8.14 - **added** — 64-bit ARM Windows is now a standard pre-built download - **added** — The `compiler/demod` language integrates demodularization into the program with support for submodules and definition pruning - **added** — The `contract-in` form enables contracts to be specified in an importing module - **added** — The `#%declare` form supports the `#:flatten-requires` and `#:unlimited-compile` keywords - **added** — Identifiers such as `case-λ`, `match-λ`, and `λ` are equivalent to their Latin-alphabet equivalents in more contexts including uses of `match` - **added** — The `hash-filter` function allows using a predicate to select a sub-table of a hash table - **added** — The module browser can perform filtering on submodules - **added** — The `raco/testing` collection brings together testing-related functions and forms - **changed** — The `raco test` command-line form respects the `current-test-invocation-directory` parameter and shows well-formed module paths in its output - **changed** — Racket CS allows the use of in-memory boot files - **fixed** — Many bug-fixes and documentation updates included in this release ---------------------------------------------------------------------- - 64-bit ARM Windows is one of the standard pre-built downloads. - 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. - 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. ---------------------------------------------------------------------- ### v8.13 — Racket v8.13 - Date: 2024-05-18 - Version: v8.13 - Original notes: https://github.com/racket/racket/releases/tag/v8.13 - Permalink: https://whatsnew.fyi/product/racket/releases/v8.13 - **added** — The racket/treelist and racket/mutable-treelist libraries provide list-like containers that support many operations in effectively constant time, including appending and extracting sub-lists without mutating the given list - **added** — The hash-filter-keys and hash-filter-values functions allow filtering hashes using a predicate on either keys or values - **added** — The vector-extend and vector*-extend functions provide a way to pre-populate the prefix of a newly allocated vector using the elements of an existing vector - **changed** — Command-line raco setup, package update, and package installation use terminal control to show what they are working on more compactly and with a progress bar - **changed** — Racket v8.13 uses Unicode 15.1 for character and string operations - **changed** — Machine-specific cross-module optimization allows improved support for static generation of foreign-function bindings - **changed** — The scribble/acmart language uses v2.01, which avoids errors concerning the hyperref package in some latex installations ---------------------------------------------------------------------- - The racket/treelist and racket/mutable-treelist libraries provide list-like containers that support many operations in effectively constant time, including appending and extracting sub-lists without mutating the given list. Treelists are implemented as RRB Vectors, invented by Stucki, Riompf, Ureche, and Bagwell. (see https://docs.racket-lang.org/reference/treelist.html#(part._treelist) and https://dl.acm.org/doi/abs/10.1145/2784731.2784739 ) - The `hash-filter-keys` and `hash-filter-values` functions allow users to filter hashes using a predicate on either keys or values. (see https://docs.racket-lang.org/reference/hashtables.html#%28def._%28%28lib._racket%2Fhash..rkt%29._hash-filter-keys%29%29 ) - The `vector-extend` and `vector*-extend` functions provide a way to pre-populate the prefix of a newly allocated vector using the elements of an existing vector. (see https://docs.racket-lang.org/reference/vectors.html#%28def._%28%28lib._racket%2Fvector..rkt%29._vector-extend%29%29 ) - Command-line raco setup, package update, and package installation use terminal control (when available) to show what they are working on more compactly and with a progress bar. - Racket v8.13 uses Unicode 15.1 for character and string operations. - Machine-specific cross-module optimization allows improved support for static generation of foreign-function bindings. - The scribble/acmart language uses v2.01, which avoids errors concerning the hyperref package in some latex installations. The following people contributed to this release: Alec Mills, Ben Greenman, Bob Burger, Bogdan Popa, dr-neptune, Fred Fu, Gustavo Massaccesi, Jason Hemann, Jay McCarthy, John Clements, Jordan Johnson, Justin Dhillon, Mao Yifu, Matias Eyzaguirre, Matthew Flatt, Matthias Felleisen, Mike Sperber, olopierpa, Oscar Waddell, Pavel Panchekha, Philip McGrath, Robby Findler, Sam Phillips, Sam Tobin-Hochstadt, Siddhartha Kasivajhula, Sorawee Porncharoenwase, Stephen De Gabrielle, Tim Standen, William E. Byrd, and Wing Hei Chan. ----------------------------------------------------------------------