We should deprecate -release

Mike Shah mshah.475 at gmail.com
Wed Jul 17 19:12:17 UTC 2024


On Wednesday, 17 July 2024 at 18:29:03 UTC, Lance Bachmeier wrote:
> On Wednesday, 17 July 2024 at 16:53:36 UTC, Richard (Rikki) 
> Andrew Cattermole wrote:
>
>> Dmd simply does not have the optimizations to get anywhere 
>> close to a modern backend. It _cannot_ come close to winning 
>> benchmarks.
>
> This is the only point that matters in this discussion. DMD has 
> a confusing switch that enables someone that doesn't use D to 
> run a 90% suboptimal benchmark instead of a 100% suboptimal 
> benchmark.
>
> DMD compiles quickly and it usually produces code that runs 
> fast enough. It should never be used for benchmarking. If 
> -release is how you detect someone doing benchmarking, it 
> should fail to compile when using that flag.

 From what I see on: https://dlang.org/dmd-linux.html
"-O
Optimize generated code. For fastest executables, compile with 
the -O -release -inline -boundscheck=off switches together."

Indeed, that is probably good enough documentation that I 
understand what to do to generate something fast when the time 
comes. If there are more flags to tick on or off, we should 
probably add them. That said, I think it's worth thinking about 
these flags.

For example -- When I teach about 'build types/software life 
cycle' in my software engineering course, I often talk about 
'debug' vs 'release' builds using those exact terms and with the 
understanding that debug build is 'slow with debugging symbols' 
and a release build is 'fast with no developer debugging checks 
(i.e. no asserts) on' that you give to the public.

I think the tricky thing is perhaps I have to unlearn from my 'C 
and C++ brain' some of the flags.

In my C and C++ brain: "-release" means "gcc -O2 -g0 ..."
In my C and C++ brain: "-debug" means "gcc -Wall -g3 ..."

In my D brain I really need to think about:

In D Debug Build means: "dmd -debug -g" or "dmd -g"
In D Release Candidate to the public: "dmd -O -release -inline 
-boundscheck=0ff ..."

Note: It seems dub documentation has a table otherwise explaining 
the different builds: https://dub.pm/dub-reference/build_settings/


Anyway -- while writing this post, one suggestion is to add a new 
section of documentation on the Command-line Reference titled 
"Common Build Flag Use Cases" which lists what flags are 
recommended for getting the most out of a debug or release build, 
or a build for benchmarking purposes.

I searched 'benchmark' on the wiki and did not immediately find 
this information: 
https://wiki.dlang.org/The_D_Programming_Language

Note: At some time I'll make a YouTube video talking about flags 
and builds, I just want to hold off if this thread comes to any 
conclusion :)










More information about the Digitalmars-d mailing list