Releases: racket/racket
Release list
Racket v9.3
- The
raco setupcommand can generate markdown documentation, using
the--doc-markdownoption. - 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 installcommand includes new options that provide
more install-time configuration flexibility:--adjacent-deps,
--destdir, and--attach, and a refined--skip-installed. - The
ffi/unsafe/runtime-liblibrary provides adefine-runtime-lib
mechanism similar todefine-runtime-path, allowing location of
libraries located relative to a source file. - The
prompt-tag/ccontract generator no longer performs checking on
call/ccwhen the#:call/ccoption is not present. - The
impersonate-prompt-tagfunction takes an additional argument
that allows checking and update of results for composable
continuations. - The
error-syntax->srcloc-handlerparameter 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/basemodule requires fewer internal modules and
instantiations. - The
file/zippackage 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.
Racket v9.2
- The
matchform 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
asinandacosprocedures 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-inlinecore 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-positionfunction counts bytes written to ports
connected to a terminal, such asstdinandstderr. - Cross-phase persistent modules allow more types of
quoted data. - The implementations of
member,memw,when,unless,let/ec,
andcondare rewritten to use onlyracket/kernelsyntax - The
impersonator-property-predicate-procedure?function identifies
procedures created bymake-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-scaleof 1.0, instead of the manual style's 0.8, but this
can be configured using theinitial-scaleproperty. - 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-stopfeature. - 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.
Racket v9.1
- 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
forform 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-errnomaps 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
notablyeq?) 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-typeprocedure can inherit the current inspector
using a'currentflag. 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=<conv>
flags. - The
system-typefunction can report on platform and
shared-object-library conventions with new flags. 15.8 Environment
and Runtime Information - The
openssl/legacylibrary 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.
Racket v9.0
- Racket supports parallel threads. For more information see the new
blog post on the topic.- Parallel threads can be created using the
#:poolargument to
thread creation. - Threads created with
#:keepset to'resultswill record their
results for later retrieval withthread-wait.
- Parallel threads can be created using the
- The
black-boxwrapper prevents the optimizing compiler from
optimizing away certain computations entirely. This can be helpful
in ensuring that benchmarks are accurate. - The
decompile-linkletfunction can map linklets back to
s-expressions. - When using BC Racket, the
processor-countfunction 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
mathlibrary 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.
Racket v8.18
- 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-checkdefault 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
structform 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
exptfunction 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_KEEPALIVEcorrectly. - Unsafe code can use “uninterruptible mode” instead of “atomic mode”
to allow futures to run concurrently while preventing interruptions
from other threads. - The
net/imaplibrary supports IMAP'smoveoperation. - 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.
Racket v8.17
- The new
drracket-corepackage 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-setfunction returns the smallest bit that
is set in the twos-complement representation of the given number. - The updated
dynamic-requirefunction makes it easier to use syntax
bindings by allowing a syntax-thunk (or 'eval) to be used for them. - The
error-module-path->string-handlerparameter 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-appendfunction 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-bangprograms. - 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.
Racket v8.16
- 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.
- A variety of new treelist utility functions are available:
- The
serialize-structsmodule allows the minimization of
dependencies by providing only a handful of core forms. - The
flbit-fieldfunction 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*andwrite-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-nowherefunction creates an empty input port. - The
pipe-port?function makes it possible to determine whether a
port is created bymake-pipe. - The
port-file-statfunction allows gathering information about the
file that is the source or target of a file-stream port.
- The
- A revised representation of pointers improves the performance of
foreign function calls. As a result,ptr-refandptr-set!are
substantially faster. - In anticipation of the fifteenth RacketCon, the
fifteenthfunction
returns the fifteenth element of a list. - Racket has an improved multi-line convention for error messages.
- The
dblibrary allowsprepareon virtual statements. - The
student-tdistribution is part of themath/distributions
library. - Expeditor supports customizing the prompt, using the
#:prompt
keyword argument tocall-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/asllanguage 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.
Racket v8.15
- 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 pkgintroduces theuninstallcommand as the opposite of
install. Theremovename for this functionality is retained for
compatibility. (See
https://docs.racket-lang.org/pkg/cmdline.html#%28part._raco-pkg-uninstall%29
.)raco pkgimproves the handling of--cloneand--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-atomicand'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.
Racket v8.14
-
64-bit ARM Windows is one of the standard pre-built downloads.
-
The
compiler/demodlanguage 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-inform enables contracts to be specified in an
importing module. -
The
#%declareform supports the#:flatten-requiresand
#:unlimited-compilekeywords -
Identifiers such as
case-λ,match-λandλare equivalent to
their Latin-alphabet equivalents (case-lambda,match-lambda, and
lambda) in more contexts, including uses ofmatch. -
The
hash-filterfunction 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 testcommand-line form respects the
current-test-invocation-directoryparameter, and shows well-formed
module paths in its output. -
Racket CS allows the use of in-memory boot files.
-
The
raco/testingcollection 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.
Racket v8.13
- 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-keysandhash-filter-valuesfunctions allow users
to filter hashes using a predicate on either keys or values.
- The
vector-extendandvector*-extendfunctions provide a way
to pre-populate the prefix of a newly allocated vector using the elements
of an existing vector.
-
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.