Re: D 50% slower than C++. What I'm doing wrong?

2012-04-14 Thread Joseph Rushton Wakeling
On 15/04/12 05:41, jerro wrote: I have never seen anything like that. Usually the minimal time to run a D program is something like: j@debian:~$ time ./hello Hello world! real 0m0.001s user 0m0.000s sys 0m0.000s Yea, my experience too in general. I can't remember exactly what I was testing

Re: D 50% slower than C++. What I'm doing wrong?

2012-04-14 Thread jerro
On Sunday, 15 April 2012 at 03:41:55 UTC, jerro wrote: (I have a memory of a program that took ~0.004s with a C/C++ version and 1s with D, and the difference seemed to be just startup time for the D program.) I have never seen anything like that. Usually the minimal time to run a D program is

Re: D 50% slower than C++. What I'm doing wrong?

2012-04-14 Thread jerro
(I have a memory of a program that took ~0.004s with a C/C++ version and 1s with D, and the difference seemed to be just startup time for the D program.) I have never seen anything like that. Usually the minimal time to run a D program is something like: j@debian:~$ time ./hello Hello world!

Re: D 50% slower than C++. What I'm doing wrong?

2012-04-14 Thread Joseph Rushton Wakeling
On Saturday, 14 April 2012 at 19:51:21 UTC, Joseph Rushton Wakeling wrote: GDC has all the regular gcc optimization flags available IIRC. The ones on the GDC man page are just the ones specific to GDC. I'm not talking about compiler flags, but the "inline" keyword in the C++ source code. I saw s

Re: D 50% slower than C++. What I'm doing wrong?

2012-04-14 Thread Joseph Rushton Wakeling
On 15/04/12 04:37, jerro wrote: I know this isn't what your post was about, but you really should compile numerical code with GDC instead of DMD if you care about performance. It generates much faster floating point code. It's exactly what I do. :-)

Re: D 50% slower than C++. What I'm doing wrong?

2012-04-14 Thread jerro
On Sunday, 15 April 2012 at 02:20:34 UTC, Joseph Rushton Wakeling wrote: On 14/04/12 23:03, q66 wrote: He also uses a class. And -noboundscheck should be automatically induced by -release. Ahh, THAT probably explains why some of my numerical code is so markedly different in speed when compil

Re: D 50% slower than C++. What I'm doing wrong?

2012-04-14 Thread Jonathan M Davis
On Saturday, April 14, 2012 19:31:40 Jonathan M Davis wrote: > On Sunday, April 15, 2012 04:21:09 Joseph Rushton Wakeling wrote: > > On 14/04/12 23:03, q66 wrote: > > > He also uses a class. And -noboundscheck should be automatically induced > > > by > > > -release. > > > > ... but the methods are

Re: D 50% slower than C++. What I'm doing wrong?

2012-04-14 Thread Jonathan M Davis
On Sunday, April 15, 2012 04:21:09 Joseph Rushton Wakeling wrote: > On 14/04/12 23:03, q66 wrote: > > He also uses a class. And -noboundscheck should be automatically induced > > by > > -release. > > ... but the methods are marked as final -- shouldn't that substantially > reduce any speed hit fro

Re: D 50% slower than C++. What I'm doing wrong?

2012-04-14 Thread Joseph Rushton Wakeling
On 14/04/12 23:03, q66 wrote: He also uses a class. And -noboundscheck should be automatically induced by -release. ... but the methods are marked as final -- shouldn't that substantially reduce any speed hit from using class instead of struct?

Re: D 50% slower than C++. What I'm doing wrong?

2012-04-14 Thread Joseph Rushton Wakeling
On 14/04/12 23:03, q66 wrote: He also uses a class. And -noboundscheck should be automatically induced by -release. Ahh, THAT probably explains why some of my numerical code is so markedly different in speed when compiled using DMD with or without the -release switch. It's a MAJOR difference

Re: D 50% slower than C++. What I'm doing wrong?

2012-04-14 Thread Jonathan M Davis
On Sunday, April 15, 2012 03:51:59 ReneSac wrote: > About compiler optimizations, -finline-functions and -fweb are > part of -O3. I tried to compile with -no-bounds-check, but made > no diference for DMD and GDC. It probably is part of -release as > q66 said. Not quite. -noboundscheck turns off _a

Re: D 50% slower than C++. What I'm doing wrong?

