* Typed Racket supports refinement types and dependent function types.
Previously an experimental feature, refinement types allow types to
describe more interesting properties of values, especially integers.
For example, this type shows that the `max` function always produces a
number at least as big as its inputs:
`(-> ([x : Integer] [y : Integer])
(Refine [z : Integer] (and (>= z x) (>= z y))))`
* DrRacket's Program Contour is significantly more efficient; using it
no longer hurts DrRacket's interactivity.
* The `web-server/formlets` library produces formlets that are
serializable, facilitating dynamic uses of formlets in stateless #lang
web-server servlets. The new `web-server/formlets/stateless` and
`web-server/formlets/unsafe` libraries provide additional support with
the same API.
* The `db` library supports the Cassandra database.
MASTER_SITES= site1 \
site2
style continuation lines to be simple repeated
MASTER_SITES+= site1
MASTER_SITES+= site2
lines. As previewed on tech-pkg. With thanks to rillig for fixing pkglint
accordingly.
Changes in Racket 6.6
- The new Macro Profiler command-line tool (`raco macro-profiler`) shows
how macros contribute to the final expanded code size of a program.
- Typed Racket supports intersection types. This allows the type system
to track more information, and for programmers to express more precise
types.
- Typed Racket produces up to 4x smaller compiled files compared with
Racket 6.5, reducing the size of the Racket distribution by 50M.
- Typed Racket issues warnings in cases where the contract generated for
`Any` was not strict enough in the past. These warnings will become
errors in a future release. Warnings are enabled via View -> Show Log
in DrRacket, and shown by default on command-line Racket.
- Typed Racket enforces uses of `cast` more correctly, by checking both
the "casted-to" and "casted-from" types. Previously, only the former
were checked. In some cases, this will produce contract errors in
programs that did not have errors before.
- `syntax-parse` raises an error when an ellipsis pattern has an empty
match rather than diverging, and it logs a warning when it statically
detects a nullable pattern, such as `((~seq) ...)`. In the next version
of Racket, it will reject the pattern instead, and it will remove
special handling that currently makes some uses of such patterns
terminate.
- `htdp/dir`: The `create-dir` function delivers data information for
files in a new field. The domain of its functions are backwards
compatible.
Changes in Racket 6.5
- Typed Racket and the racket/contract library generate code with lower
overhead, speeding up typed/untyped interaction in a number of gradual
typing programs we studied.
- Macros written using `syntax-parse` automatically emit more accurate
error messages.
- The contract profiler captures costs from more contract combinators,
including all those in the main distribution.
- Hash table and set iteration, via both existing and new non-generic
sequences, is more performant, up to twice as fast on microbenchmarks.
- The Racket optimizer detects many more optimization opportunities,
including when variables always hold numbers.
- The `db` library supports multi-result statements in MySQL.
- The `net/dns` library supports SRV records.
- The `racket/unix-socket` library supports listen and accept operations.
Changes in Racket 6.4:
- We fixed a security vulnerability in the web server. The existing
web server is vulnerable to a navigation attack if it is also
enabled to serve files statically; that is, any file readable by
the web server is accessible remotely. For more information see
http://blog.racket-lang.org/2016/02/racket-web-server-security-vulnerability.html
- DrRacket's scrolling is faster.
- Incremental garbage-collection mode can eliminate long pauses in a
program. For example, incremental mode is useful for avoiding pauses
in games and animations.
Programs must specifically request incremental mode with
`(collect-garbage 'incremental)`, but libraries such as
`2htdp/universe` include the request as part of the library's
implementation.
- The default package catalog is an HTTPS address instead of HTTP, and
package operations properly validate server certificates when using
HTTPS.
- Documentation may define their own categories for the manual top-
level page by using strings, rather than only symbols that name
pre-defined categories.
- The Racket cheat sheet is included in the main distribution.
- DrRacket is available in Bulgarian, thanks to Alexander Shopov.
- The contract Typed Racket generates for the `Any` type is more
permissive, allowing more typed/untyped programs to work without
contract errors.
- Redex supports binding specifications; describe which variables bind
in which expressions and your metafunctions and reduction relations
automatically become scope-sensitive. Thanks to Paul Stansifer for
this improvement.
- All `pict` functions accept `pict-convertible`s. This allows for
transparent interoperability between `pict` and libraries like
`2htdp/image`.
- The `raco profile` and `raco contract-profile` commands provide easy
access to profiling tools, without requiring program modifications.
Changes in Racket 6.3
- Racket's macro expander uses a new representation of binding called
"set of scopes". The new binding model provides a simpler
explanation of how macros preserve binding, especially across module
boundaries and in hygiene-bending expansions. The new expander is
mostly compatible with existing Racket macros, but there are some
incompatibilities. For the formally inclined, a research paper on
this macro system will appear at POPL next year:
http://www.cs.utah.edu/plt/scope-sets/
- Racket's GUI library now uses Gtk+ 3 when available, instead of Gtk+ 2.
Set the `PLT_GTK2` environment variable to select Gtk+ 2.
- Added a new Redex tutorial based on a week-long workshop in SLC.
- Better syntax error checking for Redex patterns that do not use
holes correctly.
- The blueboxes are more agressive about finding names to look up in
the docs, meaning they are useful much more often.
- Submodules are now fully supported in Typed Racket. Previously, some
uses of submodules would produce internal errors, making it hard to
`module+ test` and `module+ main` effectively in Typed Racket. The
switch to the set-of-scopes expander fixed these problems, and
submodules are now happily at home in Typed Racket.
- The `typed/racket/unsafe` library provides import and export forms
that circumvent contract generation. This improves performance for
typed-untyped interaction at the cost of safety and debuggability.
- Typed Racket provides experimental support for units (from
`racket/unit`).
- The experimental `define-new-subtype` form allows overlaying finer
distinctions between otherwise identical types, similar to Haskell's
`newtype`.
- The `Promise` type constructor changes in a backwards-incompatible
way to exclude promises created with `promise/name`.
- The `unstable-*` packages are out of the main distribution. Most of
their contents have been either merged with established Racket
libraries or spun off as their own packages. This change is
backwards compatible for packages that properly list their
dependencies. Full details:
http://blog.racket-lang.org/2015/10/retiring-unstable.html
- edu: `big-bang` supports a display-mode clause so that world
programs can take over the entire screen.
Changes in Racket 6.2.1
- For the How to Design Programs teaching languages, DrRacket offers
an option to use the old style for printing the constants `true`,
`false`, and `empty` instead of `#true`, `#false`, and `'()`.
- The teaching languages come with some additional functions to match
the August 2015 stable release of HtDP 2nd edition.
- A repair to the compiler avoids an infinite loop at compile time for
certain expressions that should loop forever at run time.
Changes:
* The MAC OS X YOSEMITE compatibility problems are fixed. We
bundled a patched Pango text-drawing library with Racket.
* The WINDOWS [32-bit] releases fixes the window-update crashes.
We bundled a patched Cairo drawing library with Racket.
* TYPED RACKET closes two safety holes in the exception system.
The revised type system restricts `raise' to send only
instances of the `exn' structure type and flat data to
handlers. It also checks exception handlers properly.
NOTE: Previously well-typed programs may fail to typecheck.
* TYPED RACKET'S typed regions support casts and predicates.
* 2HTDP/IMAGE'S notion of equality ignores an image's baseline.
* The PACKAGE MANAGER supports a binary library installation mode,
which allows users to install packages without source or
documentation. Use the `--binary-lib' option with `raco pkg
install'.
* The new DRRACKET-TOOL-LIB package factors out parts of DrRacket's
IDE so that they can be reused with other editors, such as Emacs.
* The COMPILER'S use-before-defined analysis has been repaired for
certain forms of nested `letrec', some `let' forms, and some
uses of `set!' or `with-continuation-mark'.
* The COMPILER performs additional bytecode optimizations.
Thanks to Gustavo Massaccesi.
* The CML library comes with a new `replace-evt' event constructor.
Thanks to Jan Dvorak.
* REDEX'S benchmark suite comes with a description of the benchmark
programs.
* REDEX'S metafunctions can be typeset using the "large left brace"
notation for conditionals.
* The CONTRACT library comes with an improved `contract-stronger?'.
Its error messages note that the contract itself might be wrong.
* The GUI library is DPI-aware on Windows.
* The OPENSSL library supports Server Name Indication for servers.
Thanks to Jay Kominek.
* The SYNTAX/PARSE library allows the definition of new pattern
forms via pattern expanders, similar to match expanders.
Thanks to Alex Knauth.
* OpenGL on Linux no longer depends on libgtkgl, and core profiles
are supported (see `set-legacy?').
* The TEACHING LANGUAGES' unit test framework supports
`check-satisfied', a construct for checking whether a result
satisfies a predicate, e.g.: (check-satisfied (sort l) sorted?)
as per upstream changelog:
- Bug repairs and other changes noted in the documentation
- Changed use-before-definition to be an error instead of producing
an #<undefined> value
- Removed the mzlib/class100 library
Also changed the racket port to use mk/jpeg.buildlink3.mk.
Changes in version 6.0.1
* A new `racket/undefined` library exports `undefined` as the
value currently produced by
(letrec ([x x]) x)
This library anticipates a future where that expression will
raise an exception. The `racket/undefined` library will continue
to offer the `undefined` value as a bridge between versions and
as a last resort.
* The drawing and GUI libraries provide improved support for
high-resolution bitmaps and their use on Retina displays. For
example, `read-bitmap` includes a `#:try-@2x?` option to trigger
substitutions through the usual "@2x" naming convention.
* Check Syntax cooperates with Typed Racket to show arrows and other
Check Syntax highlighting even when there is a type error.
* Functions provided via contract-out that have first-order
contracts perform better.
* The contract boundary between typed/untyped modules is much less
expensive. Typed Racket now avoids generating contracts for
places where contracts failures cannot happen.
* Occurrence typing now works better with when/unless. Example:
(let ((x (read)))
(unless (number? x) (error 'bad-input))
(add1 x))
* Types in Typed Racket are now pretty-printed.
* Function types can now be written in prefix style, which is now
preferred and is used for printing. Infix function types are still
accepted for backwards compatibility.
* A new `->*' type constructor is used for writing types for
functions with optional and keyword arguments. The notation is
similar to the matching contract combinator.
* Typed Racket forms do not have a `:' suffix by default now. For
example, the `struct' form replaces `struct:'. The suffixed
versions are all provided for backwards compatibility.
* Typed Racket now has preliminary support for classes and
objects. However, it is still experimental and the APIs are
subject to change.
* Type aliases in Typed Racket now support recursion and mutual
recursion. For example, `(define-type (MyList X) (U Null (Pair X
(MyList X))))' is now a valid type alias.
* Plot correctly renders intersecting 3D graphs and
non-grid-aligned 3D rectangles.
* Elements in plots output in PDF/PS format have the same relative
scale as in other formats. In particular, it is not necessary to
adjust `plot-font-size` to make PDF plots look the same as PNG.
Changes in version 6.0
Racket 6.0 has a new package system, including a catalog of
hundreds of already-available packages. Please visit
http://pkgs.racket-lang.org/
for an overview of the packages.
Racket versions 5.3.4 through 5.3.6 included "beta" versions of the
package system. Racket version 6.0 incorporates many improvements
suggested by preliminary experiences in those versions:
* A package is treated as a single collection by default, so it is
even easier to use a GitHub repository as a package. Get started
quickly:
http://docs.racket-lang.org/pkg/getting-started.html
* DrRacket includes a new package manager GUI, available via the
File|Package Manager ... menu item. The GUI is also available
as a stand-alone program via the "gui-pkg-manager" package.
* The main Racket distribution has been separated into about 200
packages. The Racket installer combines the core system with
bundled versions of these packages.
Alternatively, you may now install a Minimal Racket distribution
--- which is about 1/10 the size of the main distribution --- and
add only those packages that you need.
* Package installation supports pre-built packages that include
compiled byte code and rendered documentation, meaning packages can
be installed quickly when built versions are available. All
packages in the main distribution are available in pre-built form.
The recent 5.92 and 5.93 releases served as release candidates for 6.0,
and 6.0 includes a few additional repairs related to the package
system.
Further improvements to the package system are in the works, notably
including package documentation on the package-catalog web site.
COMPATIBILITY NOTE: PLaneT, the previous Racket package system, will
remain in place for the foreseeable future, but we expect all package
work to shift to the new system.
Beyond the package system, this release brings a number of other
changes:
* Racket's HTML documentation has a new and improved look, thanks to
Matthew Butterick.
* The documentation includes a style guide, "How to Program Racket"
http://docs.racket-lang.org/style/
* Racket's JIT compiler supports the ARM architecture.
* Racket supports the Mac's Retina display mode.
* The performance of the Typed Racket compiler improved by 50% on
some typed programs.
* The profiler provides a new mode that uses the errortrace library
to produce fine-grained profiles.
* A new contract profiler reports how much time programs spend
checking contracts, and which contracts are most expensive.
* The math/flonum library exports fast 105-bit precision operations.
* Check Syntax handles generated identifiers, especially those
introduced by struct (e.g. field selectors) and Redex (e.g., e_1,
e_2)
* 2htdp/batch-io includes functions for dealing with html/xml in
files and web sites as X-expressions plus conveniences for
web-based graph traversals.
* The `gen:set' generic interface extends set operations to work on
user-defined types that implement set methods, as well as on other
set-like built-in types, such as lists.
* Picts support conversion to SVG format.
* Under unix, Racket provides desktop entries (.desktop files) for
its graphical executables.
Racket 5.3.6
This is a bug-fix release. It eliminates errors from v5.3.5 that
people have found over the summer.
Racket 5.3.5
This is a special-purpose release to match the arrival of "Realm of
Racket" in bookstores. Racket v.5.3.5 adds a single `realm'
collection to the v5.3.4 release. The new collection contains the
source code that readers of Realm may wish to use for experiments.
Racket 5.3.4
* Extflonums (80-bit floating-point numbers) are supported on some
x86/x86_64 platforms -- including Windows, and including platforms
where Racket is compiled to use SSE instructions for flonum
arithmetic. Thanks to Michael Filonenko.
* OS X: DrRacket and all of the other apps are now signed with an
official key.
* Tally Maze: a new game based an enumeration of 2d mazes.
* The Optimization Coach, a DrRacket plugin, has been moved from the
Racket distribution to the Racket package repository. Install it
with: raco pkg install optimization-coach
* Redex: `define-union-language' now merges productions when
languages define the same nonterminals. Thanks to William Bowman.
* The `srfi/19' library is now compatible with the date structure
type exported by `racket/base'.
to address issues with NetBSD-6(and earlier)'s fontconfig not being
new enough for pango.
While doing that, also bump freetype2 dependency to current pkgsrc
version.
Suggested by tron in PR 47882
Changes in Racket v5.3.2
Core Libraries:
* The new `math' library provides functions and data structures for
working with numbers and collections of numbers. Functions include
non-elementary (such as gamma, zeta, Lambert's W), number-theoretic
(factorization, modular arithmetic), linear algebra (arithmetic,
decompositions), and statistical (expected values, order statistics,
binning). Data structures include arbitrary-precision bigfloats,
probability distributions, and multidimensional arrays.
* The new `file/untar', `file/untgz', and `file/unzip' libraries support
unpacking widely used archive formats.
* The new `lazy-require' form allows programs to delay the loading and
instantiation of helper modules until they are needed.
* The new `data/bit-vector' library provides an implementation of bit
vectors (a mutable sequence of booleans) supporting popcount.
* The `racket/generic' library allows the specification of default
method implementations for core datatypes.
* The `openssl' library can verify hostnames and use the operating
system's certificate store to verify certificates.
Package System:
* A new package system is in beta release. This system will become
Planet's successor. It differs significantly from the latter. For
details, please read the documentation at
http://docs.racket-lang.org/planet2/ and list your packages on the new
index at https://pkg.racket-lang.org/.
* The `raco test' command supports testing by collection and package, in
addition to by directory and file, with the "-c" and "-p" options.
Teaching Libraries:
* batch-io: the read and write functions work on Unix-style standard
input and output.
DrRacket:
* DrRacket's GUI is more responsive.
* The automatic parenthesis insertion mode is improved.
Scribble:
* Scribble renders Markdown format files via the "--markdown"
command-line flag. Example use case: Generate documentation hosted on
GitHub or BitBucket.
* Documentation cross-reference information is stored in an SQLite3
database, which means that SQLite3 is required for building Racket
documentation on Unix/Linux machines (but SQLite3 is included in
Racket distributions for Windows and Mac OS X).
Using a database for cross-reference information significantly reduces
the initial footprint of DrRacket, since DrRacket no longer needs to
load all cross-reference information.
Typed Racket:
* Typed Racket programs can require `plot/typed' to draw plots. List-
and vector-accepting functions accept general sequences.
* Typed Racket supports Racket's delimited continuation and continuation
mark operators.
Redex:
* Added more support for `define-judgment-form', including random
generation for well-formed judgments and visualization of judgments.
Deprecation:
The following have been removed in this release:
* the `planet' command-line tool; use `raco planet' instead.
The following has been deprecated and will be removed in the August 2013
release:
* the `mzlib/class100' library; use `racket/class' instead.
Changes in Racket v5.3.1
Racket:
* The `case' form dispatches on characters, fixnums, symbols, and
keywords in logarithmic time. (Thanks to Jon Zeppieri.)
* The new `racket/format' library provides new and improved
string-formatting functions.
* Logging tools include improved filtering support based on the name
of a logger. A new `define-logger' form simplifies the use of
named loggers. Forms such as `log-debug' now support string
formatting.
* The `for' forms now support `#:break' and `#:final' clauses.
* The new PLTCOMPILEDROOTS environment variable configures the
search path for compiled bytecode.
DrRacket:
* Check Syntax now summarizes the documentation (i.e., the blue
boxes) for the identifier at the insertion point in the top-right
corner of the definitions window.
* Check Syntax now runs continuously for programs that declare their
language within the source. This mode has been available for
several of the past releases, but now enabled by default.
* DrRacket can spell-check string constants (enable this in the Edit
menu).
Typed Racket:
* Typed Racket interprets the Any type as a different contract.
This may signal dynamic errors in some existing mixed
typed/untyped programs. The normal fix is to replace a use of Any
with a more specific types.
* NaN is included in all of Typed Racket's floating-point types,
which makes precise floating-point types easier to use.
* Typed Racket supports a `cast' operation with support for
higher-order types.
* Typed Racket provides the `:query-type/args' and
`:query-type/result' utilities to explore types at the REPL.
Miscellaneous:
* The `compatibility' collection provides features from Racket
relatives, such as `defmacro' and mutable lists. These features
are provided to ease porting code to Racket. Avoid them in modern
Racket code.
* Screenshots of the widgets provided by the Racket GUI library are
included in the documentation. (Thanks to Diogo F. S. Ramos.)
* FrTime was ported to racket lang. (Thanks to Patrick Mahoney.)
Deprecation:
The following has been deprecated and will be removed in the January
2013 release:
* the `planet' command-line tool; use `raco planet' instead.
The following has been deprecated and will be removed in the August
2013 release:
* the `mzlib/class100' library; use `racket/class' instead.