Commit Graph

123 Commits

Author SHA1 Message Date
Daniel Feltey
b16f0b24b7 Improvements to unit/c contracts in preparation for unit support in typed/racket
Changes:

 - Allow unit contracts to import and export the same signature.
 - Add "invoke" contracts that will wrap the result of invoking a unit contract,
   no wrapping occurs when a body contract is not specified
 - Improve error messages
 - Support for init-depend clauses in unit contracts.
 - Fix documentation to refelct the above
 - Overhaul of unit related tests

Handling init-depend clauses in unit contracts is a rather large and somewhat
non-backwards-compatible change to unit contracts. Unit contracts must now
specify at least as many initialization dependencies as the unit value being
contracted, but may include more. These new dependencies are now actually
specified in the unit wrapper so that they will be checked by compound-unit
expressions.

This commit also adds more information to the first-order-check
error messages. If a unit imports tagged signatures, previously the errror
message did not specify which tag was missing from the unit contract. Now
the tag is printed along with the signature name.

Documentation has been edited to reflect the changes to unit/c contracts
made by this commit.

Additionally this commit overhauls all tests for units and unit contracts.
Test cases now actually check that expected error messages are triggered when
checking contract, syntax, and runtime errors. Test forms now expand into uses
of rackunit's check-exn form so only test failures are reported and all tests in
a file are run on every run of the test file.
2015-08-11 16:30:39 -05:00
Georges Dupéron
666da0b215 In the docs for normal-case-path, replaced “letter” with “character”, to avoid possible confusion with drive letters. 2015-08-11 07:59:23 -06:00
Georges Dupéron
22bf10e564 Fixed typo in the docs for normal-case-path. 2015-08-11 07:59:23 -06:00
Blake Johnson
fbe8537f18 add compiled-expression-recompile
Uses an unresolver pass, which is expanded to work on more programs.
2015-08-10 16:39:43 -06:00
Asumu Takikawa
9f682a3f11 Add prefab structs to match grammar 2015-08-07 20:11:52 -04:00
Matthew Flatt
2661d46929 toward deterministic bytecode generation
Progress toward making the bytecode compiler deterministic, so that a
fresh `make base` always produces exactly the same bytecode from the
same sources. Most changes involve avoiding hash-table order
dependencies and adjusting scope identity. The namespace used to load
a reader extension is also better defined. Plus many other little
changes.

The identity of a scope that is unmarshaled from a bytecode file now
incorporates the hash of the file, and the relative order of scopes is
preserved in a bytecode file. This combination allows compilation to
start with modules that loaded and compiled in different orders
(including delayed loading of bytecode fragments within one file).

Formerly, a reader extension triggered by `#lang` or `#reader` was
loaded in whatever namespace happens to be current. That's
unpredictable and can pollute a module build at the level of bytecode.
To help make builds deterministic, reader extensions are now loaded in
a root namespace of the current namespace.

