![]() Instead of keeping a rectord type's ancestry in a vector ordered from subtype to supertype, keep the vector the other way around, and include a record type at the end of its own vector. This order makes a more direct test possible when checking for a known record type, especially one without a supertype, and it's generally easier to reason about. The revised compilation of record predicates trades some speed in one case for smaller generated code and speed in other cases. The case that becomes slower is when a predicate succeeds because the record is an immediate instance of the record type. The cases that go faster are when a predicate fails for a non-instance record or when a predicate succeeds for a non-immediate instance. It's possible that an immediate-instance shortcut is worthwhile on the grounds that it's a common case for a predicate used as contract, but we opt for simpler and less code for now, because the difference is small. Also, add `record-instance?`, which in unsafe mode can skip the check that its first argument is a record, and cptypes can substitute `record-instance?` for `record?` in some cases. This change was worked out independently and earlier by @yjqww6, especially the cptypes part. Related to #3679 |
||
---|---|---|
.github | ||
pkgs | ||
racket | ||
.gitattributes | ||
.gitignore | ||
.lgtm.yml | ||
.mailmap | ||
.makefile | ||
build.md | ||
LICENSE | ||
Makefile | ||
README.md |
Racket is a general-purpose programming language and an ecosystem for language-oriented programming.
This repository holds the source code for the core of Racket plus some related packages. The rest of the Racket distribution source code is in other repositories, mostly under the Racket GitHub organization.
Quick Start
Pre-built versions of Racket for a variety of operating systems and architectures, as well as convenient source distributions are available at
https://download.racket-lang.org
Racket comes with extensive documentation, including several tutorials. You can read all of this documentation, as well as documentation for third-party packages at
Building from Source
For information on building Racket from this repository, see the Build Guide.
Contributing
Contribute to Racket by submitting a pull request, joining the development mailing list, or visiting the IRC or Slack channels.
By making a contribution, you are agreeing that your contribution is licensed under the LGPLv3, Apache 2.0, and MIT licenses. Those licenses are available in this repository in the files racket/src/LICENSE-LGPL.txt, racket/src/LICENSE-APACHE.txt, and racket/src/LICENSE-MIT.txt.
See the Racket Build Guide for more guidance on contributing.
The Friendly Environment Policy contains guidelines on expected behavior within the Racket community.
License
Racket is free software; see LICENSE for more details.