Commit graph

12294 commits

Author SHA1 Message Date
kennytm
399314d802
Rollup merge of #55169 - raphlinus:copysign, r=joshtriplett
Add a `copysign` function to f32 and f64

This patch adds a `copysign` function to the float primitive types. It is an exceptionally useful function for writing efficient numeric code, as it often avoids branches, is auto-vectorizable, and there are efficient intrinsics for most platforms.

I think this might work as-is, as the relevant `copysign` intrinsic is already used internally for the implementation of `signum`. It's possible that an implementation might be needed in japaric/libm for portability across all platforms, in which case I'll do that also.

Part of the work towards #55107
2018-10-19 16:47:51 +08:00
Raph Levien
f08db6bf1e Add must_use on copysign
Added a #[must_use] annotation on copysign, per review feedback.
2018-10-18 08:35:09 -07:00
kennytm
e4ac447851
Rollup merge of #54646 - vn971:fix_std_thread_sleep, r=frewsxcv
improve documentation on std:🧵:sleep
2018-10-18 12:54:42 +08:00
Raph Levien
9a2e7026dc Fix inconsistent documentation
I improved the f32 version and made a copy-paste error for f64.
2018-10-17 21:09:55 -07:00
Raph Levien
0e6c3f29be Add a copysign function to f32 and f64
This patch adds a `copysign` function to the float primitive types.
It is an exceptionally useful function for writing efficient numeric
code, as it often avoids branches, is auto-vectorizable, and there
are efficient intrinsics for most platforms.

I think this might work as-is, as the relevant `copysign` intrinsic
is already used internally for the implementation of `signum`. It's
possible that an implementation might be needed in japaric/libm for
portability across all platforms, in which case I'll do that also.

Part of the work towards #55107
2018-10-17 18:15:00 -07:00
Diana
1b355a8976
Fix incorrect link in println! documentation
The eprintln! link was incorrectly linking to eprint! instead
2018-10-14 08:14:21 -04:00
bors
f51752774b Auto merge of #54951 - alexcrichton:more-wasm-threads, r=sfackler
std: Implement TLS for wasm32-unknown-unknown

This adds an implementation of thread local storage for the
`wasm32-unknown-unknown` target when the `atomics` feature is
implemented. This, however, comes with a notable caveat of that it
requires a new feature of the standard library, `wasm-bindgen-threads`,
to be enabled.

Thread local storage for wasm (when `atomics` are enabled and there's
actually more than one thread) is powered by the assumption that an
external entity can fill in some information for us. It's not currently
clear who will fill in this information nor whose responsibility it
should be long-term. In the meantime there's a strategy being gamed out
in the `wasm-bindgen` project specifically, and the hope is that we can
continue to test and iterate on the standard library without committing
to a particular strategy yet.

As to the details of `wasm-bindgen`'s strategy, LLVM doesn't currently
have the ability to emit custom `global` values (thread locals in a
`WebAssembly.Module`) so we leverage the `wasm-bindgen` CLI tool to do
it for us. To that end we have a few intrinsics, assuming two global values:

* `__wbindgen_current_id` - gets the current thread id as a 32-bit
  integer. It's `wasm-bindgen`'s responsibility to initialize this
  per-thread and then inform libstd of the id. Currently `wasm-bindgen`
  performs this initialization as part of the `start` function.
* `__wbindgen_tcb_{get,set}` - in addition to a thread id it's assumed
  that there's a global available for simply storing a pointer's worth
  of information (a thread control block, which currently only contains
  thread local storage). This would ideally be a native `global`
  injected by LLVM, but we don't have a great way to support that right
  now.

To reiterate, this is all intended to be unstable and purely intended
for testing out Rust on the web with threads. The story is very likely
to change in the future and we want to make sure that we're able to do
that!
2018-10-13 14:28:48 +00:00
kennytm
8e3f189180
Rollup merge of #54956 - kzys:close-paren, r=varkor
"(using ..." doesn't have the matching ")"

Fixes #54948.
2018-10-12 22:04:14 +08:00
kennytm
80ee322a20
Rollup merge of #54913 - RalfJung:unwind-safe, r=alexcrichton
doc fix: it's auto traits that make for automatic implementations

Being a marker trait is not good enough (that just means "no items in the trait").

