[profile.release]opt-level = 'z'# Optimize for size
It doesn’t matter here, let’s get that out of the way.
But I’m wondering if someone/someplace is
wrongly recommending this!
Because lately I’ve been seeing this getting set in projects where their binaries wouldn’t be typically running on environments where this is required or even helpful.
My concern is that some developers are setting this without really understanding
what -Oz actually does.
Release profile defaults to -O3. -Oz compromises runtime performance for binary size.
When you start seeing for example network services which are not going to be running in constrained environments, nor do they restrict themselves from using heap allocations and all, when you see them set -Oz in their release profiles. Then you start to see small beginner projects setting it like OP here. You start to wonder if it’s a pattern, and the settings are being copied from somewhere else, with potential misconceptions like thinking it can meaningfully reduce runtime memory usage or something.
I actually think I found the culprit, thanks to one of the projects I was hinting at mentioning it:
Looks like we have a second wave of net-negative common wisdom in the ecosystem, the first being optimizing for dependencies’ compile times. But this one is not nearly as bad, as it doesn’t affect libraries.
Welcome.
[profile.release] opt-level = 'z' # Optimize for size
It doesn’t matter here, let’s get that out of the way.
But I’m wondering if someone/someplace is wrongly recommending this!
Because lately I’ve been seeing this getting set in projects where their binaries wouldn’t be typically running on environments where this is required or even helpful.
My concern is that some developers are setting this without really understanding what
-Oz
actually does.This comment would be much better if it featured an explanation of your concerns with that particular opt setting.
There is no deep explanation or anything.
Release profile defaults to
-O3
.-Oz
compromises runtime performance for binary size.When you start seeing for example network services which are not going to be running in constrained environments, nor do they restrict themselves from using heap allocations and all, when you see them set
-Oz
in their release profiles. Then you start to see small beginner projects setting it like OP here. You start to wonder if it’s a pattern, and the settings are being copied from somewhere else, with potential misconceptions like thinking it can meaningfully reduce runtime memory usage or something.I actually think I found the culprit, thanks to one of the projects I was hinting at mentioning it:
https://github.com/johnthagen/min-sized-rust
Looks like we have a second wave of net-negative common wisdom in the ecosystem, the first being optimizing for dependencies’ compile times. But this one is not nearly as bad, as it doesn’t affect libraries.