The Racket repository
![]() The bug was in the way matching worked for lists. Specifically, if you define a grammar like this one: e ::= (- e) (- e e) integer and you have a term like this: (- (- (- (- (- (- (- 11))))))) then at each step of matching against 'e', Redex would try both alternatives, meaning it is attempting 2^n matches (where n is the number of nested minus signs). The fix eagerly checks the lengths of the lists and so brings this back to a linear time matching problem. (This came up in the delimited continuation model from the paper _Constraining Delimited Control with Contracts_, ESOP 2013, altho Redex's caching can mask the bad behavior, making this linear again in normal uses of that model.) |
||
---|---|---|
native-pkgs@b698e73c35 | ||
pkgs | ||
racket | ||
.gitattributes | ||
.gitignore | ||
.gitmodules | ||
.mailmap | ||
.travis.yml | ||
INSTALL.txt | ||
Makefile | ||
README.txt |
This is the source code for the main Racket distribution. See "INSTALL.txt" for information on building Racket. License ------- Racket Copyright (c) 2010-2014 PLT Design Inc. Racket is distributed under the GNU Lesser General Public License (LGPL). This means that you can link Racket into proprietary applications, provided you follow the rules stated in the LGPL. You can also modify Racket; if you distribute a modified version, you must distribute it under the terms of the LGPL, which in particular means that you must release the source code for the modified software. See racket/src/COPYING_LESSER.txt for more information.