www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 19617] New: [2.085a] Much slower code compared to 2.084

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

          Issue ID: 19617
           Summary: [2.085a] Much slower code compared to 2.084
           Product: D
           Version: D2
          Hardware: x86_64
                OS: Linux
            Status: NEW
          Severity: regression
          Priority: P1
         Component: dmd
          Assignee: nobody puremagic.com
          Reporter: b2.temp gmx.com

I wanted to test something and took this code from the dlang tour:

---
// Hey come on, just get the whole army!
import std.algorithm : canFind, map,
  filter, sort, uniq, joiner, chunkBy, splitter;
import std.array : array, empty;
import std.range : zip;
import std.stdio : writeln;
import std.string : format;
import std.datetime.stopwatch;

void main()
{
    StopWatch sw;
    sw.start;
    string text = q{This tour will give you an
overview of this powerful and expressive systems
programming language which compiles directly
to efficient, *native* machine code.};

    alias pred = c => canFind(" ,.\n", c);
    auto words = text.splitter!pred
      .filter!(a => !a.empty);
    auto wordCharCounts = words
      .map!"a.count";

    zip(wordCharCounts, words)
      .array()
      .sort()
      .uniq()
      .chunkBy!(a => a[0])
      .map!(chunk => format("%d -> %s",
          chunk[0],
          chunk[1]
            .map!(a => a[1])
            .joiner(", ")))
      .joiner("\n")
      .writeln();
      writeln(sw.peek);
}
---

- dmd args : -O -release -inline -boundscheck=off
- exe generated with DMD 2.084 takes on average 110 µs
- the one with DMD ~master (aa0c2062499419cc933f9bbf94cf88ec3244e2f9) takes on
average 145 µs.

Note that the same difference is observed without any DMD arg at all.

--
Jan 26