Deterministic compilation in general relies on deterministic macros.
The two most common ways for a macro to be non-deterministic are by
using `gensym` (use `generate-temporaries`, instead) and by using an
unsorted hash-table traversal (don't do that).

At this point, bytecode generation is unlikely to be completely
deterministic, since I uncovered non-determinism mostly by iterating
attempts over the base collections. For now, the intent is not to
provide guarantees outside of the compilation of the base collections
--- but "more deterministic" is likely to be useful in the short run,
and we can improve further in the long run.
2015-08-07 15:48:39 -06:00
Matthew Flatt
6bcb449b55 fix impersonator-property:application-mark propagation
Propagate the mark value only if it's on the current continuation
frame, as originally intended. Adjust the docs to clarify.
2015-08-07 05:30:25 -06:00
Matthew Flatt
545c14a9cf adjust some versions in history notes
Promote v6.2.0.x changes to v6.3, since they will not be in v6.2.1.
2015-07-30 14:49:31 -06:00
Matthew Flatt
7b4d25c657 add missing history note on stream* 2015-07-30 14:45:29 -06:00
Matthew Flatt
3dc1dc80e3 add setup/collection-search 2015-07-30 14:12:04 -06:00
Jay McCarthy
2602ff530d Adding no major collection guarantee to collect-garbage minor collections 2015-07-30 11:42:13 -06:00
Jay McCarthy
2f22f86c0a Adding minor collections to collect-garbage 2015-07-30 11:42:13 -06:00
Matthew Flatt
99f29ce8ee repair for nexted splicing forms that define the same name
Nested splicing forms would lead to an "ambigious binding" error
when the nested forms bind the same name, such as in

 (splicing-let ([a 1])
   (splicing-let ([a 2])
     (define x a)))

The problem is that splicing is implemented by adding a scope to
everything in the form's body, but removing it back off the
identifiers of a definition (so the `x` above ends up with no new
scopes). Meanwhile, a splicing form expands to a set of definitions,
where the locally bound identifier keeps the extra scope (unlike
definitions from the body). A local identifier for a nested splicing
form would then keep the inner scope but lose the outer scope, while
a local identifier from the outer splicing form would keep the outer
scope but no have the inner one --- leading to ambiguity.

The solution in this commit is to annotate a local identifier for a
splicing form with a property that says "intended to be local", so the
nested definition will keep the scope for the outer splicing form as
well as the inner one. It's not clear that this is the right approach,
but it's the best idea I have for now.
2015-07-29 06:11:13 -06:00
Vincent St-Amour
496cd97351 Rename open-place to place/context. 2015-07-28 16:14:29 -05:00
Vincent St-Amour
a75b2292af Fix docs for racket/logging to be consistent with make-log-receiver's. 2015-07-28 11:26:09 -05:00
Asumu Takikawa
75e19c9435 Fix docs for syntax-debug-info 2015-07-27 17:16:57 -04:00
Alex Knauth
595925e436 fix doc typos 2015-07-27 10:47:53 -06:00
Brian Lachance
3c98fc54aa Fix bugs/typos in docs for contracts and quote-syntax
1st is a small grammatical mistake
2nd is in a section about ->* yet mistakenly -> is referred to
3rd is about recontract-out yet contract-out is mentioned instead
4th clarifies return value for value-contract
5th replaces free-identifier? with free-identifier=?
2015-07-27 10:47:06 -06:00
Matthew Flatt
9593b4c806 make-syntax-introducer: add optional argument to change kind of scope
Genereating a use-site scope, instead of a macro-introduction scope,
prevents the scope's presense from triggering a #f result from
`syntax-original?`.
2015-07-25 14:37:54 -06:00
Vincent St-Amour
0f2d02cdd2 Move part of unstable/logging to racket/logging.
... and improve and extend its interface at the same time.
2015-07-23 12:22:51 -05:00
Vincent St-Amour
46a8506f99 Add missing label require. 2015-07-23 12:22:50 -05:00
Vincent St-Amour
0864d5848b Doc typo. 2015-07-23 12:22:50 -05:00
Vincent St-Amour
4ee1864941 Merge unstable/place with racket/place. 2015-07-23 12:22:50 -05:00
Vincent St-Amour
91c422bb66 Merge unstable/future with racket/future. 2015-07-23 11:43:37 -05:00
Andrew Gwozdziewycz
ef716ed15d Replace celcius (a common mispelling) with celsius 2015-07-23 11:21:22 -05:00
Sam Tobin-Hochstadt
960fc831fc Provide promise/name?. 2015-07-22 14:33:30 -04:00
Matthew Flatt
594bdd6e61 fix incomplete text of docs for syntax-local-introduce 2015-07-22 11:17:07 -06:00
Matthew Flatt
76a0eef121 make Reference dependency on DrRacket docs indirect
Avoids a dependency of "racket-doc" on "drracket".
2015-07-21 09:20:29 -06:00
Vincent St-Amour
1083a31965 check-duplicate -> check-duplicates
For consistency with remove-duplicates.
2015-07-20 16:00:53 -05:00
Vincent St-Amour
7700b3d736 Move contents of unstable/hash to racket/hash. 2015-07-20 16:00:52 -05:00
Vincent St-Amour
952df81877 Move remf from unstable/list to racket/list.
Add remf* for consistency.
2015-07-20 16:00:52 -05:00
Vincent St-Amour
c0408de912 Move various common prefix functions from unstable/list to racket/list.
Make their interface consistent with the rest of racket/list.
2015-07-20 16:00:52 -05:00
Vincent St-Amour
067ed4ccac Move list-update and list-set from unstable/list to racket/list. 2015-07-20 16:00:52 -05:00
Vincent St-Amour
5e23ad6ccf Move group-by and cartesian-product from unstable/list to racket/list. 2015-07-20 16:00:52 -05:00
Vincent St-Amour
4d9751e98c Move check-duplicate from unstable/list to racket/list.
Make its interface uniform with remove-duplicates.
2015-07-20 16:00:52 -05:00
Vincent St-Amour
0e6baea9f6 Move contents of unstable/function to racket/function.
Split implementation of racket/function to avoid circular dependencies.
2015-07-20 16:00:52 -05:00
Robby Findler
e7e184a0ba link from 'disappeared-use and 'disappeared-binding in reference to check syntax 2015-07-20 10:29:24 -05:00
Gustavo Massaccesi
9fe6c138cf Fix typos in docs 2015-07-18 20:44:36 -06:00
Matthew Flatt
fc5e32e526 switch to set-of-scopes expander
The development history for set-of-scopes is preserved in a "scope"
branch in the main Racket repository, which is commit
 ae88c96f50
2015-07-16 14:20:00 -06:00
Eric Dobson
5cd910f9f2 Fix docs on channel synchronization 2015-06-29 17:34:57 -06:00
Matthew Flatt
f7e1fcd557 log a warning for shadowing an import with a definition 2015-06-24 07:15:29 +08:00
Matthew Flatt
ea016bec96 allow definition in module to shadow a preceding import
This change is experimental and intended to reduce (but certainly not
eliminate) the problem of breaking existing code by adding exports to
a module.
2015-06-23 21:31:57 +08:00
Eric Dobson
82218f33bd Fix docs on thread-resume-evt
It returns `thd` as in the previous sentence, not itself.
2015-06-20 21:43:34 +08:00
Tony Garnock-Jones
4b2c9cfbcc Add exn->string, following the function of the same name in the web-server. 2015-06-20 21:43:33 +08:00
Alexis King
c79f646545 Add stream* to complement stream 2015-06-20 21:43:27 +08:00
Sam Tobin-Hochstadt
fc6ead4ac2 Improve match compilation of ? and fix bugs.
- Coalesce repeated use of the same predicate.
- Fix scoring of Exact patterns, and scoring generally.
- Use `OrderedAnd` where needed.
- Guarantee that `and` patterns match in order.
- Thread bound variable information properly in GSeq compilation.
- Warn when variables are used non-linearly with `...`
  (making this behave properly was not backwards compatible).

Closes #952, which now runs in <1ms and make it a test case.

Also add margin note about `?` patterns and multiple calls.
2015-06-05 18:08:33 -04:00
Alexis King
35c3554343 Make pair accessor shorthand examples properly link to id docs 2015-06-04 06:48:18 -06:00
Alexis King
495784ed49 Fix contract error in in-vector documentation example 2015-06-04 07:38:57 -05:00
Matthew Flatt
0bed8e8928 fix command-line docs for flags that start "--"
Closes PR 15080
2015-05-31 06:06:22 -06:00
Matthew Flatt
12308e3f17 clarify in docs that threads provide sequential consistency 2015-05-16 15:19:13 -06:00