-
-
Notifications
You must be signed in to change notification settings - Fork 14.5k
debug-fmt-detail option #123940
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
debug-fmt-detail option #123940
Conversation
|
Some changes occurred in cfg and check-cfg configuration cc @Urgau |
This comment has been minimized.
This comment has been minimized.
|
I'd love to see this happen. I have a suggestion for a refinement: In the This constant string should be |
7437d70 to
aabf2f6
Compare
This comment has been minimized.
This comment has been minimized.
aabf2f6 to
1721c63
Compare
|
Some changes occurred in tests/ui/check-cfg cc @Urgau |
This comment has been minimized.
This comment has been minimized.
|
@kpreid But There is |
1721c63 to
bceb534
Compare
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
This comment has been minimized.
bf36e51 to
3905795
Compare
|
Some changes occurred in src/doc/rustc/src/check-cfg.md cc @Urgau |
This comment has been minimized.
This comment has been minimized.
3905795 to
92cac91
Compare
This comment has been minimized.
This comment has been minimized.
|
This should be ready for review. |
|
Thank you all for helping to merge this. |
|
I'm really happy to see progress on binary size in Rust. Many of our clients in ICU4X care about this subject, and anything we can do here increases our value proposition. I would like to see more documentation about how this is intended to work with custom Debug impls. There are a number of reasons why we can't always use Details
Would something like Additional question: would it be possible for |
This does currently work, it should be documented.
An important feature of Worth sketching out what you're looking for exactly. Currently, the behavior of
In your proposal, what would you have Trying to get the behavior of |
|
Really, for the custom |
|
Since Yeah, Thought: a format syntax character could prevent the debug impl from being removed by the fmt-debug config. Something like I think a well-balanced setting would be:
I don't think the current proposal has an option for this. |
...kiiiind of,
Can you expand on what you mean here? A real format string would probably have more than just I think "use the type name instead of blank" is probably a viable way to improve
n.b. use of a DebugAsDisplay wrapper object would solve that problem. Footnotes
|
I'd like to propose a new option that makes
#[derive(Debug)]generate no-op implementations that don't print anything, and makes{:?}in format strings a no-op.There are a couple of motivations for this:
Debugimplementations. It's hard to avoid that without compiler's help, because debug formatting can be used in many places, including dependencies, and their loggers, asserts, panics, etc.panic_immediate_abort). There are targets like Web WASM or embedded where users pay attention to binary sizes.Debugformat implementation in unwise ways (e.g. trying to get data unavailable via public interface, or using it as a serialization format). Because current Rust's debug implementation doesn't change, there's a risk of it becoming a fragile de-facto API that won't be possible to change in the future. An option that "breaks" it can act as a grease.This implementation is a
-Z fmt-debug=optflag that takes:full— the default, current state.none— makes derivedDebugand{:?}no-ops. Explicitimpl Debug for Timplementations are left unharmed, but{:?}format won't use them, so they may get dead-code eliminated if they aren't invoked directly.shallow— makes derivedDebugprint only the type's name, without recursing into fields. Fieldless enums print their variant names.{:?}works.The
shallowoption is a compromise between minimizing theDebugcode, and compatibility. There are popular proc-macro crates that useDebug::fmtas a way to convert enum values into their Rust source code.There's a corresponding
cfgflag:#[cfg(fmt_debug = "none")]that can be used in user code to react to this setting to minimize customDebugimplementations or remove unnecessary formatting helper functions.