Commit Graph

43022 Commits

Author SHA1 Message Date
Sorawee Porncharoenwase
5ee0f73957 further simplification 2021-01-07 09:52:16 -05:00
Sorawee Porncharoenwase
64067704bc reduce unnecessary vector-ref 2021-01-07 09:52:16 -05:00
Sorawee Porncharoenwase
6ace62a717 list: optimize in-combinations and combinations
This PR in a sense reverts f83cec1b04 and attempts to directly fix
the bug that the commit tries to address with an approach similar to the
original one.

The problem with the aforementioned commit is that, Gosper's hack
only works efficiently when the length of `l` is small enough that
the number representation can fit into a fixnum
(so that all bit operations take constant time).
When the length of `l` is large, the number representation could
become a bignum with length proportional to the length of `l`.
This is not ideal because it causes the time complexity of the algorithm
to be `O({|l| choose k} |l|)` instead of `O({|l| choose k} k)`, which
would be a significant performance degradation when `|l|` is much
larger than `k`.
2021-01-07 09:52:16 -05:00
sorawee
d40c4d31c7
bc and cs: make srcloc->string compatible
Currently, in Racket BC, the following program:

```
(srcloc->string (make-srcloc "x.rkt" #f #f 90 #f))
(srcloc->string (make-srcloc "x.rkt" #f 80 #f #f))
(srcloc->string (make-srcloc "x.rkt" #f #f #f #f))

(srcloc->string (make-srcloc "x.rkt" #f 80 90 #f))
(srcloc->string (make-srcloc "x.rkt" 70 #f 90 #f))
(srcloc->string (make-srcloc "x.rkt" 70 80 #f #f))
(srcloc->string (make-srcloc "x.rkt" 70 80 90 #f))
```

results in:

```
"x.rkt::90"
"x.rkt::80"
"x.rkt::-1"
"x.rkt::80"
"x.rkt:70:90"
"x.rkt:70:80"
"x.rkt:70:80"
```

This output is very confusing and inconsistent.
When we see "x.rkt::90", we can never be sure if it's a srcloc
whose position is 90, or a srcloc whose column is 90.
The same applies for "x.rkt:70:90".