2012-04-14 Thread ReneSac
I tested the q66 version in my computer (sandy bridge @ 4.3GHz). Repeating the old timmings here, and the new results are marked as "D-v2": test.fpaq0 (16562521 bytes) -> test.bmp (33159254 bytes) Lang| Comp | Binary size | Time (lower is better) C++ (g++) - 13kb - 2.42s (100%) -

Re: Calling delegate properties without parens

2012-04-14 Thread Jonathan M Davis
On Saturday, April 14, 2012 20:47:20 Piotr Szturmaj wrote: > I have following code: > > import std.array, std.range, std.stdio; > > struct CommonInputRange(E) > { > @property bool delegate() empty; > @property E delegate() front; > void delegate() popFront; > } > > void main(strin

Re: Calling delegate properties without parens

2012-04-14 Thread Piotr Szturmaj
Artur Skawina wrote: @property is for functions masquerading as data, i'm not sure extending it to pointers and delegates would be a good idea. What you are asking for is basically syntax sugar for: struct CommonInputRange(E) { bool delegate() _empty; @property auto empty

Re: Thread join behaviour

2012-04-14 Thread Somedude
Le 14/04/2012 18:04, Russel Winder a écrit : > I thought the following would terminate gracefully having printed 0..9 > in some (random) order: > > #! /usr/bin/env rdmd > > import std.algorithm ; > import std.range ; > import std.stdio ; > import co

Re: Thread join behaviour

2012-04-14 Thread Artur Skawina
On 04/14/12 18:04, Russel Winder wrote: > I thought the following would terminate gracefully having printed 0..9 > in some (random) order: > > #! /usr/bin/env rdmd > > import std.algorithm ; > import std.range ; > import std.stdio ; > import core.th

Re: Thread join behaviour

2012-04-14 Thread Matt Soucy
On 04/14/2012 04:56 PM, Alex Rønne Petersen wrote: On 14-04-2012 18:04, Russel Winder wrote: I thought the following would terminate gracefully having printed 0..9 in some (random) order: #! /usr/bin/env rdmd import std.algorithm ; import std.range ; import std.stdio ; import core.thread ; in

Re: D 50% slower than C++. What I'm doing wrong?

2012-04-14 Thread q66
On Saturday, 14 April 2012 at 20:58:01 UTC, Somedude wrote: Le 14/04/2012 21:53, q66 a écrit : On Saturday, 14 April 2012 at 19:05:40 UTC, ReneSac wrote: I have this simple binary arithmetic coder in C++ by Mahoney and translated to D by Maffi. I added "notrow", "final" and "pure" and "GC.di

Re: D 50% slower than C++. What I'm doing wrong?

2012-04-14 Thread Somedude
Le 14/04/2012 21:53, q66 a écrit : > On Saturday, 14 April 2012 at 19:05:40 UTC, ReneSac wrote: >> I have this simple binary arithmetic coder in C++ by Mahoney and >> translated to D by Maffi. I added "notrow", "final" and "pure" and >> "GC.disable" where it was possible, but that didn't made much

Re: Thread join behaviour

2012-04-14 Thread Alex Rønne Petersen
On 14-04-2012 18:04, Russel Winder wrote: I thought the following would terminate gracefully having printed 0..9 in some (random) order: #! /usr/bin/env rdmd import std.algorithm ; import std.range ; import std.stdio ; import core.thread ;

Re: A "general" tag

2012-04-14 Thread Xan
On Saturday, 14 April 2012 at 19:40:06 UTC, Aleksandar Ružičić wrote: On Saturday, 14 April 2012 at 19:17:52 UTC, Xan wrote: Hi, I try to translate a script I wrote in Fantom [www.fantom.org]. In my script, I have a type "Tag" defined as a triple of: - String (the name of the tag), - Type (t

Re: Calling delegate properties without parens

2012-04-14 Thread Artur Skawina
On 04/14/12 20:47, Piotr Szturmaj wrote: > I have following code: > > import std.array, std.range, std.stdio; > > struct CommonInputRange(E) > { > @property bool delegate() empty; > @property E delegate() front; > void delegate() popFront; > } > > void main(string[] args) > { > a

Re: D 50% slower than C++. What I'm doing wrong?

2012-04-14 Thread q66
Forgot to mention specs: Dualcore Athlon II X2 240 (2.8GHz), 4GB RAM, FreeBSD 9 x64, both compilers are 64bit.

Thread join behaviour

2012-04-14 Thread Russel Winder
I thought the following would terminate gracefully having printed 0..9 in some (random) order: #! /usr/bin/env rdmd import std.algorithm ; import std.range ; import std.stdio ; import core.thread ; int main ( immutable string[] args

Re: D 50% slower than C++. What I'm doing wrong?

2012-04-14 Thread q66
On Saturday, 14 April 2012 at 19:05:40 UTC, ReneSac wrote: I have this simple binary arithmetic coder in C++ by Mahoney and translated to D by Maffi. I added "notrow", "final" and "pure" and "GC.disable" where it was possible, but that didn't made much difference. Adding "const" to the Predict

Re: D 50% slower than C++. What I'm doing wrong?

2012-04-14 Thread Joseph Rushton Wakeling
On 14/04/12 21:05, ReneSac wrote: Lang| Comp | Binary size | Time (lower is better) C++ (g++) - 13kb - 2.42s (100%) -O3 -s D (DMD) - 230kb - 4.46s (184%) -O -release -inline D (GDC) - 1322kb - 3.69s (152%) -O3 -frelease -s Try using extra optimizations for GDC. Actually, GDC has a "dmd-like"

Re: A "general" tag

2012-04-14 Thread Aleksandar Ružičić
On Saturday, 14 April 2012 at 19:17:52 UTC, Xan wrote: Hi, I try to translate a script I wrote in Fantom [www.fantom.org]. In my script, I have a type "Tag" defined as a triple of: - String (the name of the tag), - Type (the type of the tag: could be Str, Date, Int, etc.) - Obj (the value of t

Re: floats default to NaN... why?

2012-04-14 Thread Jerome BENOIT
On 14/04/12 20:51, F i L wrote: On Saturday, 14 April 2012 at 18:07:41 UTC, Jerome BENOIT wrote: On 14/04/12 18:38, F i L wrote: On Saturday, 14 April 2012 at 15:44:46 UTC, Jerome BENOIT wrote: On 14/04/12 16:47, F i L wrote: Jerome BENOIT wrote: Why would a compiler set `real' to 0.0 rath

Re: floats default to NaN... why?

2012-04-14 Thread Joseph Rushton Wakeling
On 14/04/12 16:52, F i L wrote: The initialization values chosen are also determined by the underlying hardware implementation of the type. Signalling NANs (http://en.wikipedia.org/wiki/NaN#Signaling_NaN) can be used with floats because they are implemented by the CPU, but in the case of integers

A "general" tag

2012-04-14 Thread Xan
Hi, I try to translate a script I wrote in Fantom [www.fantom.org]. In my script, I have a type "Tag" defined as a triple of: - String (the name of the tag), - Type (the type of the tag: could be Str, Date, Int, etc.) - Obj (the value of the tag; Fantom has Objects of Top-Class hierachy). (n

D 50% slower than C++. What I'm doing wrong?

2012-04-14 Thread ReneSac
I have this simple binary arithmetic coder in C++ by Mahoney and translated to D by Maffi. I added "notrow", "final" and "pure" and "GC.disable" where it was possible, but that didn't made much difference. Adding "const" to the Predictor.p() (as in the C++ version) gave 3% higher performance.

Re: floats default to NaN... why?

2012-04-14 Thread Manfred Nowak
F i L wrote: > You can't force new D programmers to follow a 'guidline' By exposing a syntax error for every missed explicit initialization the current guideline would be changed into an insurmountable barrier, forcing every "new D programmers to follow" the 'guidline'. -manfred

Re: floats default to NaN... why?

2012-04-14 Thread Andrej Mitrovic
On 4/14/12, Jerome BENOIT wrote: > I would even say that D may go further by setting a kind of NaN for integers. That's never going to happen.

Re: floats default to NaN... why?

2012-04-14 Thread F i L
On Saturday, 14 April 2012 at 18:07:41 UTC, Jerome BENOIT wrote: On 14/04/12 18:38, F i L wrote: On Saturday, 14 April 2012 at 15:44:46 UTC, Jerome BENOIT wrote: On 14/04/12 16:47, F i L wrote: Jerome BENOIT wrote: Why would a compiler set `real' to 0.0 rather then 1.0, Pi, ? Because 0

Calling delegate properties without parens

2012-04-14 Thread Piotr Szturmaj
I have following code: import std.array, std.range, std.stdio; struct CommonInputRange(E) { @property bool delegate() empty; @property E delegate() front; void delegate() popFront; } void main(string[] args) { alias CommonInputRange!dchar DCRange; static assert(isInputRange!

Re: floats default to NaN... why?

2012-04-14 Thread F i L
On Saturday, 14 April 2012 at 18:02:57 UTC, Andrej Mitrovic wrote: On 4/14/12, F i L wrote: auto f = 1.0f; // is float not Float UFCS in 2.059 to the rescue: struct Float { float payload = 0.0; alias payload this; } @property Float f(float val) { return Float(val); } void main

Re: floats default to NaN... why?

2012-04-14 Thread Jerome BENOIT
On 14/04/12 18:38, F i L wrote: On Saturday, 14 April 2012 at 15:44:46 UTC, Jerome BENOIT wrote: On 14/04/12 16:47, F i L wrote: Jerome BENOIT wrote: Why would a compiler set `real' to 0.0 rather then 1.0, Pi, ? Because 0.0 is the "lowest" (smallest, starting point, etc..) quid -i

Re: floats default to NaN... why?

2012-04-14 Thread Andrej Mitrovic
On 4/14/12, F i L wrote: > auto f = 1.0f; // is float not Float UFCS in 2.059 to the rescue: struct Float { float payload = 0.0; alias payload this; } @property Float f(float val) { return Float(val); } void main() { auto f = 1.0.f; }

Re: floats default to NaN... why?

2012-04-14 Thread F i L
On Saturday, 14 April 2012 at 17:30:19 UTC, Andrej Mitrovic wrote: On 4/14/12, F i L wrote: a Hack though, since it doesn't work with 'auto'. What do you mean? Only that: auto f = 1.0f; // is float not Float

Re: floats default to NaN... why?

2012-04-14 Thread Andrej Mitrovic
On 4/14/12, F i L wrote: > a Hack though, since it doesn't work with 'auto'. What do you mean?

Re: floats default to NaN... why?

2012-04-14 Thread F i L
On Saturday, 14 April 2012 at 15:35:13 UTC, Andrej Mitrovic wrote: On 4/14/12, F i L wrote: This is exactly what I'm trying to get at. Anyway it's not all bad news since we can use a workaround: struct Float { float payload = 0.0; alias payload this; } void main() { Float x; //

Re: floats default to NaN... why?

2012-04-14 Thread F i L
On Saturday, 14 April 2012 at 15:44:46 UTC, Jerome BENOIT wrote: On 14/04/12 16:47, F i L wrote: Jerome BENOIT wrote: Why would a compiler set `real' to 0.0 rather then 1.0, Pi, ? Because 0.0 is the "lowest" (smallest, starting point, etc..) quid -infinity ? The concept of zero is

Re: floats default to NaN... why?

2012-04-14 Thread Jerome BENOIT
On 14/04/12 16:47, F i L wrote: Jerome BENOIT wrote: Why would a compiler set `real' to 0.0 rather then 1.0, Pi, ? Because 0.0 is the "lowest" (smallest, starting point, etc..) quid -infinity ? numerical value. Pi is the corner case and obviously has to be explicitly set. If you wa

Re: floats default to NaN... why?

2012-04-14 Thread Andrej Mitrovic
On 4/14/12, F i L wrote: > This is exactly what I'm trying to get at. Anyway it's not all bad news since we can use a workaround: struct Float { float payload = 0.0; alias payload this; } void main() { Float x; // acts as a float, is initialized to 0.0 } Not pretty, but it comes i

Re: floats default to NaN... why?

2012-04-14 Thread F i L
On Saturday, 14 April 2012 at 12:48:01 UTC, Andrej Mitrovic wrote: On 4/14/12, bearophile wrote: Having a variable not initialized is a common source of bugs. I'm going to argue that this was true for C/C++ but is much less true for D. One benefit of having integrals initialized to 0 is that

Re: floats default to NaN... why?

2012-04-14 Thread F i L
dennis luehring wrote: what does make float default to 0.0 better - does it just feel better? Not just. It's consistent with Int types, therefor easier for newbs to pick up since all numeric value types behave the same. I even think char should default to a usable value as well. Most likely

Re: floats default to NaN... why?

2012-04-14 Thread F i L
On Saturday, 14 April 2012 at 10:38:45 UTC, Silveri wrote: On Saturday, 14 April 2012 at 07:52:51 UTC, F i L wrote: On Saturday, 14 April 2012 at 06:43:11 UTC, Manfred Nowak wrote: F i L wrote: 4) use hardware signalling to overcome some of the limitations impressed by 3). 4) I have no idea

Re: floats default to NaN... why?

2012-04-14 Thread F i L
Jerome BENOIT wrote: Why would a compiler set `real' to 0.0 rather then 1.0, Pi, ? Because 0.0 is the "lowest" (smallest, starting point, etc..) numerical value. Pi is the corner case and obviously has to be explicitly set. If you want to take this further, chars could even be initiali

Re: floats default to NaN... why?

2012-04-14 Thread Andrej Mitrovic
On 4/14/12, bearophile wrote: > Having a variable not initialized is a common source of bugs. I'm going to argue that this was true for C/C++ but is much less true for D. One benefit of having integrals initialized to 0 is that you now have a defined default that you can rely on (just as you can

Re: floats default to NaN... why?

2012-04-14 Thread bearophile
F i L: So basically, it's for debugging? To avoid bugs it's useful for all variables to be initialized before use (maybe with an explicit annotation for the uncommon cases where you want to use uninitialized memory, like: http://research.swtch.com/sparse ). Having a variable not initialize

Re: floats default to NaN... why?

2012-04-14 Thread Jerome BENOIT
On 14/04/12 09:45, F i L wrote: Jonathan M Davis wrote: No. You always have a bug if you don't initialize a variable to the value that it's supposed to be. It doesn't matter whether it's 0, NaN, 527.1209823, or whatever. All having a default value that you're more likely to use means is that y

"shared" status

2012-04-14 Thread Luis Panadero Guardeño
What is the status of "shared" types ? I try it with gdmd v4.6.3 And I not get any warring/error when I do anything over a shared variable without using atomicOp. It's normal ? shared ushort ram[ram_size]; ram[i] = cast(ushort) (bytes[0] | bytes[1] << 8); -- I'm afraid that I have a

Re: floats default to NaN... why?

2012-04-14 Thread dennis luehring
Am 14.04.2012 07:48, schrieb F i L: On Saturday, 14 April 2012 at 05:19:38 UTC, dennis luehring wrote: Am 14.04.2012 06:00, schrieb F i L: struct Foo { int x, y;// ready for use. float z, w; // messes things up. float r = 0; // almost always... } how

Re: floats default to NaN... why?

2012-04-14 Thread Silveri
On Saturday, 14 April 2012 at 07:52:51 UTC, F i L wrote: On Saturday, 14 April 2012 at 06:43:11 UTC, Manfred Nowak wrote: F i L wrote: 4) use hardware signalling to overcome some of the limitations impressed by 3). 4) I have no idea what you just said... :) On Saturday, 14 April 2012 at 07:

Re: floats default to NaN... why?

2012-04-14 Thread F i L
On Saturday, 14 April 2012 at 07:59:25 UTC, Jonathan M Davis wrote: On Saturday, April 14, 2012 09:45:57 F i L wrote: If D doesn't accommodate entering Laymen, how does it expect to gain popularity in any major way? Efficiency puts D on the map, convenience is what brings the tourists. I belie

Re: floats default to NaN... why?

2012-04-14 Thread Jonathan M Davis
On Saturday, April 14, 2012 09:58:42 F i L wrote: > On Saturday, 14 April 2012 at 06:29:40 UTC, Ali Çehreli wrote: > > On 04/13/2012 09:00 PM, F i L wrote: > > > default is NaN > > > > Just to complete the picture, character types have invalid > > initial values as well: 0xFF, 0x, and 0xFF

Re: floats default to NaN... why?

2012-04-14 Thread Jonathan M Davis
On Saturday, April 14, 2012 09:45:57 F i L wrote: > If D doesn't accommodate entering Laymen, how does it expect to > gain popularity in any major way? Efficiency puts D on the map, > convenience is what brings the tourists. I believe that you are the first person that I have ever heard complain t

Re: floats default to NaN... why?

2012-04-14 Thread F i L
On Saturday, 14 April 2012 at 06:29:40 UTC, Ali Çehreli wrote: On 04/13/2012 09:00 PM, F i L wrote: > default is NaN Just to complete the picture, character types have invalid initial values as well: 0xFF, 0x, and 0x for char, wchar, and dchar, respectively. Ali That's interes

Re: floats default to NaN... why?

2012-04-14 Thread F i L
On Saturday, 14 April 2012 at 06:43:11 UTC, Manfred Nowak wrote: F i L wrote: It sounds like circular reasoning. Several considerations pressed the design into the current form: 1) always changing output on unchanged input is hard to debug 2) GC needs to be saved from garbage, that looks like

Re: floats default to NaN... why?

2012-04-14 Thread F i L
Jonathan M Davis wrote: No. You always have a bug if you don't initialize a variable to the value that it's supposed to be. It doesn't matter whether it's 0, NaN, 527.1209823, or whatever. All having a default value that you're more likely to use means is that you're less likely to have to expl