Racket Changelog

New in version 6.2

August 5th, 2015
  • core repo
  • The package manager supports a direct references to Git repositories via "git://[...]", "http://[...].git", and "https://[...].git" URLs. (Previously, only references to GitHub were supported.)
  • A --clone option for raco pkg install or raco pkg update facilitates Git-based package development. If a package X has a Git repository source, installing and updating the package pulls from the repository in a read-only mode. Using raco pkg update --clone X switches the local installation to a repository checkout that is suitable for modifying the package implementation, issuing pull requests, pushing changes, and so on.
  • Using raco pkg update --lookup X switches the package back to the default installation mode.
  • drracket
  • Its on-line check syntax works with graphical content.
  • Increased availability of DrRacket's blueboxes, including method and constructor information.
  • The "Open Require Path" menu item supports ".." in relative pathnames.
  • data
  • Added data/enumerate, a library that supports efficient enumeration of data structures
  • redex
  • Its redex-check facility uses data (in addition to random) enumeration to try to find counter-examples.
  • Its generate-term function accepts additional arguments to return the "i"-th member of a pattern using data/enumerate (meaning it efficiently supports very large values of "i").
  • The examples collection includes Launchbury's 1993 big-step lazy semantics.
  • htdp
  • 2htdp/image's polygon may be built out of bezier curves instead of just straight lines (see the docs for pulled-point).
  • 2htdp/abstraction is a teachpack for instructors and students who wish to use for/* loops, match, define-type and type-cases in ISL and ISL+.
  • 2htdp/universe programs can be exported using DrRacket's executable creation mechanism and they behave properly when run independently.
  • typed-racket
  • Typed Racket in DrRacket displays tooltips that show the types of expressions. Tooltips are also displayed for type errors.
  • Typed Racket loads generated contracts only when needed. This reduces memory use and startup time for Typed Racket programs.
  • Typed Racket has improved support for prefab structures, future semaphores, and async channels.
  • Typed Racket understands when two different variables refer to the same thing, and updates types accordingly. This particularly improves the type checking of macros such as match.

New in version 5.93 (February 4th, 2014)

  • Fixed a low-level concurrency problem with the GUI library for Mac OS X, which especially affected 32-bit builds;
  • Fixed GRacket-based launchers (such as `drracket`) in a Unix-style installation;
  • Expanded the list of recognized OpenSSL library versions;
  • Fixed small CSS problems and inconsistencies (relative to v5.3.6) in the new Scribble style as used by the Racket documentation;
  • Added the version number back to the "racket" directory within the source distribution bundle.

New in version 5.92 (January 27th, 2014)

  • Racket 5.92 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.
  • Recent releases included the "beta" versions of the package system. Racket version 5.92 incorporates many improvements suggested by these preliminary experiences:
  • 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.
  • Further improvements 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; e.g., see http://bit.ly/1d0Ye4z
  • 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.

New in version 5.3.6 (August 10th, 2013)

  • Racket v5.3.6 is a bugfix release.
  • It eliminates errors from v5.3.5 that people have found over the summer.

New in version 5.3.5 (June 18th, 2013)

  • This is a special-purpose release to match the arrival of “Realm of Racket” in bookstores. Racket v5.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.

New in version 5.3.4 (May 9th, 2013)

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

New in version 5.3.3 (February 16th, 2013)

  • This is a bug-fix release to address a flaw in DrRacket v5.3.2 concerning interactions between the contour window and the syntax coloring.

New in version 5.3.2 (February 1st, 2013)

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

New in version 5.3.1 (November 8th, 2012)

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

New in version 5.2.1 (February 3rd, 2012)

  • This version adds improved performance of Redex's matcher, an improved "plot" library, nicer-looking plots, customizable dual axis ticks/transforms, stacked histograms, and 3D vector fields.
  • Performance improvements include using epoll()/kqueue(), cross-module inlining, and using SSE for JIT-compiled floating-point operations.
  • Literal strings, regexps, etc. are interned.
  • DrRacket uses composable ray-traced icons, and Typed Racket allows customizing type errors in macros.
  • "2htdp/universe" supports an experimental game pad key handler.
  • The "db" library now supports nested transactions and PostgreSQL arrays.

New in version 5.2 (November 10th, 2011)

  • DrRacket comes with an experimental, on-line check syntax tool, although this new tool is disabled default. See below for more information.
  • The new db library offers a high-level, functional interface to popular relational database systems, including PostgreSQL, MySQL, and SQLite, as well as other systems via ODBC.
  • A new XREPL collection provides convenient commands for a plain racket REPL. It is particularly convenient for people who prefer console-based work and alternative editors. See also the new chapter on command-line tools and other editors at the end of the Racket Guide.
  • The plot collection has been reimplemented in Racket. It now offers PDF output, log axes, histograms, and more. Some code that uses plot will still work, and some will need light porting. The plot/compat module offers expedient backward compatibility.
  • DrRacket uses more conventional key bindings: C-t creates a new tab, C-w closes the current one, and C-r runs the definitions. On Mac OS X, the Command key is used. See “Defining Custom Shortcuts” in the DrRacket manual for an example that uses the old key bindings.
  • The new raco link command registers a directory as a collection, which allows the collection directory to reside outside the “collects” tree and without changing the PLTCOLLECTS environment variable.
  • Typed Racket:
  • Typed Racket provides static performance debugging support to show which code gets optimized and point out code that does not. Use the “Performance Report” button in DrRacket.
  • More intuitive types in printouts in the REPL and in error messages. Use :query-result-type to explore types, or :print-type for a full printout.
  • Typed Racket now supports defining function with optional arguments using the same syntax as Racket.
  • Redex now supports specifying (and testing and automatically typesetting) judgment forms including type systems and SOS-style operational semantics.
  • Fixed several GUI problems, including problems on Ubuntu 11.10 (GTK+ 3) and 64-bit Mac OS X.
  • Internal-definition expansion has changed to use let* semantics for sequences that contain no back references. This change removes a performance penalty for using internal definitions instead of let in common cases, and it only changes the meaning of programs that capture continuations in internal definitions. Internal definitions are now considered preferable in style to let.
  • Support for begin-for-syntax has been generalized; modules may now define and export both value bindings and syntax bindings (macros) at phase 1 and higher.
  • Due to a bug, phase 1 syntax (or higher) is not available in DrRacket's #lang-based REPL. A simple workaround is to disable debugging in DrRacket (see “no debugging” radio button in detailed language dialog).
  • Additional Items:
  • The racket/gui library (and Slideshow) provides more support for multiple-screen displays.
  • DrRacket remembers whether an opened file used LF or CRLF line endings, and will continue using the same. When creating a new file, a preference determines how it is saved.
  • net/url can now follow HTTP redirections.
  • The LNCS and JFP class files are no longer distributed with Racket. Instead, they are downloaded on demand.
  • The Algol language implementation is now available as a plain language using #lang algol60.
  • The Racket-to-C compiler (as accessed via raco ctool or mzc) has been removed; Racket's JIT has long provided better performance, and the FFI provides better access to C libraries.
  • Contracts can be applied to exports with the new contract-out form within provide, instead of a separate provide/contract form. (The new contract-out form is implemented as a new kind of “provide pre-transformer”.)
  • The date* structure type is an extension of date with nanosecond and time-zone-name fields.
  • New looping constructs: for/sum and for/product.
  • Direct calls to keyword-accepting functions are now optimized to eliminate the overhead of keywords. In addition, the compiler detects and logs warnings for keyword-argument mismatches.
  • The libfit interface is available from plot/deprecated/fit, and will be removed in the near future.
  • The Unix installer has been re-done, and it is now more robust.
  • The built-in reader and printer support for Honu is removed. (This functionality is re-implemented in Racket.)
  • On-line Check Syntax:
  • DrRacket now provides an on-line version of the syntax check tool, which means that syntax checking runs automatically while you continue to edit a program. With this tool enabled, its annotations (e.g., binding arrows) and actions (e.g., the renaming refactoring and direct documentation links) are almost always available.
  • We have noticed that on-line syntax checking renders DrRacket unstable on occasion, perhaps because it relies on relatively new support for parallelism. Occurrences of the problem are rare, but they are not rare enough, which is why we have disabled the tool by default. At the same time, current users of the tool find it so valuable that we felt it should be included in the release. We expect to track down the remaining problems and enable the tool by default in near-future release.
  • To enable on-line syntax checking (for #lang-based programs only), click on the red dot in the bottom right of DrRacket's window. To turn it off, click there again.

New in version 5.1.3 (August 16th, 2011)

  • This is a bugfix release, resolving the DrRacket issue with the contour view. In addition, two tex files with problematic licensing were removed.

New in version 5.1.2 (August 4th, 2011)

  • The download page includes 64-bit installers for Mac OS X, Windows, and two Debian flavors. Racket now supports OS X Lion.
  • Racket now includes a new racket/place library to support parallelism, complementing racket/future. Racket's parallel build process is now based on places instead of multiple OS processes.
  • Places support share-nothing parallelism and message-passing communication. Compared to futures, places are heavyweight, but they have a simpler performance model.
  • The syntax-certificate system has been replaced by a syntax-taint system. Both certificates and taints were designed to protect otherwise inaccessible bindings from abuse when they appear in macro expansions. Taints are simpler and lighter, and the switch closes known holes in the certificate system. Macros that are not implemented with syntax-rules or define-syntax-rule, however, must explicitly use syntax-protect to protect their expansions from abuse.
  • The net/url library supports HTTPS connections, but beware that by default all sites are accepted (equivalent to ignoring a browser's warnings about untrusted certificates).
  • Error messages in the student languages use a simplified vocabulary and consistent phrasings. If you maintain curriculum material or teachpacks then please consider updating. See the “Error Message Composition Guidelines” section in the documentation for details.
  • Typed Racket: almost all core Racket data structures and operations are now accessible in Typed Racket (most of this work is due to prolific contributor Eric Dobson). The performance of the typechecker has been significantly improved.
  • The scriblib/bibtex library supports BibTeX-formatted citation databases in Scribble documents. BibTeX can be tricky to parse, so please report failed entries as bug reports.
  • The for forms now support an #:unless clause, and a nonnegative integer can be used as a sequence. The new compose1 function creates single-valued composition functions. The racket/function library now provides identity, thunk, and thunk*.
  • The license has been clarified: we now use LGPLv2.1 uniformly. (The license file used to specify LGPLv2, contrary to the download pages.)

New in version 5.1.1 (May 12th, 2011)

  • A new version was recently released. See blog.racket-lang.org for an announcement.

New in version 5.1 (February 15th, 2011)

  • The racket/draw library—which implements the drawing half the GUI toolkit—can be used independent of the racket/gui/base library and without a graphics display (e.g., without an X11 connection).
  • The new library has one small incompatibility with the old GUI toolbox: 'xor drawing is no longer supported. The new library has many additional features: rotation and general affine transformations, PDF and SVG drawing contexts, gradients, and alpha-channel bitmaps.
  • The GRacket executable is no longer strictly necessary for running GUI programs, because the racket/gui/base library can be used from Racket. To the degree that a platform distinguishes GUI and console applications, however, the GRacket executable still offers some additional GUI-specific functionality (e.g., single-instance support).
  • The new racket/gui/base library includes small incompatibilities with the old GUI toolbox: the send-event, current-ps-afm-file-paths, and current-ps-cmap-file-paths functions have been removed. The racket/gui/base library re-exports racket/draw, so it includes the same drawing functionality as before (except for 'xor drawing).
  • The new racket/snip library can be used independently of racket/gui/base to work with graphical editor content (e.g., images in student programs). Like racket/draw, the racket/snip library is re-exported by racket/gui/base.
  • The Web Server includes a backwards incompatible change that prevents X-expressions and lists of bytes from being directly returned from servlets. This change will increase performance for those types of responses and allow easier experimentation with response types. Please see "collects/web-server/compat/0/README" in the installation to learn about porting your servlets forward. Don't worry. It's easy.
  • The new raco demodularize tool collapses a module's dependencies into a single module comprising the whole program. This transformation currently provides no performance improvement, but is the basis for cross-module optimization and dead-code elimination tools to come. The transformation is currently useful for static analysis of whole Racket programs.
  • The picturing-programs teachpack, formerly installed via PLaneT, is now bundled with the standard distribution. Use the teachpack with (require picturing-programs) instead of (require installed-teachpacks/picturing-programs). The old PLaneT-based installation procedure still works, but it now merely installs a stub that invokes the bundled version.
  • Slideshow picts, racket/draw bitmaps, and images created with 2htdp/image can now be used directly in Scribble documents. More generally, the new file/convertible protocol enables any value that is convertible to a PNG and/or PDF stream to be used as an image in a Scribble document.
  • The Same game sports a new look and an improved scoring system. (The current known high score is 12,429; can you beat that?)

New in version 5.0.1 (August 4th, 2010)

  • PLT Scheme has been renamed to Racket: http://racket-lang.org/new-name.html
  • Datalog is a lightweight deductive database system with Racket integration. It is now available in the datalog collection and with #lang datalog.
  • Racklog provides Prolog-style logic programming in Racket, adapted from Dorai Sitaram's Schelog package. It is available in the racklog collection and now as #lang racklog.
  • By default make install and raco setup compile collections in parallel on all available processors. (Use raco setup -j 1 to disable, if necessary.)
  • Changes (as part of 5.0) in the racket language compared to the scheme language: constructor-style printing, a struct alternative to define-struct that fits more naturally with match and constructor-style printing, bytecode-dependency management via SHA-1 hashes instead of just timestamps (where the openssl/sha1 library provides the SHA-1 hash function), a reorganization of scheme/foreign into ffi/unsafe and associated libraries, and new printing functions eprintf and displayln. Also, a generator from racket/generator is required to have the form (generator () body ...), which supports a planned extension to let a generator accept arguments.
  • Changes to the racket language (since 5.0): internal-definition positions allow mixing expressions with definitions, full continuations can escape past a continuation barrier, custodians can attempt to terminate subprocesses and subprocess groups (see current-subprocess-custodian-mode, subprocess-group-enabled), the JIT supports additional unboxing flonum operations and unsafe variants, ffi/unsafe provides an asychronous-call mechanism to deal with foreign threads, a new "." modifier for format string directives (e.g., "~.s" and "~.a") limits the respective output to (error-print-width) characters.
  • The core type system of Typed Racket has been substantially revised. In particular, Typed Racket can now follow significantly more sophisticated reasoning about the relationships between predicates. Additionally, Typed Racket now allows variable arity types in more places, allowing programmers to specify variable-arity lists.
  • We are working on an optimizing version of Typed Racket that takes advantage of type information for certain classes of programs. This project is a work in progress. For those interested, see the documentation for #:optimized.
  • The web-server/formlets library adds a formlet* form that allows dynamic formlet construction, as opposed to formlet which requires syntactic Xexprs and static formlets. Several new library formlets are added.
  • The syntax/parse library has new support for matching literals at different phases using the #:phase argument for literals and literal sets.
  • RackUnit now includes a GUI test runner as rackunit/gui.
  • The 2htdp/image library now includes flip-vertical and flip-horizontal operations that mirror images (vertically and horizontally).

New in version 4.2.5 (April 3rd, 2010)

  • PLT now supports multi-core parallelism via futures. Futures create tasks that run in parallel, as long as the tasks stay in the "fast path" of the runtime system. For more information, see the guide.
  • Our unit testing framework, schemeunit, is now included in the distribution. A graphical test runner is available via schemeunit/gui.
  • The support languages for the "Programming Languages: Application and Interpretation" textbook by Shriram Krishnamurthi are now part of PLT Scheme. In addition the PLAI GC language comes with a random mutator generator (to help test collectors) and an improved heap visualizer.
  • New Russian and Ukranian translations, thanks to Sergey Semerikov.
  • A number of improvements to Redex's typesetting facilities.
  • Typed Scheme users can now automatically generate predicates from types with define-predicate. Typed code can be inserted in untyped modules by requiring with-type from typed/scheme.
  • The scheme/class library now provides contract combinators for classes (class/c) and objects (object/c). See the Reference and Guide for details. Also, a backwards-compatible object-contract version of object/c has replaced the old object-contract combinator.
  • Writing new kinds of contracts is now easier with keyword-based constructors (make-contract and make-flat-contract), a simpler set of structure properties (prop:contract and prop:flat-contract), and the introduction of blame objects for tracking contract metadata.
  • The Scheme-implemented bytecode reader fails less often. This is used by "mzc --decompile". The Scheme-implemented bytecode writer uses the compact bytecode format and fails less often. This may be used in the future for Scheme-implement bytecode processors.
  • The language dialog now suggests using "#lang" more strongly as the default language. DrScheme no longer uses the term `Module language'.

New in version 4.2.4 (January 29th, 2010)

  • changed how equality works (it is now based on how the images draw, instead of on an underlying algebra of images)
  • added cropping and curves
  • overlay, beside, and above now line things up on centers, rather than upper lefts
  • added scene-related funtions (place-image, scene+line, etc)
  • added support for drawing with various kinds of pens

New in version 4.2.3 (December 1st, 2009)

  • The unit test framework for the teaching languages provides check-member-of and check-range for checking "random functions", i.e., "functions" that may produce several different results for one and the same argument.
  • Added a new image library, 2htdp/image. Significant changes from htdp/image:
  • copying and pasting does not introduce jaggies
  • equal? comparisons are more efficient
  • added rotation & scaling
  • got rid of pinholes (new overlay, beside, above functions based on bounding boxes)
  • The scheme/vector library provides common vector operations (also reprovided by scheme).
  • The scheme/promise library provides several new kinds of promises with alternatives execution strategies.
  • New port-reading utilities: in-port, port->list, file->list.
  • A new require-macro, path-up, for requiring a file that is higher in the directory tree.

New in version 4.2.2 (October 5th, 2009)

  • DrScheme compiles all files by default.
  • There are new Scribble libraries and documentation.
  • DrScheme supports scribble coloring.
  • There is a new 'syntax/keyword' library and documentation for 'syntax/parse', support for abstract contracts via #:exists, and a new 'in-producer' sequence expression and 'scheme/generator' library.
  • The API to Universe has a number of new constructs.
  • There are changes to the DeinProgramm / DMdA languages.
  • The test engine in the HtDP languages no longer warns programmers when there are no tests.
  • ProfessorJ and related code is no longer included in the PLT distributions.

New in version 4.2.1 (July 30th, 2009)

  • This is the last release that includes ProfessorJ. As of the next release, Kathy Gray who created and maintained the Professor will move the code to planet and maintain only at a minimal level.
  • Typed Scheme 2.0 extends the type system significantly, making it more expressive. For example, predicates applied to selectors, such as (number? (car x)), are meaningful to the type system.
  • Faster installation of Planet packages that trigger install of other Planet packages, because the documentation index is updated only once after a group of packages is installed.
  • The syntax/parse library provides macro writers with an enhanced syntax pattern matcher that reports errors based on the patterns' declared classes of syntax.
  • Identifier mappings following the v4 dictionary interface and naming conventions are available from the syntax/id-table library.
  • Redex: added define-relation and generalized patterns that appear in "where" clauses to use the full Redex pattern matcher. (This is a backwards incompatible change, but one often requested; see the Redex release notes for details.)
  • The Web Server's serializable closures are now available for other purposes through the web-server/lang/serial-lambda library.
  • Teachpacks: small changes to universe portion of the "universe.ss" API, plus the addition of a form for launching many (communicating) worlds simultaneously. Bug fixes concerning conversion to strings.
  • It is now possible to create custom scribble readers with a command characters different than @, see make-at-reader/inside and make-at-reader
  • Note: this is likely to be the last release that includes a solaris distribution. If you need these builds, or if you have access to a (Sparc) Solaris machine than can be used in PLT builds, then please let me know.

New in version 4.2 (June 1st, 2009)

  • A new statistical profiler is now available; see the "profiler" manual for more information. Currently, the profiler supports only textual output, but future plans include a GUI interface and DrScheme integration.
  • The world teachpack is now deprecated. Its replacement universe has a new interface that uses strings instead of symbols and characters.
  • Web-server: Native continuations in the stateless servlet language support capturing continuations from untransformed contexts; soft state library for stateless servlets.
  • DrScheme's Stepper can now jump to a selected program expression.
  • New in scheme/base: hash-has-key?, hash-ref!, in-sequences, in-cycle. New in scheme: count, make-list (from scheme/list), const (from scheme/function).
  • Some performance improvements, including faster start-up for small programs. The latter is a result of delaying module invocations at higher phases (compile time, meta-compile time, etc.) until compilation is demanded at the next lower phase; this on-demand instantiation is per-phase, as opposed to per-module within a phase.

New in version 4.1.5 (March 22nd, 2009)

  • Web Server:
  • new URL-based dispatching library `web-server/dispatch',
  • customizable continuation serialization policies for the stateless web language `web-server/stuffers',
  • abstraction of serve/servlet to build simpler dispatchers `web-server/servlet-env',
  • HTTP Digest authentication support `web-server/http/digest-auth',
  • built-in cookie support in `web-server/http/cookie' and `web-server/http/cookie-parse',
  • highlighting and pretty-printing of errors in Xexpr constructions,
  • load control dispatcher for limit concurrent sessions `web-server/dispatchers/limit'.
  • Scribble:
  • Literate programming is now available using the new `scribble/lp' language.
  • A new `at-exp' language makes it convenient to use the scribble reader's @-expressions for general code.
  • The `scribble/text' preprocessor language has been extended to deal with indentation and other formatting issues.
  • The "scribble" command-line tool accepts a `--pdf' flag to render PDFs (via pdflatex).
  • DrScheme now provides feedback when PLaneT downloads and installs new packages.
  • Units & Contracts:
  • Elements of unit signatures can now be associated with contracts via the `contracted' signature form.
  • A contract combinator for units, `unit/c', has been added.
  • The new `with-contract' form provides a nestable submodule contract boundary, protecting a group of definitions from the surrounding code with contracts.
  • The `define/contract' form has been reworked and new define forms have been added: `define-struct/contract' and `define-unit/contract'.
  • Language levels and teachpacks from the DeinProgramm project for the German textbook "Die Macht der Abstraktion" by Herbert Klaeren and Michael Sperber have been added.
  • Misc:
  • Typed Scheme now comes with several more pre-wrapped libraries, found in the `typed' collection.
  • The `xml' and `html' collections are now contracted.
  • Binding parsing in net/cgi now interacts with `net/uri-codec's configuration parameters.
  • DrScheme captures logging output.
  • Check syntax: it is now possible to tack arrows crossing the currently selected text.
  • New `bitwise-bit-field' function.
  • The usual pile of bugfixes. (Notable: `scheme/package' works, `deflate' compression fixed, DrScheme language dialog issue resolved, `match' fixes, Windows networking, and much more.)

New in version 4.1.3 (November 21st, 2008)

  • Web Server:
  • Documentation rewritten to separate servlet APIs and server extension APIs
  • HTTPS supported on the "plt-web-server" command-line with "--ssl" option
  • Stateless servlets supported in default configuration through "stateless interface-version
  • `web-server/servlet-env- supports top-level servlets through #:servlet-path
  • Servlets are served from anywhere in the htdocs directory by default
  • A template system based on the Scribble syntax has been added, see web-server/templates in the documentation
  • And many other internal modifications to make extension easier!

New in version 4.1.2 (October 28th, 2008)

  • This is a bugfix release.

New in version 4.1.1 (October 6th, 2008)

  • web-server: New servlet development tutorial; quick launching of servlets from DrScheme via the `web-server/insta' language; new form abstraction through formlets.
  • misc: mzc can "decompile" bytecode files; `#lang' lines wired to the top of DrScheme's definition window; improved searching in DrScheme; some foreign interface extensions.