Moreover, the srloc "x.rkt::-1" is weird and is arguably incorrect
(see #1371).

For CS, the output would sometimes contain `#f`, and that is fixed
here by not trying to add position information when it's not available.
2021-01-07 07:44:29 -07:00
Matthew Flatt
bdc43a891a cs: force all foreign callbacks to be in atomic mode
Non-atomic mode is questionable at best with BC, and more so with CS.

With BC, a thread swap at least copies the fragment of the C stack
that is between a foreign call and a callback; that can work with some
C libraries, but it goes wrong often enough that it really shouldn't
be relied on. On the plus side, if it's going to go wrong, at least it
tends to go wrong right away (i.e., something in the C frame tends to
get broken in normal runs).

With CS, the C stack is not captured as part of a thread, and so
non-atomic mode 's even more broken. Non-atomic mode could work if you
know that no other thread is running that can involve foreign calls
and callbacks, but that assumption is usually not a good one. Worse,
when things finally go wrong, it's likely several scheduling steps and
thread interleavings away from the problem (e.g., #3459).

There's a chance that this change will stop some existing programs
from working ok on CS. It's more likely to make existing programs work
as intended on CS; the common case is that atomic mode is technically
needed even though non-atomic mode happened to work in practice with
BC.
2021-01-07 05:39:35 -07:00
yjqww6
e71c217758
cs: inline non-authentic struct predicate 2021-01-06 13:29:07 -07:00
Sorawee Porncharoenwase
f41b180b48 fix typos in datum->syntax error message 2021-01-06 14:12:12 -05:00
Davis Silverman
17b7033402
Fix typo and trailing whitespace in box-cas! docs (#3601) 2021-01-05 08:31:53 -06:00
Pavel Panchekha
b56276c670 Allow variables in unquote-splicing terms
I think that in general, `null-terminated?` should admit all patterns
that _could_ match a list, instead of just the ones that _only_ match
a list. That means that `(app f)` patterns and many others should also
be valid, though those are harder to implement, so I haven't tried
those yet.
2021-01-04 18:42:30 -06:00
Matthew Flatt
4c6bb055b0 cs: fix transparent internal structure types
Commit d96273bc0a broke internal "system" structures in the expander
that need to be transparent.
2021-01-04 06:28:32 -07:00
Matthew Flatt
27a13cd060 replace hack that enables an unreliable timing test 2021-01-03 21:26:14 -07:00
shhyou
dc76e1b7e0 regexp-split perf. test is unreliable on Windows 2021-01-03 18:52:58 -06:00
Matthew Flatt
d96273bc0a object-name: return #f for some built-in kinds of values
This change is mostly for making CS consistent with BC, but in the
case of `(object-name #'x)`, it also makes BC consistent with BC
before the macro-expander rewrite.

Closes racket/pconvert#9
2021-01-03 09:49:01 -07:00
Matthew Flatt
ecd2234d56 syntax/module-reader: make language name after meta-reader syntax-original?
Thanks to Robby for the test.
2021-01-02 16:44:28 -07:00
Matthew Flatt
7438586cf0 cs & thread: fix atomic timeouts
Commit 9a3eb15d8b broke atomic-timeout handling. As aresult, for
example, using the scroll thumb on Mac OS could freeze DrRacket as
long as something is running for a canvas refresh.
2021-01-02 08:22:14 -07:00
shhyou
db9c06aff1 Install local package catalog in Windows CI 2020-12-31 17:23:39 -05:00
Matthew Flatt
f299c4304d Chez Scheme: save an instruction on record predicates
Combine separate subtraction and comparison instructions into one in
the case of non-sealed record types.
2020-12-31 07:43:46 -07:00
Matthew Flatt
30eb35b99c cs & schemify: improve folding of procedure? and procedure-arity-includes? 2020-12-30 17:14:43 -07:00
Matthew Flatt
23300fd18d cs: use nongenerative records in core 2020-12-30 15:34:46 -07:00
Matthew Flatt
e604c2deb9 Chez Scheme: change record-type predicate to constant-time
Change the representation of records to keep an ancestor vector
instead of just a parent, so a record-type predicate (for a non-sealed
type) can be constant-time.
2020-12-30 14:02:38 -07:00
Matthew Flatt
a8819af26a cs & schemify: further refinments to left-to-right and letrec
More cases where the code can be mostly left alone, and then cp0 and
company can make further improvements.
2020-12-30 09:23:29 -07:00
Bogdan Popa
62e8f27bf7
inside: note necessary entitlement to embed CS using hardened runtime 2020-12-30 05:50:37 -07:00
David Van Horn
001ad13297
Check numeric argument to real->decimal-string
Closes #3565
2020-12-30 05:09:14 -07:00
Matthew Flatt
15bda57d77 cs & io: fix UDP receive poller registration
Closes #3590
2020-12-30 05:05:28 -07:00
Matthew Flatt
dbe36162ac cs: fix some predefined struct-operation procedure names
Closes #3592
2020-12-30 04:54:06 -07:00
Matthew Flatt
c7ca4414ca cs & io: small clean-ups to seconds->date
Streamline some things that probably needed to be different along the
way.
2020-12-30 04:49:48 -07:00
Matthew Flatt
4b7b1872dc version bump for seconds->date change 2020-12-30 03:44:14 -07:00
shuhung
4b4ed24c65
Implement seconds->date in the io layer 2020-12-30 03:41:33 -07:00
shhyou
9842dd6216 Send notification if the repo is racket 2020-12-29 22:55:36 -06:00
Matthew Flatt
4936977c56 cs & schemify: prevent reorder of allocation and continuation capture 2020-12-29 16:23:47 -07:00
Matthew Flatt
95e5acdb0d Chez Scheme: enable more let lifting
For example, allow
  (cdr (let ([x (f)]) (cons x x)))
to be turned into
  (let ([x (f)]) (cdr (cons x x)))
and then just
  ($value (f))
2020-12-29 14:07:43 -07:00
Matthew Flatt
ea96e2d304 add unsafe-set-immutable-{car,cdr}!
Reluctantly, with intentionally oxymoronic names, and with the key
caveat: using these requires making correct assumptions about Racket's
implementation.

With BC, a related assumption was that `unsafe-set-mcar!` and
`unsafe-set-mcdr!` mutate pairs, but that's not the case with CS. So,
adding these functions supports a kind of portability between BC and
CS.
2020-12-29 08:55:40 -07:00
Matthew Flatt
becf34a79b expander: fix check on syntax-local-lift-provide
Closes #3589
2020-12-28 14:07:10 -07:00
Matthew Flatt
471f18c02d Revert "makefile: clone single pb branch"
This reverts commit 250f5ca661.

The `--single-branch` flag requires Git 1.7.10 or later.
2020-12-28 09:53:31 -07:00
Matthew Flatt
70a600e1b5 build-instruction typos and clarifications 2020-12-27 19:08:19 -07:00
Matthew Flatt
8f05958ba2 Revert "makefile: add fake-installers target"
This reverts commit 2110b3c753.

Adding a `#:fake-installer?` site-confoguration option is better.
2020-12-27 19:06:20 -07:00
Matthew Flatt
2110b3c753 makefile: add fake-installers target
The `fake-installers[-from-built]` target drives a distribution build
like `installers[-from-built]`, but instead of building on clients,
just copies a "README" as an installer.
2020-12-27 15:46:08 -07:00
Matthew Flatt
250f5ca661 makefile: clone single pb branch 2020-12-27 09:21:55 -07:00
Matthew Flatt
8869f0eb9e Chez Scheme: remove a debugging leftover
A do-nothing loop, which was probably a debugging check at some point,
wasn't correct and could break vfasl loading.
2020-12-26 10:14:57 -07:00
Matthew Flatt
4d7f52e7dd expose WTF-8 converters on all platforms 2020-12-25 08:00:32 -07:00
Matthew Flatt
dd1061f069 cs & io: fix conversion from UTF-8-ish
The UTF-8-ish decoder incorrectly allowed a surrogate pair encoded as
two unpaired surrogates, and it treated an unpaired surrogate at the
of a stream as complete instead of a potential error.

Related to #3578
2020-12-24 15:43:59 -07:00
shhyou
6e58310176 Use foreign function from MSVCRT on Windows 2020-12-24 10:14:41 -07:00
shhyou
f6b7f93895 Fix JSON test 2020-12-23 13:25:35 -06:00
Bogdan Popa
f4cd7ab8a0 pkg: improve CI template for new packages
Related to #1500.

This improves the following aspects of the CI config:

* The config now tracks the current stable version of Racket so
package authors don't have to remember to upgrade the config on new
releases.  This is a double-edged sword, because it makes it easy to
use features of new Racket version and potentially break
backwards-compatibility by accident.  Running CI against a set of
static Racket versions doesn't have this problem since any such change
would end up failing.  Maybe a better change here would be to
interpolate the current `(version)` into the CI file instead.

* The job is now set to fail on the first error it encounters on the
assumption that most packages fail due to internal issues and not due
to mismatches between Racket versions.  The intent with this change is
to use fewer resources overall when possible.  Additionally, the
packages' dependencies are now validated during the setup step.

* Lastly, the install step now avoids building documentation for
dependencies, which can shave off significant amounts of time.
2020-12-23 10:25:24 -05:00
Stephen De Gabrielle
1ad448e19e added links with #:url 2020-12-23 08:21:45 -07:00
David Van Horn
c93837c2ce Fix rationalize with +nan.0 tolerance
Calling `rationalize` with `+nan.0` as the second argument was causing
a "no exact representation error."  This commit changes it to produce
`+nan.0`.

There was an unexercised set of tests for `rationalize` in the test
suite which, once called, demonstrate the bug.

Those tests also specify that `rationalize` should produce an exact
result when the first argument is exact and the second is an infinity.
That's not what the implementation does; it coerces the result to
inexact.  I changed the test cases to match the implementation, which
is consistent with other Schemes (Chez, MIT) and standards (R6RS).
2020-12-23 08:20:31 -07:00
Stefan Schwarzer
4fa48182c0 docs: fix upper ASCII limit for control characters
Character 32 is space, which isn't a control character.
2020-12-23 08:02:23 -07:00
Sam Tobin-Hochstadt
6369646116 Order keys when writing JSON output.
More significant on Racket CS because ordering is often different
than creation order.

Closes #3537.
2020-12-23 10:01:08 -05:00
Matthew Flatt
3577cb0e4d ffi/vector: more complete tests 2020-12-23 07:58:34 -07:00
David Van Horn
72a852ca43 cs: fix {u,s}16vector-{ref,set!} when memory is not bytes?
When a {u,s}16vector points to memory that's not bytes (e.g. from ffi)
then referencing or setting the memory results in a Chez error:

```
foreign-set!: unrecognized type 'int16
```

The fix is to change the type argument to `'integer-16` and
`'unsigned-16`.
2020-12-23 07:49:23 -07:00