From 282c95ebb3a80b84c18cf165f2a6a52b4163b7e0 Mon Sep 17 00:00:00 2001 From: David Zaragoza Rodriguez Date: Sat, 27 Jan 2018 15:55:24 +0100 Subject: [PATCH] Port of the Python version to D --- README.md | 2 +- primes.d | 45 +++++++++++++++++++++++++++++++++++++++++++++ run.sh | 5 +++++ 3 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 primes.d diff --git a/README.md b/README.md index 6c1a56e..454b20c 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # langs-performance -C++ vs. Python vs. Perl vs. PHP vs. Java vs. NodeJS vs. Go vs. Ruby vs. Rust vs. Swift performance benchmark +C++ vs. Python vs. Perl vs. PHP vs. Java vs. NodeJS vs. Go vs. Ruby vs. Rust vs. Swift vs. D performance benchmark Blog articles: * 2016: https://blog.famzah.net/2016/09/10/cpp-vs-python-vs-php-vs-java-vs-others-performance-benchmark-2016-q3/ diff --git a/primes.d b/primes.d new file mode 100644 index 0000000..5ba0320 --- /dev/null +++ b/primes.d @@ -0,0 +1,45 @@ +import std.algorithm; +import std.array; +import std.conv; +import std.datetime; +import std.math; +import std.process; +import std.range; +import std.stdio; + +int[] get_primes7(int n){ + if (n<2){ + return []; + } + if (n==2){ + return [2]; + } + auto s = array(iota(3,n+1,2)); + auto mroot = sqrt(cast(float)n); + auto half = s.length; + auto i = 0; + auto m = 3; + while (m <= mroot){ + if (s[i] != 0){ + int j = (m * m - 3) / 2; + s[j] = 0; + while (j< half){ + s[j] = 0; + j += m; + } + } + i++; + m = 2*i + 3; + } + return [2]~array(filter!(a => a!=0)(s)); +} + +void main(){ + auto start_time = Clock.currTime().toUnixTime(); + auto period_time = to!int(environment.get("RUN_TIME")); + + while(Clock.currTime().toUnixTime() - start_time < period_time){ + auto res = get_primes7(10_000_000); + writeln("Found ", res.length, " prime numbers."); + } +} \ No newline at end of file diff --git a/run.sh b/run.sh index e33b1f4..366fbc1 100755 --- a/run.sh +++ b/run.sh @@ -171,3 +171,8 @@ C='dotnet' ; SRC='primes.dotnet' ; run_benchmark 'C# .NET Core Linux' \ 'util/build' 'util/run' "$C --version" 'cat' "$SRC" rm -rf bin obj cd .. || exit 1 + +## +C='ldc2' ; SRC='primes.d' ; run_benchmark 'D' \ + "$C -O -of primes.d.out $SRC" './primes.d.out' "$C -version" 'head -n1' "$SRC" +rm -f ./primes.d.out \ No newline at end of file