rust/library
Matthias Krüger 6ab180577f
Rollup merge of #129581 - RalfJung:exit, r=joshtriplett
exit: explain our expectations for the exit handlers registered in a Rust program

This documents the position of ``@Amanieu`` and others in https://github.com/rust-lang/rust/issues/126600: a library with an atexit handler that destroys state that other threads could still be working on is buggy. We do not consider it acceptable for a library to say "you must call the following cleanup function before exiting from `main` or calling `exit`". I don't know if this is established ``@rust-lang/libs-api``  consensus so I presume this will have to go through FCP.

Given that Rust supports concurrency, I don't think there is any way to write a sound Rust wrapper around a library that has such a required cleanup function: even if we made `exit` unsafe, and the Rust wrapper used the scope-with-callback approach to ensure it can run cleanup code before returning from the wrapper (like `thread::scope`), one could still call this wrapper in a second thread and then return from `main` while the wrapper runs. Making this sound would require `std` to provide a way to "block" returning from `main`, so that while the wrapper runs returning from `main` waits until the wrapper is done... that just doesn't seem feasible.

The `exit` docs do not seem like the best place to document this, but I also couldn't think of a better one.
2024-08-27 18:59:27 +02:00
..
alloc Rollup merge of #129544 - mu001999-contrib:dead-code/clean, r=compiler-errors 2024-08-26 01:49:03 +02:00
backtrace@72265bea21 Update backtrace to 0.3.73 2024-06-06 22:50:45 -07:00
core Rollup merge of #129559 - RalfJung:float-nan-semantics, r=thomcc 2024-08-27 01:46:53 -05:00
panic_abort step cfg(bootstrap) 2024-07-28 14:46:29 -04:00
panic_unwind Auto merge of #128083 - Mark-Simulacrum:bump-bootstrap, r=albertlarsan68 2024-07-30 17:49:08 +00:00
portable-simd Fix doc nits 2024-07-26 13:26:33 +01:00
proc_macro Rollup merge of #128307 - ojeda:unescaped_backticks, r=GuillaumeGomez 2024-07-29 11:42:35 +02:00
profiler_builtins Build library/profiler_builtins from ci-llvm if appropriate 2024-08-24 21:21:34 +10:00
rtstartup Let InstCombine remove Clone shims inside Clone shims 2024-07-25 15:14:42 -04:00
rustc-std-workspace-alloc Replace libstd, libcore, liballoc in line comments. 2022-12-30 14:00:42 +01:00
rustc-std-workspace-core Switch all libraries to the 2021 edition 2021-12-23 19:03:47 +08:00
rustc-std-workspace-std Switch all libraries to the 2021 edition 2021-12-23 19:03:47 +08:00
std Rollup merge of #129581 - RalfJung:exit, r=joshtriplett 2024-08-27 18:59:27 +02:00
stdarch@d9466edb4c Update stdarch submodule 2024-08-21 00:20:27 -07:00
sysroot Auto merge of #125016 - nicholasbishop:bishop-cb-112, r=tgross35 2024-07-29 07:41:33 +00:00
test Reduce merged doctest source code size 2024-08-13 20:14:56 +02:00
unwind Auto merge of #128083 - Mark-Simulacrum:bump-bootstrap, r=albertlarsan68 2024-07-30 17:49:08 +00:00
windows_targets Add windows-targets crate to std's sysroot 2024-08-09 10:43:43 +00:00
Cargo.lock Update compiler_builtins to 0.1.121 2024-08-23 12:02:26 -07:00
Cargo.toml Exclude windows-targets from the workspace 2024-08-09 11:06:39 +00:00