On Thursday, 1 April 2021 at 16:52:17 UTC, Nestor wrote:
I am a python programmer and I am enjoying Dlang and learning some programming insights on the way, thank everyone.

I have no formal education and also program JS and PHP.

Watching a video where a guy programs some simple code in Python and the same code in Go and compares speed I thought that could be some nice exercise for my learning path and successfully ported code to Dlang (hope so)

I was hoping to beat my dear Python and get similar results to Go, but that is not the case neither using rdmd nor running the executable generated by dmd. I am getting values between 350-380 ms, and 81ms in Python.

1- I am doing something wrong in my code?
2- Do I have wrong expectations about Dlang?

Thanks in advance.

This is the video: https://www.youtube.com/watch?v=1Sban1F45jQ
This is my D code:
```
import std.stdio;
import std.random;
import std.datetime.stopwatch : benchmark, StopWatch, AutoStart;
import std.algorithm;

void main()
{
    auto sw = StopWatch(AutoStart.no);
    sw.start();
    int[] mylist;
    for (int number = 0; number < 100000; ++number)
    {
        auto rnd = Random(unpredictableSeed);
        auto n = uniform(0, 100, rnd);
        mylist ~= n;
    }
    mylist.sort();
    sw.stop();
    long msecs = sw.peek.total!"msecs";
    writefln("%s", msecs);
}
```

```
import time
import random

start = time.time()
mylist = []
for _ in range(100000):
    mylist.append(random.randint(0,100))
mylist.sort()
end = time.time()
print(f"{(end-start)*1000}ms")
```

Now when I actually read what you wrote I tested moving auto rnd = Random(unpredictableSeed) outside the loop and got 481 ms for the first version vs 34 ms for the other.

---
    auto sw = StopWatch(AutoStart.no);
    sw.start();
    int[] mylist;

    auto rnd = Random(unpredictableSeed);

    for (int number = 0; number < 100000; ++number)
    {
        auto n = uniform(0, 100, rnd);
        mylist ~= n;
    }

    mylist.sort();
    sw.stop();

    long msecs = sw.peek.total!"msecs";
    writefln("%s", msecs);
---

Also, one thing you could do is to parallelize for even faster performance. I can show you how to do that later if you want to.

Reply via email to