The Racket repository
(see https://docs.racket-lang.org/reference/treelist.html#(part._treelist) and https://dl.acm.org/doi/abs/10.1145/2784731.2784739 )
hash-filter-keys
and hash-filter-values
functions allow users
to filter hashes using a predicate on either keys or values.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.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.
The "Die Macht der Abstraktion" language levels are no longer present, replaced by the "Schreibe dein Programm" language levels which have been available for several years. (see https://www.deinprogramm.de/sdp/ )
The release fixes a problem with the binding structure of the for/fold
form in the rare situation when an iteration clause identifier shadowed
an accumulator identifier. This change may break code that depends on
the old binding structure. (see https://docs.racket-lang.org/reference/for.html#%28form._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._for%2Ffold%29%29 )
Racket automatically sets the close-on-exec flag when opening a file, on systems where this is available. This change lowers the cost of avoiding problems that can occur when file descriptors become accidentally shared between processes. (see https://docs.racket-lang.org/reference/file-ports.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._open-input-file%29%29 )
Match includes hash
and hash*
patterns. (see https://docs.racket-lang.org/reference/match.html#%28form._%28%28lib._racket%2Fmatch..rkt%29._match%29%29 )
The vector-set/copy
function allows creation of a new vector that differs
at only one index. This change also adds vector-append
and vector-copy
primitives. (see https://docs.racket-lang.org/reference/vectors.html#%28def._%28%28lib._racket%2Fvector..rkt%29._vector-set%2Fcopy%29%29 )
The pregexp-quote
function brings the functionality of regexp-quote
to pregexps. (see https://docs.racket-lang.org/reference/regexp.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._pregexp-quote%29%29 )
The C FFI convention-based converter supports PascalCase
and camelCase
in
addition to an underscore-based convention. (see https://docs.racket-lang.org/foreign/Defining_Bindings.html#%28form._%28%28lib._ffi%2Funsafe%2Fdefine%2Fconventions..rkt%29._convention~3ahyphen-~3ecamel.Case%29%29 )
The racket/case
library allows case
-like forms that use different
equality comparisons, such as eq?
and equal-always?
. (see https://docs.racket-lang.org/reference/case.html#%28form._%28%28lib._racket%2Fcase..rkt%29._case%2Fequal%29%29 )
Scribble rendering to HTML adds linking and information buttons when hovering over heading titles.
The interval-map
data structure supports iterator functions in the style
of gen:ordered-dict
. (see https://docs.racket-lang.org/data/Orders_and_Ordered_Dictionaries.html#%28def._%28%28lib._data%2Forder..rkt%29._gen~3aordered-dict%29%29 )
The following people contributed to this release:
Alex Harsányi, Alex Knauth, Alex Muscar, Alexis King, Ben Greenman, Bert De Ketelaere, Bob Burger, Bogdan Popa, Chris Payne, Fred Fu, J. Ryan Stinnett, Jamie Taylor, Jared Forsyth, Jarhmander, Jens Axel Søgaard, Joel Dueck, John Clements, Jordan Johnson, Ken Harris, Laurent Orseau, Mao Yifu, Marc Nieper-Wißkirchen, Matteo d’Addio, Matthew Flatt, Matthias Felleisen, Micah Cantor, Mike Sperber, naveen srinivasan, Oscar Waddell, Philip McGrath, Philippe Meunier, Robby Findler, Rocketnia, Sam Phillips, Sam Tobin-Hochstadt, Sarthak Shah, Shu-Hung You, Sorawee Porncharoenwase, Stephen De Gabrielle, Tom Price, ur4t, Wing Hei Chan, and ZhangHao
Racket version 8.11.1 is now available from https://racket-lang.org/
This bug-fix release repairs a problem with building from source when using the "builtpkgs" source distribution.
Feedback Welcome
Racket version 8.11 is now available from
https://racket-lang.org/
As of this release:
Match clauses can include a #:do option to allow evaluation of code and bindings before a following #:when clause. Cf. https://docs.racket-lang.org/reference/match.html#%28form._%28%28lib._racket%2Fmatch..rkt%29._match%29%29
JSON Serialization supports indentation with an #:indent option to
write-json
. Cf. https://docs.racket-lang.org/json/index.html#%28def._%28%28lib._json%2Fmain..rkt%29._write-json%29%29
An initiate-sequence
function simplifies the creation of sequences.
Cf. https://docs.racket-lang.org/reference/sequences.html#%28def._%28%28lib._racket%2Fsequence..rkt%29._initiate-sequence%29%29
The :do-in
form allows an inner definition sequence. Cf. https://docs.racket-lang.org/reference/for.html#%28form._%28%28lib.racket%2Fprivate%2Fbase..rkt%29.~3ado-in%29%29
The redex-define
form allows pattern-matching in PLT Redex using a
define
-like syntax. Cf. https://docs.racket-lang.org/redex/reference.html#%28form._%28%28lib._redex%2Freduction-semantics..rkt%29._redex-define%29%29
Racket and Chez Scheme use Robert L. Smith's "Algorithm 116" for division of complex numbers. Cf. https://dl.acm.org/doi/10.1145/368637.368661
DrRacket has indentation guides that provide visual cues indicating how code is indented and grouped, accessible by using (<menu-key>-shift-i).
"Comment-out" menu items can be specific to the #lang used by the current file. Cf. https://docs.racket-lang.org/framework/Text.html#%28def._%28%28lib._framework%2Fmain..rkt%29._text~3aindent-guides~3c~25~3e%29%29
Unused identifiers have a tooltip indicating that they have no bound occurrences.
Quickscript includes a new form of scripting in the form of "hook" functions that can be attached to existing events. Cf. https://docs.racket-lang.org/quickscript/index.html#%28part._.Hooks%29
Plots include plot-inset
and plot-legend-padding
parameters to
control the amount of space left unused around the plot edge and plot
legend. Cf. https://docs.racket-lang.org/plot/params.html#%28def._%28%28lib._plot%2Fmain..rkt%29._plot-inset%29%29
There are many other documentation improvements, optimizations, and bug fixes!
Thank you to the people who contributed to this release:
Alex Harsányi, Ben Greenman, Bogdan Popa, Cameron Moy, Camille d’Alméras, D. Ben Knoble, Efraim Flashner, Eric S. Raymond, Fred Fu, Greg Hendershott, Gustavo Massaccesi, Jay McCarthy, jim, Joel Dueck, John Clements, Jon Eskin, Laurent Orseau, Lucas Sta Maria, mAdkins, Mark Hedlund, Matteo d’Addio, Matthew Flatt, Matthias Felleisen, Mike Sperber, Noah Ma, Oscar Waddell, Philip McGrath, Qifan Wang, Robby Findler, Ross Angle, Ryan Culpepper, Sam Tobin-Hochstadt, shenleban tongying, Shu-Hung You, Sorawee Porncharoenwase, Stephen De Gabrielle, Wing Hei Chan, xxyzz, and ZhangHao
Racket version 8.10 is now available from
https://racket-lang.org/
As of this release:
syntax/parse no longer always compiles its patterns; this release includes an interpreter which is used to reduce code size
Racket includes primitives [im]mutable-string?
, [im]mutable-bytes?
,
[im]mutable-vector?
, [im]mutable-box?
, and [im]mutable-hash?
(cf.
https://docs.racket-lang.org/reference/booleans.html#%28mod-path._racket%2Fmutability%29)
Redex adds judgment-form->rule-names (cf. https://docs.racket-lang.org/redex/reference.html#%28def._%28%28lib._redex%2Freduction-semantics..rkt%29._judgment-form-~3erule-names%29%29)
Fasl and compiled code allow fxvectors and flvectors
DrRacket allows #lang-specific customization of the definition navigation popdown (cf. https://docs.racket-lang.org/tools/drracket_language.html#%28idx._%28gentag._55._%28lib._scribblings%2Ftools%2Ftools..scrbl%29%29%29)
Racket and DrRacket include Finnish internationalization
Check Syntax binding arrows are drawn for names bound with
define-local-member-name
Many other improvements and bug fixes are included, including to the scribble and plot packages
Thank you to the people who contributed to this release:
Adrien Ludwig, Alex Harsányi, Alex Knauth, Alexis King, Ben Greenman, Cameron Moy, D. Ben Knoble, Greg Hendershott, Gustavo Massaccesi, irreconsolable, Jay McCarthy, Joel Dueck, John Clements, Jordan Johnson, Kamil Laskowski, Laurent Orseau, Matthew Flatt, Matthias Felleisen, Mike Sperber, Oscar Waddell, Pavel Panchekha, Philip McGrath, reflektoin, Robby Findler, Ryan Culpepper, Sam Tobin-Hochstadt, Shu-Hung You, Stefan Schwarzer, Stephen De Gabrielle, and Yongming Shen
Racket version 8.9 is now available from https://download.racket-lang.org/
The HtDP student languages come with checked signatures. Programmers can express signatures in a formal notation, and these signatures are checked at run-time (in a performance-neutral manner). The addition of this formal language associates meaning with several names that had no meaning before. — This feature is experimental, and we may amend or retract it later. (cf. https://docs.racket-lang.org/htdp-langs/beginner-abbr.html?q=signatures#%28part._beginner-abbr-signatures%29)
Switching into and out of dark mode is handled better on Mac OS and Linux.
Racket uses Unicode 15.0 for character and string operations.
The racket/hash-code
library provides support for combining hash
codes. (cf. https://docs.racket-lang.org/reference/Equality.html#%28mod-path._racket%2Fhash-code%29)
A language module can have a configure-expand
submodule that is
dynamically required to configure a parameterization before expansion
of another module. (cf. https://docs.racket-lang.org/reference/running-sa.html#%28part._configure-expand%29)
stream-cons
supports multiple values. (cf. https://docs.racket-lang.org/reference/streams.html#%28form._%28%28lib._racket%2Fstream..rkt%29._stream-cons%29%29)
unit/c
subcontracts may depend on bindings from any imported or
exported signature. Additionally, bindings’ contracts are enforced
within subcontracts, and violations blame the contract itself (like
->i
). (cf. https://docs.racket-lang.org/reference/unitcontracts.html#%28form._%28%28lib._racket%2Funit..rkt%29._unit%2Fc%29%29)
racket/class
provides the dynamic-instantiate
procedure for
instantiating a class with a dynamic list of by-name initialization
arguments. (cf. https://docs.racket-lang.org/reference/objcreation.html#%28def._%28%28lib._racket%2Fprivate%2Fclass-internal..rkt%29._dynamic-instantiate%29%29)
TCP output block buffering implies TCP_NODELAY. (cf. https://docs.racket-lang.org/reference/tcp.html#%28def._%28%28lib._racket%2Ftcp..rkt%29._tcp-connect%29%29)
Submodules and Check Syntax require arrows work better together.
Typed Racket's shallow check generation is improved.
Many other improvements and bug fixes are included!
Thank you to the people who contributed to this release:
Alex Harsányi, Alex Knauth, Alexis King, Ben Greenman, Bert De Ketelaere, Bob Burger, Bogdan Popa, Cadence Ember, D. Ben Knoble, Denis Hirn, dr-neptune, Eli Barzilay, Fred Fu, Gustavo Massaccesi, J. Ryan Stinnett, Jack Firth, Jamie Taylor, Jesse Alama, Jin-Ho King, John Clements, Lazerbeak12345, Mark Hedlund, Masaya Tojo, Matthew Flatt, Matthias Felleisen, Mike Sperber, Philip McGrath, Robby Findler, Ryan Culpepper, Sam Phillips, Sam Tobin-Hochstadt, sarna, Shu-Hung You, Sorawee Porncharoenwase, Stephen De Gabrielle, sxzzsf, Tom Price, Yukai Chou, and Zach O'Brien.
Racket version 8.8 is now available from
https://racket-lang.org/
As of this release:
The dependent contract form, ->i
, supports a #:param element that
specifies dependencies for parameter values that are set during the
dynamic extent of the function call.
(See: https://docs.racket-lang.org/reference/function-contracts.html#%28form._%28%28lib._racket%2Fcontract%2Fbase..rkt%29._-~3ei%29%29 )
The copy-file
library function supports permission-management
arguments.
(See: https://docs.racket-lang.org/reference/Filesystem.html#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._copy-file%29%29 )
Pressing <SHIFT>-return in DrRacket's interactions window makes it easier to edit and enter expressions without sending them to be evaluated.
The numeric comparison operators (<, >=, etc.) require at least two arguments in the "How To Design Programs" teaching languages.
Redex has improved typesetting when customized renders are used in certain multi-line situations.
We have fixed many bugs, and written lots of documentation.
The following people contributed to this release:
Alex Knauth, Alexander Shopov, Andreas Schwab, Ben Greenman, Bert De Ketelaere, Bob Burger, Bogdan Popa, Cameron Moy, Chung-chieh Shan, D. Ben Knoble, Dan Anderson, David Van Horn, Geoffrey Knauth, Gustavo Massaccesi, Jamie Taylor, Jason Hemann, Jens Axel Søgaard, Jesse Alama, jestarray, Johann Rudloff, Johannes Maier, John Clements, Jon Zeppieri, Lazerbeak12345, Lîm Tsú-thuàn, Matthew Flatt, Matthias Felleisen, Mike Sperber, Niklas Larsson, Noah Ma, Pavel Panchekha, Philip McGrath, Philippe Meunier, R. Kent Dybvig, reflektoin, Robby Findler, Sam Tobin-Hochstadt, Shu-Hung You, Sorawee Porncharoenwase, and Stephen De Gabrielle
Racket version 8.7 is now available from
https://racket-lang.org/
As of this release:
(#%declare #:require=define)
.
(see https://docs.racket-lang.org/reference/module.html#%28form._%28%28quote._~23~25kernel%29._~23~25declare%29%29 )scriblib/bibtex
and scriblib/autobib
libraries support DOIs.
(see https://docs.racket-lang.org/scriblib/autobib.html#%28def._%28%28lib._scriblib%2Fautobib..rkt%29._make-bib%29%29 )The following people contributed to this release:
Adit Cahya Ramadhan, Alex Harsányi, Bart van Strien, Ben Greenman, Bob Burger, Bogdan Popa, Cameron Moy, cheeze2000, D. Ben Knoble, Dan Anderson, Fred Fu, Geoffrey Knauth, Gustavo Massaccesi, J. Ryan Stinnett, Jack Firth, Jason Hemann, Jimmy McNutt, John Clements, Lîm Tsú-thuàn, M. Taimoor Zaeem, Mao Yifu, Matthew Flatt, Matthias Felleisen, Mike Sperber, Noah Ma, Oliver Flatt, Paulo Matos, Philip McGrath, Reuben Thomas, Robby Findler, Ryan Culpepper, Sam Phillips, Sam Tobin-Hochstadt, Samuel Bronson, Shu-Hung You, Sorawee Porncharoenwase, Sorin Muntean, Stephen Chang, William J. Bowman, and Winston Weinert
Racket version 8.6 is now available from
https://racket-lang.org/
As of this release:
Racket has an "equal-always?" primitive that equates values that will stay the same even if mutated. See https://docs.racket-lang.org/reference/Equality.html#%28def._%28%28quote._~23~25kernel%29._equal-always~3f%29%29
This release uses a new build system, Zuo, which is implemented as a
little language, in accordance with the ideas of Language Oriented
Programming (LOP). The implementation has a single C file (plus libraries
implemented in Zuo), so it compiles easily. The zuo/build
library is modeled on make
and Shake for tracking dependencies and
build steps. See https://docs.racket-lang.org/zuo/index.html and
https://racket.discourse.group/t/new-build-system-pushed-to-git-repo/873
Racket supports stencil vectors, which associate a virtual bitmask with a vector, enabling certain mask-equipped update operations. See https://docs.racket-lang.org/reference/stencil_vectors.html
Racket supports Arm64 machines running Windows.
Redex has support for simultaneous substitutions. See https://docs.racket-lang.org/redex/reference.html#%28form._%28%28lib._redex%2Freduction-semantics..rkt%29._substitute%29%29
The Web Server provides control over the maximum number of concurrent connections via its "safety limits" construct. See https://docs.racket-lang.org/web-server-internal/dispatch-server-unit.html#%28part._safety-limits%29
The Web Server has improved logging performance and improved request parsing performance, reducing tail latencies.
The Web Server supports logging response status code via web-server/dispatchers/dispatch-logresp. See https://docs.racket-lang.org/web-server-internal/dispatch-logresp.html
The db
library supports custom types for PostgreSQL connections; see
pg-custom-type
for details. See
https://docs.racket-lang.org/db/util.html#%28def._%28%28lib._db%2Futil%2Fpostgresql..rkt%29._pg-custom-type%29%29
The release includes many other repairs and changes!
The following people contributed to this release:
Alex Knauth, Alexander Shopov, Alexis King, Amirouche Amazigh BOUBEKKI, Andy Keep, Ashish SHUKLA, Bob Burger, Bogdan Popa, Cameron Moy, Chung-chieh Shan, David K. Storrs, FrankHB, Fred Fu, Gustavo Massaccesi, helado de brownie, J. Ryan Stinnett, Jack Firth, Jamie Taylor, Jason Hemann, Jens Axel Søgaard, Jimmy McNutt, Joel Dueck, John Clements, José Manuel Calderón Trilla, Kevin Tew, Laurent Orseau, Matt Audesse, Matthew Flatt, Matthias Felleisen, Mike Sperber, naveen srinivasan, Niklas Larsson, Noah Ma, Oscar Waddell, Pavel Panchekha, Phil Nguyen, Philip McGrath, Philippe Meunier, rgkirch, Robby Findler, Robert Postill, Ryan Culpepper, Sam Tobin-Hochstadt, Sergiu Ivanov, Sorawee Porncharoenwase, Stephen De Gabrielle, Vincent Lee, wackbyte, and Zibing Zhang
Link to package regressions issue for the 8.6 release: https://github.com/racket/racket/issues/4366
As of this release:
Racket's new -y
flag automatically keeps compiled files up to date,
reducing subsequent load times.
Error-message realms allow Racket-hosted languages to adapt and rewrite error messages to make sense in a particular context.
Nonprivileged users can control package installation scope using an "other-version" directory in the addon-dir.
Racket CS runs on platforms where native-code generation is not currently supported (e.g., s390x or ppc64). See "README.txt" in the source distribution for more information on the --enable-pb flag to configure.
DrRacket's new 'Reopen Closed Tab' file menu item will open previously closed tabs.
Typed Racket has support for the xml
library; use typed/xml
.
Rackunit reports source locations for failed test cases in the Typed Racket language.
Plot has violin plots and improved box-and-whisker plots.
Boxes are supported alongside lists, vectors etc. in place-channel messages.
Those who manually configure Racket CS to use Zlib compression for compiled code should be aware of CVE-2018-25032; the next release and the current snapshot builds use a newer, safer version of zlib.
The release includes many other repairs and changes!
The following people contributed to this release:
Alex Harsányi, Alexander Shopov, Alexis King, Andrew Mauer-Oats, Ben Greenman, Benedek Szilvasy, Bert De Ketelaere, Bogdan Popa, Cameron Moy, Chung-chieh Shan, Fred Fu, Gustavo Massaccesi, J. Ryan Stinnett, Jamie Taylor, Joel Dueck, John Clements, Joseph Griego, Khadija Sidhpuri, Laurent Orseau, Maciej Barć, Matthew Flatt, Matthias Felleisen, Mike Sperber, Noah Ma, Philip McGrath, Robby Findler, Ryan Culpepper, Sam Tobin-Hochstadt, Sorawee Porncharoenwase, Stephen De Gabrielle, Tim Jervis, and Trevor Paley