Release Announcement for Version 8.12

Racket v8.12 ---------------------------------------------------------------------- As of this release: - 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 ----------------------------------------------------------------------