Skip to content

Releases: racket/racket

Racket v9.0

23 Nov 08:35

Choose a tag to compare


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


Racket v8.18

22 Aug 13:08

Choose a tag to compare


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


Racket v8.17

17 May 18:42

Choose a tag to compare


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


Racket v8.16

02 Mar 23:01

Choose a tag to compare


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


Racket v8.15

05 Nov 17:02

Choose a tag to compare


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

20 Aug 02:14

Choose a tag to compare


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


Racket v8.13

18 May 21:50

Choose a tag to compare


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


Racket v8.12

10 Feb 07:18

Choose a tag to compare


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 v8.11.1

30 Nov 06:58

Choose a tag to compare


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 v8.11

15 Nov 00:42

Choose a tag to compare


Racket version 8.11 is now available from

https://racket-lang.org/

As of this release:

Thank You

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

Feedback Welcome