r? @alexcrichton who [originally wrote these docs](0a13f1abaf).
2018-10-12 22:04:08 +08:00
kennytm
ef7f77d53d
Rollup merge of #54891 - rust-lang:SimonSapin-patch-1, r=nagisa
Fix tracking issue for Once::is_completed

https://github.com/rust-lang/rust/pull/53027 was merged without a tracking issue. I just filed https://github.com/rust-lang/rust/issues/54890. CC @matklad
2018-10-12 22:04:07 +08:00
kennytm
8455468d0d
Rollup merge of #54755 - lucasloisp:document-reference-address-eq, r=QuietMisdreavus
Documents reference equality by address (#54197)

Clarification of the use of `ptr::eq` to test equality of references via address by pointer coercion,  regarding issue #54197 .

The same example as in `ptr::eq` docs is shown here to clarify that
`PartialEq` compares values pointed-to instead of via address (which can be desired in some cases)
2018-10-12 22:04:00 +08:00
Vasya Novikov
7a0fa95336
improve docs on thread::sleep 2018-10-11 21:37:30 +03:00
Alex Crichton
cbe9f33b8b std: Implement TLS for wasm32-unknown-unknown
This adds an implementation of thread local storage for the
`wasm32-unknown-unknown` target when the `atomics` feature is
implemented. This, however, comes with a notable caveat of that it
requires a new feature of the standard library, `wasm-bindgen-threads`,
to be enabled.

Thread local storage for wasm (when `atomics` are enabled and there's
actually more than one thread) is powered by the assumption that an
external entity can fill in some information for us. It's not currently
clear who will fill in this information nor whose responsibility it
should be long-term. In the meantime there's a strategy being gamed out
in the `wasm-bindgen` project specifically, and the hope is that we can
continue to test and iterate on the standard library without committing
to a particular strategy yet.

As to the details of `wasm-bindgen`'s strategy, LLVM doesn't currently
have the ability to emit custom `global` values (thread locals in a
`WebAssembly.Module`) so we leverage the `wasm-bindgen` CLI tool to do
it for us. To that end we have a few intrinsics, assuming two global values:

* `__wbindgen_current_id` - gets the current thread id as a 32-bit
  integer. It's `wasm-bindgen`'s responsibility to initialize this
  per-thread and then inform libstd of the id. Currently `wasm-bindgen`
  performs this initialization as part of the `start` function.
* `__wbindgen_tcb_{get,set}` - in addition to a thread id it's assumed
  that there's a global available for simply storing a pointer's worth
  of information (a thread control block, which currently only contains
  thread local storage). This would ideally be a native `global`
  injected by LLVM, but we don't have a great way to support that right
  now.

To reiterate, this is all intended to be unstable and purely intended
for testing out Rust on the web with threads. The story is very likely
to change in the future and we want to make sure that we're able to do
that!
2018-10-11 09:57:55 -07:00
Kazuyoshi Kato
da17e07c14 "(using ..." doesn't have the matching ")"
Fixes #54948.
2018-10-10 01:09:18 -07:00
Ralf Jung
54a3583da7 it's auto traits that make for automatic implementations 2018-10-08 17:44:33 +02:00
bors
423d810986 Auto merge of #54871 - u32i64:master, r=frewsxcv
Remove unnecessary comma in `libstd/thread/mod.rs` doc comment

Fix typo in `libstd/thread/mod.rs` doc comment: remove unnecessary comma.
2018-10-08 12:17:36 +00:00
bors
b9adc3327e Auto merge of #53517 - phungleson:fix-impl-from-for-error, r=frewsxcv
Add doc for impl From for Error

As part of issue #51430 (cc @skade).

The impl is very simple, let me know if we need to go into any details.
2018-10-07 22:00:04 +00:00
bors
0ee045ea09 Auto merge of #54835 - oli-obk:mögen_konstante_funktionen_doch_bitte_endlich_stabil_sein, r=Centril
Stabilize `min_const_fn`

tracking issue: #53555

r? @Centril
2018-10-07 13:37:07 +00:00
Simon Sapin
9a9894a8f1
Fix tracking issue for Once::is_completed 2018-10-07 12:00:41 +02:00
bors
13429136b8 Auto merge of #54451 - alexcrichton:no-mangle-extern-linkage, r=michaelwoerister
rustc: Allow `#[no_mangle]` anywhere in a crate

This commit updates the compiler to allow the `#[no_mangle]` (and
`#[export_name]` attributes) to be located anywhere within a crate.
These attributes are unconditionally processed, causing the compiler to
always generate an exported symbol with the appropriate name.

After some discussion on #54135 it was found that not a great reason
this hasn't been allowed already, and it seems to match the behavior
that many expect! Previously the compiler would only export a
`#[no_mangle]` symbol if it were *publicly reachable*, meaning that it
itself is `pub` and it's otherwise publicly reachable from the root of
the crate. This new definition is that `#[no_mangle]` *is always
reachable*, no matter where it is in a crate or whether it has `pub` or
not.

This should make it much easier to declare an exported symbol with a
known and unique name, even when it's an internal implementation detail
of the crate itself. Note that these symbols will persist beyond LTO as
well, always making their way to the linker.

Along the way this commit removes the `private_no_mangle_functions` lint
(also for statics) as there's no longer any need to lint these
situations. Furthermore a good number of tests were updated now that
symbol visibility has been changed.

Closes #54135
2018-10-07 03:07:16 +00:00
Alex Crichton
d7d7045374 rustc: Allow #[no_mangle] anywhere in a crate
This commit updates the compiler to allow the `#[no_mangle]` (and
`#[export_name]` attributes) to be located anywhere within a crate.
These attributes are unconditionally processed, causing the compiler to
always generate an exported symbol with the appropriate name.

After some discussion on #54135 it was found that not a great reason
this hasn't been allowed already, and it seems to match the behavior
that many expect! Previously the compiler would only export a
`#[no_mangle]` symbol if it were *publicly reachable*, meaning that it
itself is `pub` and it's otherwise publicly reachable from the root of
the crate. This new definition is that `#[no_mangle]` *is always
reachable*, no matter where it is in a crate or whether it has `pub` or
not.

This should make it much easier to declare an exported symbol with a
known and unique name, even when it's an internal implementation detail
of the crate itself. Note that these symbols will persist beyond LTO as
well, always making their way to the linker.

Along the way this commit removes the `private_no_mangle_functions` lint
(also for statics) as there's no longer any need to lint these
situations. Furthermore a good number of tests were updated now that
symbol visibility has been changed.

Closes #54135
2018-10-06 13:57:30 -07:00
Artem Varaksa
ddcec08a54 Fix typo in libstd/thread/mod.rs: remove unnecessary comma 2018-10-06 20:09:54 +03:00
Corey Farwell
4f3896d8ef
'a' → 'an' in front of vowel sounds. 2018-10-06 11:21:53 -04:00
Pietro Albini
6b24de1edd
Rollup merge of #54078 - GabrielMajeri:expand-sync-docs, r=steveklabnik
Expand the documentation for the `std::sync` module

I've tried to expand the documentation for Rust's synchronization primitives. The module level documentation explains why synchronization is required when working with a multiprocessor system,
and then links to the appropiate structure in this module.

Fixes #29377, since this should be the last item on the checklist (documentation for `Atomic*` was fixed in #44854, but not ticked off the checklist).
2018-10-05 22:33:10 +02:00
Oliver Schneider
ec74d3533a Stabilize min_const_fn 2018-10-05 10:36:14 +02:00
Gabriel Majeri
6ba5584712 Address review comments 2018-10-05 08:50:17 +03:00
bors
b8bea5a0a6 Auto merge of #54017 - alexcrichton:wasm-atomics2, r=sfackler
std: Start implementing wasm32 atomics

This commit is an initial start at implementing the standard library for
wasm32-unknown-unknown with the experimental `atomics` feature enabled. None of
these changes will be visible to users of the wasm32-unknown-unknown target
because they all require recompiling the standard library. The hope with this is
that we can get this support into the standard library and start iterating on it
in-tree to enable experimentation.

Currently there's a few components in this PR:

* Atomic fences are disabled on wasm as there's no corresponding atomic op and
  it's not clear yet what the convention should be, but this will change in the
  future!
* Implementations of `Mutex`, `Condvar`, and `RwLock` were all added based on
  the atomic intrinsics that wasm has.
* The `ReentrantMutex` and thread-local-storage implementations panic currently
  as there's no great way to get a handle on the current thread's "id" yet.

Right now the wasm32 target with atomics is unfortunately pretty unusable,
requiring a lot of manual things here and there to actually get it operational.
This will likely continue to evolve as the story for atomics and wasm unfolds,
but we also need more LLVM support for some operations like custom `global`
directives for this to work best.
2018-10-05 01:57:01 +00:00
Pietro Albini
1dbc8b0d4b
Rollup merge of #53523 - phungleson:fix-impl-from-for-std-error, r=GuillaumeGomez
Add doc for impl From for Std Error

As part of issue #51430 (cc @skade).

I am not sure if it is going to a correct direction so put up here so that people can comment.
2018-10-04 12:20:05 +02:00
Son
b3750aa34e Remove main() from examples 2018-10-03 08:25:31 +10:00
Son
30f2e96ab1 Remove main() in examples 2018-10-03 08:21:51 +10:00
Lucas Lois
68236e088d Cleans trailing whitespace 2018-10-02 13:59:33 -03:00
Lucas Lois
74bf59ea03 Documents reference equality by address (#54197)
Clarification of the use of `ptr::eq` to test equality of references
via address by pointer coercion
2018-10-02 13:31:40 -03:00
Austin Bonander
e0caaec6f9 make CStr::from_bytes_with_nul_unchecked() a const fn
closes #54678
2018-10-02 04:26:16 -07:00
Austin Bonander
092bf2b500 make CStr::from_bytes_with_nul_unchecked() a const fn
closes #54678
2018-10-02 04:25:40 -07:00
Vasya Novikov
b63517a2c3 update wording for thread::sleep 2018-10-01 11:01:15 +03:00
bors
03379648df Auto merge of #54662 - matklad:once-perf, r=alexcrichton
Fix Once perf regression

Because `call_once` is generic, but `is_completed` is not, we need
`#[inline]` annotation to allow LLVM to inline `is_completed` into
`call_once` in downstream crates.

cc https://github.com/rust-lang/rust/pull/53027/files#r221418859
2018-10-01 00:51:19 +00:00
bors
6310be458f Auto merge of #54601 - cuviper:prep-1.31, r=Mark-Simulacrum
Bump to 1.31.0 and bootstrap from 1.30 beta

Closes #54594.
2018-09-30 01:45:50 +00:00
kennytm
c1b2dc223c
Rollup merge of #54635 - neoeinstein:seek-docs, r=alexcrichton
Improve docs for std::io::Seek

Fixes #54562
2018-09-29 16:43:41 +08:00
Aleksey Kladov
f8e9d2f0ec Fix Once perf regression
Because `call_once` is generic, but `is_completed` is not, we need
`#[inline]` annotation to allow LLVM to inline `is_completed` into
`call_once` in downstream crates.
2018-09-29 11:07:48 +03:00
Vasya Novikov
049ccbb174 update wording for std:🧵:sleep 2018-09-28 22:40:20 +03:00
Vasya Novikov
1a605a6bda fix std:🧵:sleep typo 2018-09-28 19:36:53 +03:00
Marcus Griep
5285d35b49
Improve docs for std::io::Seek
Fixes #54562
2018-09-28 08:01:56 -04:00
Gabriel Majeri
7e921aa590 Rewrite section on concurrency 2018-09-28 12:03:40 +03:00
Gabriel Majeri
bcec6bb525 Fix broken links 2018-09-28 12:03:33 +03:00
Josh Stone
ce034951fb Bump to 1.31.0 and bootstrap from 1.30 beta 2018-09-27 20:52:53 -07:00
Gabriel Majeri
f3fdbbfae8 Address review comments
Reword the lead paragraph and turn the list items into
complete sentences.
2018-09-27 20:25:04 +03:00
Gabriel Majeri
e0df0ae734 Make example code use global variables
Because `fn main()` was added automatically, the variables
were actually local statics.
2018-09-27 20:13:33 +03:00
Gabriel Majeri
f5e991bee0 Expand the documentation for the std::sync module
Provides an overview on why synchronization is required,
as well a short summary of what sync primitives are available.
2018-09-27 20:13:32 +03:00
Son
70f4269d97 Doc for From ErrorKind 2018-09-27 05:34:12 +10:00
Alex Crichton
243030b140 std: Don't let rust_panic get inlined
It's meant for breakpoints, so if it gets inlined we can't set a
breakpoint on it easily!
2018-09-26 07:48:43 -07:00