www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 24299] New: The dmd's command line option "-run" should

https://issues.dlang.org/show_bug.cgi?id=24299

          Issue ID: 24299
           Summary: The dmd's command line option "-run" should prefer
                    dynamic linking with the Phobos library by default
           Product: D
           Version: D2
          Hardware: All
                OS: All
            Status: NEW
          Severity: enhancement
          Priority: P1
         Component: dmd
          Assignee: nobody puremagic.com
          Reporter: siarhei.siamashka hotmail.com

Consider the following small program:

```D
import std.stdio;
void main() {
    writeln("Hello world!");
}
```

$ which dmd
/opt/dmd2-106.0/linux/bin64/dmd

$ time dmd -run helloworld.d
Hello world!

real    0m0.414s

$ time dmd -defaultlib=libphobos2.a -run helloworld.d
Hello world!

real    0m0.414s

$ time dmd -defaultlib=libphobos2.so -L-rpath=/opt/dmd2-106.0/linux/lib64 -run
helloworld.d
Hello world!

real    0m0.188s


Linking libphobos2.a is more than twice slower than linking libphobos2.so (~414
ms vs. ~188 ms difference on my computer). While theoretically the users can
use any fancy command line options, in reality many of them just don't bother.
So the performance of just invoking `dmd -run helloworld.d` is bad out of the
box. But the compiled binary is immediately discarded after use and there are
no downsides to using dynamic linking in this scenario. So linking
libphobos2.so would be a more reasonable default configuration specifically for
the `-run` option.

I suggest to introduce additional sections "[RunEnvironment32]" and
"[RunEnvironment64]" in the "dmd.conf" file for the options specifically
tailored for the "-run" option. And then binary releases of the DMD compiler
could use these sections to provide fast `dmd -run` functionality out of the
box.

--
Dec 23 2023