digitalmars.D.announce - dmd 1.053 and 2.037 release
- Walter Bright (6/6) Dec 04 2009 Probably the biggest thing is opDispatch!
- Adam D. Ruppe (17/20) Dec 04 2009 Nay, the bug fixes!
- Walter Bright (8/9) Dec 04 2009 Yeah, that was a pretty evil bug. It has been lurking there for probably...
- Max Samukha (7/13) Dec 05 2009 This code:
- Extrawurst (3/13) Dec 05 2009 Why is opPow just override-able in classes and not in structs ? Is that
- Extrawurst (9/23) Dec 05 2009 ok my bad it does work for structs, it just complains if i implement the...
- Extrawurst (2/28) Dec 05 2009 Ignore me, i should take a nap ;) it is all good!
- Don (2/28) Dec 05 2009 overriding is not the same as overloading.
- Don (2/16) Dec 05 2009 Do you have a test case? The cases I tested all worked.
- Extrawurst (19/29) Dec 05 2009 I love opDispatch ;)
- Extrawurst (4/14) Dec 05 2009 Can someone explain this "new feature" please ?!
- Don (3/20) Dec 05 2009 int [] x = new int[30];
- Don (3/13) Dec 05 2009 I just noticed: I don't see @property in the changelog anywhere, but
- Lars T. Kyllingstad (5/19) Dec 07 2009 Do @safe, @trusted and @system actually do anything yet?
- bearophile (25/25) Dec 05 2009 There's a large number of changes!
- Nick Sabalausky (5/8) Dec 05 2009 I assume that means:
- bearophile (4/8) Dec 05 2009 Yes, you are right, that's probably it, thank you.
- Max Samukha (2/11) Dec 05 2009 Was this feature documented anywhere?
- Nick Sabalausky (5/19) Dec 05 2009 I don't think it was ever really a feature, it was just a consequence of...
- Max Samukha (3/24) Dec 06 2009 Ah, it is simply the unfortunate comma expression evaluated to 3.
- bearophile (4/6) Dec 06 2009 There are so many design holes in the C language that's the other langua...
- Andrei Alexandrescu (13/20) Dec 06 2009 Appreciating language designs is subjective. IMHO C has a remarkably
- Walter Bright (3/7) Dec 06 2009 C really has only one major design flaw - the conflation of arrays and
- Andrei Alexandrescu (3/11) Dec 06 2009 Great insight.
- Max Samukha (12/23) Dec 07 2009 I think the following real-world code is a good argument against comma
- klickverbot (4/16) Dec 07 2009 I have never used the comma operator in my own code, but in my opinion t...
- Jeremie Pelletier (6/22) Dec 07 2009 It is still more readable than 'while(from != to--)' or '((--to)->v)'.
- Nick Sabalausky (9/31) Dec 07 2009 I've noticed that every use I've ever seen mentioned of the comma operat...
- Kagamin (5/7) Dec 08 2009 also:
- Ary Borenszweig (4/7) Dec 05 2009 A very bad idea indeed! The idea is to save keystrokes...
- bearophile (15/17) Dec 05 2009 Note that this code doesn't compile:
- Don (17/27) Dec 05 2009 I'll just explain the situation here. I provided a patch to DMD for
- Leandro Lucarella (16/26) Dec 05 2009 Great! Can you tag the new releases? (and maybe the old ones too ;)
- Leandro Lucarella (9/26) Dec 08 2009 Thanks for the tagging :)
- Simen kjaeraas (12/18) Dec 05 2009 I get a compile error:
- Walter Bright (2/10) Dec 05 2009 That change is already in the release. Perhaps you have an old version?
- Simen kjaeraas (5/16) Dec 05 2009 So it would indeed seem. Sorry about the noise.
- Lars T. Kyllingstad (10/20) Dec 07 2009 Thanks, guys! This is a pretty awesome release. :) I especially like
- Don (3/25) Dec 07 2009 Aargh, the example's wrong. DMD optimizes the assignment into a blit.
- Don (16/42) Dec 07 2009 I take that back. The example is correct. This code...
- Lars T. Kyllingstad (3/48) Dec 07 2009 OK, thanks for explaining. :)
- Don (9/59) Dec 10 2009 I had a further look at this. The compiler *is* creating doubles and
- Walter Bright (2/10) Dec 10 2009 How do we fix the CPU? ;-)
- Brad Roberts (3/15) Dec 10 2009 A soldering iron with a really sharp point?
- Walter Bright (2/19) Dec 10 2009 I was thinking 220VAC might help!
- Don (16/28) Dec 11 2009 Yeah. Actually the CPU problem is an accepts-invalid bug. It worked on
- Walter Bright (3/23) Dec 11 2009 I had no idea that was the case!
- Don (5/31) Dec 11 2009 I only just discovered it. Every documentation I've seen just said
- Bill Baxter (6/39) Dec 12 2009 I experienced it in a fluid sim I was working on in grad school. NaNs
- Andrei Alexandrescu (4/41) Dec 12 2009 Almost same here. Program was amazingly slow until I figured there were
- Nick Treleaven (11/12) Dec 08 2009 Sounds great :)
- Walter Bright (2/3) Dec 08 2009 Nope. Thanks! Fixed.
Probably the biggest thing is opDispatch! http://www.digitalmars.com/d/1.0/changelog.html http://ftp.digitalmars.com/dmd.1.053.zip http://www.digitalmars.com/d/2.0/changelog.html http://ftp.digitalmars.com/dmd.2.037.zip Many thanks to the numerous people who contributed to this update.
Dec 04 2009
On Fri, Dec 04, 2009 at 08:05:13PM -0800, Walter Bright wrote:Probably the biggest thing is opDispatch!Nay, the bug fixes! It looks like you guys solved an elusive codegen problem in this release that's been bugging me since about 2007. Not a showstopper - rearranging some statements made it go away (also why I never filed a bug report; I couldn't reproduce it reliably in any test case smaller than my 5000 line app!), but an annoyance nonetheless. I think it might have been Bugzilla 3521. Whatever, I've been unable to reproduce it again at all over the last hour and a half. I think it's dead! Yay! And WOW dmd 1 is fast. dmd 2 is fast too, but oh man, I've forgotten how blazing dmd1 really is. Anyway, thanks! So exciting.Many thanks to the numerous people who contributed to this update.-- Adam D. Ruppe http://arsdnet.net
Dec 04 2009
Adam D. Ruppe wrote:I think it might have been Bugzilla 3521.Yeah, that was a pretty evil bug. It has been lurking there for probably 18+ years now. It's evil because only a very, very rare set of circumstances will trip it, and even then it may not be executed or noticed. I instrumented the C++ compiler for it, and ran it through its test suite. Turns out, it did trip it, but only on a piece of code that was tested for compile only. Sigh. I was glad to get it fixed.
Dec 04 2009
On Fri, 04 Dec 2009 20:05:13 -0800, Walter Bright <newshound1 digitalmars.com> wrote:Probably the biggest thing is opDispatch! http://www.digitalmars.com/d/1.0/changelog.html http://ftp.digitalmars.com/dmd.1.053.zip http://www.digitalmars.com/d/2.0/changelog.html http://ftp.digitalmars.com/dmd.2.037.zip Many thanks to the numerous people who contributed to this update.This code: int[3] a = [1, 2, 3]; allocates the literal on heap and then copies it to 'a'. A call to a library function has to be made to avoid the allocation. Can we have such allocations optimized out?
Dec 05 2009
Walter Bright wrote:Probably the biggest thing is opDispatch! http://www.digitalmars.com/d/1.0/changelog.html http://ftp.digitalmars.com/dmd.1.053.zip http://www.digitalmars.com/d/2.0/changelog.html http://ftp.digitalmars.com/dmd.2.037.zip Many thanks to the numerous people who contributed to this update.Why is opPow just override-able in classes and not in structs ? Is that intended behaviour ?
Dec 05 2009
Extrawurst wrote:Walter Bright wrote:ok my bad it does work for structs, it just complains if i implement the operator using the "override" keyword: Inside of a class it say: "Error: function main.Foo.opPow does not override any function" and inside of a struct is says: "Error: function main.Foo.opPow override only applies to class member functions" Weird !Probably the biggest thing is opDispatch! http://www.digitalmars.com/d/1.0/changelog.html http://ftp.digitalmars.com/dmd.1.053.zip http://www.digitalmars.com/d/2.0/changelog.html http://ftp.digitalmars.com/dmd.2.037.zip Many thanks to the numerous people who contributed to this update.Why is opPow just override-able in classes and not in structs ? Is that intended behaviour ?
Dec 05 2009
Extrawurst wrote:Extrawurst wrote:Ignore me, i should take a nap ;) it is all good!Walter Bright wrote:ok my bad it does work for structs, it just complains if i implement the operator using the "override" keyword: Inside of a class it say: "Error: function main.Foo.opPow does not override any function" and inside of a struct is says: "Error: function main.Foo.opPow override only applies to class member functions" Weird !Probably the biggest thing is opDispatch! http://www.digitalmars.com/d/1.0/changelog.html http://ftp.digitalmars.com/dmd.1.053.zip http://www.digitalmars.com/d/2.0/changelog.html http://ftp.digitalmars.com/dmd.2.037.zip Many thanks to the numerous people who contributed to this update.Why is opPow just override-able in classes and not in structs ? Is that intended behaviour ?
Dec 05 2009
Extrawurst wrote:Extrawurst wrote:overriding is not the same as overloading.Walter Bright wrote:ok my bad it does work for structs, it just complains if i implement the operator using the "override" keyword: Inside of a class it say: "Error: function main.Foo.opPow does not override any function" and inside of a struct is says: "Error: function main.Foo.opPow override only applies to class member functions" Weird !Probably the biggest thing is opDispatch! http://www.digitalmars.com/d/1.0/changelog.html http://ftp.digitalmars.com/dmd.1.053.zip http://www.digitalmars.com/d/2.0/changelog.html http://ftp.digitalmars.com/dmd.2.037.zip Many thanks to the numerous people who contributed to this update.Why is opPow just override-able in classes and not in structs ? Is that intended behaviour ?
Dec 05 2009
Extrawurst wrote:Walter Bright wrote:Do you have a test case? The cases I tested all worked.Probably the biggest thing is opDispatch! http://www.digitalmars.com/d/1.0/changelog.html http://ftp.digitalmars.com/dmd.1.053.zip http://www.digitalmars.com/d/2.0/changelog.html http://ftp.digitalmars.com/dmd.2.037.zip Many thanks to the numerous people who contributed to this update.Why is opPow just override-able in classes and not in structs ? Is that intended behaviour ?
Dec 05 2009
Walter Bright wrote:Probably the biggest thing is opDispatch! http://www.digitalmars.com/d/1.0/changelog.html http://ftp.digitalmars.com/dmd.1.053.zip http://www.digitalmars.com/d/2.0/changelog.html http://ftp.digitalmars.com/dmd.2.037.zip Many thanks to the numerous people who contributed to this update.I love opDispatch ;) [CODE] struct Foo { public void opDispatch(string s) (int _v) { writefln("Foo.'%s' (%s)",s,_v); return; } } void main() { Foo f; f.fuckya(2); f.thisisaterriblelongmethodnamethatisnotevenimplementedexplicitlyinsideofmyclassFoo(2); } [/CODE] I cannot wait to use it in my lua bindings, this is a great feature.
Dec 05 2009
Walter Bright wrote:Probably the biggest thing is opDispatch! http://www.digitalmars.com/d/1.0/changelog.html http://ftp.digitalmars.com/dmd.1.053.zip http://www.digitalmars.com/d/2.0/changelog.html http://ftp.digitalmars.com/dmd.2.037.zip Many thanks to the numerous people who contributed to this update.Can someone explain this "new feature" please ?! "Added support for op= for array.length" array.length = X; cannot be meant...
Dec 05 2009
Extrawurst wrote:Walter Bright wrote:int [] x = new int[30]; x.length += 5;Probably the biggest thing is opDispatch! http://www.digitalmars.com/d/1.0/changelog.html http://ftp.digitalmars.com/dmd.1.053.zip http://www.digitalmars.com/d/2.0/changelog.html http://ftp.digitalmars.com/dmd.2.037.zip Many thanks to the numerous people who contributed to this update.Can someone explain this "new feature" please ?! "Added support for op= for array.length" array.length = X; cannot be meant...
Dec 05 2009
Walter Bright wrote:Probably the biggest thing is opDispatch! http://www.digitalmars.com/d/1.0/changelog.html http://ftp.digitalmars.com/dmd.1.053.zip http://www.digitalmars.com/d/2.0/changelog.html http://ftp.digitalmars.com/dmd.2.037.zip Many thanks to the numerous people who contributed to this update.I just noticed: I don't see property in the changelog anywhere, but it's now in the spec. safe, trusted, system aren't there either.
Dec 05 2009
Don wrote:Walter Bright wrote:Do safe, trusted and system actually do anything yet? It seems property now enforces the "0 or 1 parameter" constraint, but one can still use property syntax to call non- property functions. -LarsProbably the biggest thing is opDispatch! http://www.digitalmars.com/d/1.0/changelog.html http://ftp.digitalmars.com/dmd.1.053.zip http://www.digitalmars.com/d/2.0/changelog.html http://ftp.digitalmars.com/dmd.2.037.zip Many thanks to the numerous people who contributed to this update.I just noticed: I don't see property in the changelog anywhere, but it's now in the spec. safe, trusted, system aren't there either.
Dec 07 2009
There's a large number of changes! I don't understand what "No more comma operators allowed between [ ]." means. I have tried the D2 compiler a little with this code: import std.stdio: writeln; import std.math: pow; struct S1 { int x; } void main() { struct S2 { int x; } static struct S3 { int x; } writeln(S1.sizeof, " ", S2.sizeof, " ", S3.sizeof); // 4 4 4 auto a = [1, 2, 3]; writeln(a); // 1 2 3 a.length++; //writeln(5 ^^ 2); writeln(5.2 ^^ 2); // errors } S2 seems to not have the hidden field, The sizeof is the same for all three structs. a.length++ seems to not work yet. writeln(a); prints stupidly items separated by a space. A MUCH better print is: [1, 2, 3] 5 ^^ 2 doesn't work yet, I guess it's not implemented yet. But what do I have to import from math to use 5.2 ^^ 2 ? Anyway, the need to explicitly import something to use a built-in operator like ^^ looks like a bad idea. Bye and thank you, bearophile
Dec 05 2009
"bearophile" <bearophileHUGS lycos.com> wrote in message news:hfdt87$1num$1 digitalmars.com...There's a large number of changes! I don't understand what "No more comma operators allowed between [ ]." means.I assume that means: int[1,2,3] foo; // <- formerly created an int[3], now (presumably) disallowed
Dec 05 2009
Nick Sabalausky:I assume that means: int[1,2,3] foo; // <- formerly created an int[3], now (presumably) disallowedYes, you are right, that's probably it, thank you. Bye, bearophile
Dec 05 2009
On Sat, 5 Dec 2009 10:19:23 -0500, "Nick Sabalausky" <a a.a> wrote:"bearophile" <bearophileHUGS lycos.com> wrote in message news:hfdt87$1num$1 digitalmars.com...Was this feature documented anywhere?There's a large number of changes! I don't understand what "No more comma operators allowed between [ ]." means.I assume that means: int[1,2,3] foo; // <- formerly created an int[3], now (presumably) disallowed
Dec 05 2009
"Max Samukha" <spambox d-coding.com> wrote in message news:pkvkh5tvvhie0ga61lrpp5qmt53h5ju1t4 4ax.com...On Sat, 5 Dec 2009 10:19:23 -0500, "Nick Sabalausky" <a a.a> wrote:I don't think it was ever really a feature, it was just a consequence of the next-to-useless expression "x,y" evaluating to "y" and "int[...] foo;" taking a single value for "..."."bearophile" <bearophileHUGS lycos.com> wrote in message news:hfdt87$1num$1 digitalmars.com...Was this feature documented anywhere?There's a large number of changes! I don't understand what "No more comma operators allowed between [ ]." means.I assume that means: int[1,2,3] foo; // <- formerly created an int[3], now (presumably) disallowed
Dec 05 2009
On Sat, 5 Dec 2009 10:59:12 -0500, "Nick Sabalausky" <a a.a> wrote:"Max Samukha" <spambox d-coding.com> wrote in message news:pkvkh5tvvhie0ga61lrpp5qmt53h5ju1t4 4ax.com...Ah, it is simply the unfortunate comma expression evaluated to 3. Comma expressions need to go. Thanks.On Sat, 5 Dec 2009 10:19:23 -0500, "Nick Sabalausky" <a a.a> wrote:I don't think it was ever really a feature, it was just a consequence of the next-to-useless expression "x,y" evaluating to "y" and "int[...] foo;" taking a single value for "..."."bearophile" <bearophileHUGS lycos.com> wrote in message news:hfdt87$1num$1 digitalmars.com...Was this feature documented anywhere?There's a large number of changes! I don't understand what "No more comma operators allowed between [ ]." means.I assume that means: int[1,2,3] foo; // <- formerly created an int[3], now (presumably) disallowed
Dec 06 2009
Max Samukha:Ah, it is simply the unfortunate comma expression evaluated to 3. Comma expressions need to go. Thanks.There are so many design holes in the C language that's the other languages must be really bad to be worse than C :-) Designing languages is hard. Bye, bearophile
Dec 06 2009
bearophile wrote:Max Samukha:Appreciating language designs is subjective. IMHO C has a remarkably good design. It has an awkward precedence for the shift operators, an odd syntax for function declaration, a few conversions are messed up... other than that, there's a lot of good things to say about it. I think it's considerably better designed than e.g. Fortran, which is not much older. And look at Pascal - whereas on the outside it looks so clean and well-designed, it is virtually useless in its standard incarnation. Not wanting to start a language war, but to just say C has plenty of design holes and then patronize it with the comment that designing languages is hard - well, you better have a hell of an argument up your sleeve. AndreiAh, it is simply the unfortunate comma expression evaluated to 3. Comma expressions need to go. Thanks.There are so many design holes in the C language that's the other languages must be really bad to be worse than C :-) Designing languages is hard.
Dec 06 2009
Andrei Alexandrescu wrote:Not wanting to start a language war, but to just say C has plenty of design holes and then patronize it with the comment that designing languages is hard - well, you better have a hell of an argument up your sleeve.C really has only one major design flaw - the conflation of arrays and pointers.
Dec 06 2009
Walter Bright wrote:Andrei Alexandrescu wrote:Great insight. AndreiNot wanting to start a language war, but to just say C has plenty of design holes and then patronize it with the comment that designing languages is hard - well, you better have a hell of an argument up your sleeve.C really has only one major design flaw - the conflation of arrays and pointers.
Dec 06 2009
On Sun, 06 Dec 2009 23:43:16 -0600, Andrei Alexandrescu <SeeWebsiteForEmail erdani.org> wrote:Walter Bright wrote:I think the following real-world code is a good argument against comma operators: template <typename T> Q_INLINE_TEMPLATE void QList<T>::node_destruct(Node *from, Node *to) { if (QTypeInfo<T>::isLarge || QTypeInfo<T>::isStatic) while(from != to) --to, delete reinterpret_cast<T*>(to->v); else if (QTypeInfo<T>::isComplex) while (from != to) --to, reinterpret_cast<T*>(to)->~T(); }Andrei Alexandrescu wrote:Great insight. AndreiNot wanting to start a language war, but to just say C has plenty of design holes and then patronize it with the comment that designing languages is hard - well, you better have a hell of an argument up your sleeve.C really has only one major design flaw - the conflation of arrays and pointers.
Dec 07 2009
Max Samukha wrote:I think the following real-world code is a good argument against comma operators: template <typename T> Q_INLINE_TEMPLATE void QList<T>::node_destruct(Node *from, Node *to) { if (QTypeInfo<T>::isLarge || QTypeInfo<T>::isStatic) while(from != to) --to, delete reinterpret_cast<T*>(to->v); else if (QTypeInfo<T>::isComplex) while (from != to) --to, reinterpret_cast<T*>(to)->~T(); }I have never used the comma operator in my own code, but in my opinion this particular piece of code is really easy and fluent to read. »Maintainability« is admittedly, however, a different topic.
Dec 07 2009
klickverbot wrote:Max Samukha wrote:It is still more readable than 'while(from != to--)' or '((--to)->v)'. I myself use the comma operator in for loops and simple assignments such as 'if(something) x = a, y = b;'. The boost::assign namespace also declares operator,() overloads to ease up assignments in C++ such as 'myVector += 1,2,3,4,5;'.I think the following real-world code is a good argument against comma operators: template <typename T> Q_INLINE_TEMPLATE void QList<T>::node_destruct(Node *from, Node *to) { if (QTypeInfo<T>::isLarge || QTypeInfo<T>::isStatic) while(from != to) --to, delete reinterpret_cast<T*>(to->v); else if (QTypeInfo<T>::isComplex) while (from != to) --to, reinterpret_cast<T*>(to)->~T(); }I have never used the comma operator in my own code, but in my opinion this particular piece of code is really easy and fluent to read. »Maintainability« is admittedly, however, a different topic.
Dec 07 2009
"Jeremie Pelletier" <jeremiep gmail.com> wrote in message news:hfjbs4$v35$1 digitalmars.com...klickverbot wrote:I've noticed that every use I've ever seen mentioned of the comma operator has only been a half-use of it. They all seem to fall into two categories: In one group, there's things like 'for' loops and the QList and if() examples above that don't make any use whatsoever of the comma operator's return value. Then in the other group there are operator overloading uses like boost::assign above that use only the comma operator's syntax, but throw away its semantics.Max Samukha wrote:It is still more readable than 'while(from != to--)' or '((--to)->v)'. I myself use the comma operator in for loops and simple assignments such as 'if(something) x = a, y = b;'. The boost::assign namespace also declares operator,() overloads to ease up assignments in C++ such as 'myVector += 1,2,3,4,5;'.I think the following real-world code is a good argument against comma operators: template <typename T> Q_INLINE_TEMPLATE void QList<T>::node_destruct(Node *from, Node *to) { if (QTypeInfo<T>::isLarge || QTypeInfo<T>::isStatic) while(from != to) --to, delete reinterpret_cast<T*>(to->v); else if (QTypeInfo<T>::isComplex) while (from != to) --to, reinterpret_cast<T*>(to)->~T(); }I have never used the comma operator in my own code, but in my opinion this particular piece of code is really easy and fluent to read. »Maintainability« is admittedly, however, a different topic.
Dec 07 2009
Jeremie Pelletier Wrote:I myself use the comma operator in for loops and simple assignments such as 'if(something) x = a, y = b;'.also: for(...) if(test) found=TRUE, break; if(found)...
Dec 08 2009
bearophile wrote:5 ^^ 2 doesn't work yet, I guess it's not implemented yet. But what do I have to import from math to use 5.2 ^^ 2 ? Anyway, the need to explicitly import something to use a built-in operator like ^^ looks like a bad idea.A very bad idea indeed! The idea is to save keystrokes... Can't "import std.math : pow;" be added to the current module when this is needed?
Dec 05 2009
Ary Borenszweig:Can't "import std.math : pow;" be added to the current module when this is needed?Note that this code doesn't compile: import std.stdio: writeln; import std.math: pow; void main() { writeln(5.2 ^^ 2); } This is what the compiler shows: test.d(5): Error: undefined identifier module test.std test.d(5): Error: no property 'math' for type 'void' Error: no property 'pow' for type 'int' test.d(5): Error: function expected before (), not __error of type int Tool completed with exit code 1 Bye, bearophile
Dec 05 2009
Ary Borenszweig wrote:bearophile wrote:I'll just explain the situation here. I provided a patch to DMD for opPow, with ^^. The patch was very minimal, since I did not know if Walter would accept it. It's not worth putting a whole lot of effort into something which will just be rejected (and it has less chance of acceptance if it is complicated). In the end, he did include the patch, though without opPowAssign. I did the absolute bare minimum required to get ^^ working. In my patch, I clearly stated that the requirement to include std.math.pow is temporary. BTW, One of the nice things about ^^ is that we will finally be able to do integer powers without necessarily using floating-point. All kinds of stuff is still missing. a ^^ b won't be constant-folded, for example. It's desperately important that the language spec becomes stable before Andrei's book comes out. That leaves only a couple more releases left in D2 where features can be added. Some, like this one, will have rough edges. Don't think of it as fully implemented feature.5 ^^ 2 doesn't work yet, I guess it's not implemented yet. But what do I have to import from math to use 5.2 ^^ 2 ? Anyway, the need to explicitly import something to use a built-in operator like ^^ looks like a bad idea.A very bad idea indeed! The idea is to save keystrokes... Can't "import std.math : pow;" be added to the current module when this is needed?
Dec 05 2009
== Quote from Don (nospam nospam.com)'s articleAll kinds of stuff is still missing. a ^^ b won't be constant-folded, for example. It's desperately important that the language spec becomes stable before Andrei's book comes out. That leaves only a couple more releases left in D2 where features can be added. Some, like this one, will have rough edges. Don't think of it as fully implemented feature.If we do find bugs in it, should we still file bug reports, or is the feature still so experimental that filing these would just be noise?
Dec 05 2009
dsimcha wrote:== Quote from Don (nospam nospam.com)'s articleI just patched the bug you reported. Putting together a test suite mightn't be a bad idea.All kinds of stuff is still missing. a ^^ b won't be constant-folded, for example. It's desperately important that the language spec becomes stable before Andrei's book comes out. That leaves only a couple more releases left in D2 where features can be added. Some, like this one, will have rough edges. Don't think of it as fully implemented feature.If we do find bugs in it, should we still file bug reports, or is the feature still so experimental that filing these would just be noise?
Dec 05 2009
Walter Bright, el 4 de diciembre a las 20:05 me escribiste:Probably the biggest thing is opDispatch! http://www.digitalmars.com/d/1.0/changelog.html http://ftp.digitalmars.com/dmd.1.053.zip http://www.digitalmars.com/d/2.0/changelog.html http://ftp.digitalmars.com/dmd.2.037.zip Many thanks to the numerous people who contributed to this update.Great! Can you tag the new releases? (and maybe the old ones too ;) This should be enough: svn cp http://svn.dsource.org/projects/dmd/branches/dmd-1.x http://svn.dsource.org/projects/dmd/tags/dmd-1.053 svn cp http://svn.dsource.org/projects/dmd/trunk http://svn.dsource.org/projects/dmd/tags/dmd-2.037 The same should be done in the phobos and druntime repositories. Thanks! -- Leandro Lucarella (AKA luca) http://llucax.com.ar/ ---------------------------------------------------------------------- GPG Key: 5F5A8D05 (F8CD F9A7 BF00 5431 4145 104C 949E BFB6 5F5A 8D05) ---------------------------------------------------------------------- Cuando le dije si querÃa bailar conmigo Se puso a hablar de Jung, de Freud y Lacan Mi idiosincracia le causaba mucha gracia Me dijo al girar la cumbiera intelectual
Dec 05 2009
Leandro Lucarella, el 5 de diciembre a las 13:07 me escribiste:Walter Bright, el 4 de diciembre a las 20:05 me escribiste:Thanks for the tagging :) -- Leandro Lucarella (AKA luca) http://llucax.com.ar/ ---------------------------------------------------------------------- GPG Key: 5F5A8D05 (F8CD F9A7 BF00 5431 4145 104C 949E BFB6 5F5A 8D05) ---------------------------------------------------------------------- If you do not change your beliefs Your life will always be like thisProbably the biggest thing is opDispatch! http://www.digitalmars.com/d/1.0/changelog.html http://ftp.digitalmars.com/dmd.1.053.zip http://www.digitalmars.com/d/2.0/changelog.html http://ftp.digitalmars.com/dmd.2.037.zip Many thanks to the numerous people who contributed to this update.Great! Can you tag the new releases? (and maybe the old ones too ;) This should be enough: svn cp http://svn.dsource.org/projects/dmd/branches/dmd-1.x http://svn.dsource.org/projects/dmd/tags/dmd-1.053 svn cp http://svn.dsource.org/projects/dmd/trunk http://svn.dsource.org/projects/dmd/tags/dmd-2.037
Dec 08 2009
On Sat, 05 Dec 2009 05:05:13 +0100, Walter Bright <newshound1 digitalmars.com> wrote:Probably the biggest thing is opDispatch! http://www.digitalmars.com/d/1.0/changelog.html http://ftp.digitalmars.com/dmd.1.053.zip http://www.digitalmars.com/d/2.0/changelog.html http://ftp.digitalmars.com/dmd.2.037.zip Many thanks to the numerous people who contributed to this update.I get a compile error: std\conv.d(2506): Error: undefined identifier module traits.staticIndexOf Line 2506 in std.conv should be changed from if (std.traits.staticIndexOf!(Unqual!S, uint, ulong) >= 0 && isSomeString!T) to if (std.typetuple.staticIndexOf!(Unqual!S, uint, ulong) >= 0 && isSomeString!T) -- Simen
Dec 05 2009
Simen kjaeraas wrote:I get a compile error: std\conv.d(2506): Error: undefined identifier module traits.staticIndexOf Line 2506 in std.conv should be changed from if (std.traits.staticIndexOf!(Unqual!S, uint, ulong) >= 0 && isSomeString!T) to if (std.typetuple.staticIndexOf!(Unqual!S, uint, ulong) >= 0 && isSomeString!T)That change is already in the release. Perhaps you have an old version?
Dec 05 2009
On Sun, 06 Dec 2009 03:35:42 +0100, Walter Bright <newshound1 digitalmars.com> wrote:Simen kjaeraas wrote:So it would indeed seem. Sorry about the noise. -- SimenI get a compile error: std\conv.d(2506): Error: undefined identifier module traits.staticIndexOf Line 2506 in std.conv should be changed from if (std.traits.staticIndexOf!(Unqual!S, uint, ulong) >= 0 && isSomeString!T) to if (std.typetuple.staticIndexOf!(Unqual!S, uint, ulong) >= 0 && isSomeString!T)That change is already in the release. Perhaps you have an old version?
Dec 05 2009
Walter Bright wrote:Probably the biggest thing is opDispatch! http://www.digitalmars.com/d/1.0/changelog.html http://ftp.digitalmars.com/dmd.1.053.zip http://www.digitalmars.com/d/2.0/changelog.html http://ftp.digitalmars.com/dmd.2.037.zip Many thanks to the numerous people who contributed to this update.Thanks, guys! This is a pretty awesome release. :) I especially like that opPow made it in, and also the changes to std.math look very useful. I have one question regarding the latter: What exactly is supposed to happen when I run the example in the FloatingPointControl documentation? Is the program supposed to crash with some informative error message, or do I have to do something to catch the exception? Currently, nothing out of the ordinary happens when I run it on my computer -- y just becomes NaN when x is NaN. -Lars
Dec 07 2009
Lars T. Kyllingstad wrote:Walter Bright wrote:Aargh, the example's wrong. DMD optimizes the assignment into a blit. Try setting y = x*2.Probably the biggest thing is opDispatch! http://www.digitalmars.com/d/1.0/changelog.html http://ftp.digitalmars.com/dmd.1.053.zip http://www.digitalmars.com/d/2.0/changelog.html http://ftp.digitalmars.com/dmd.2.037.zip Many thanks to the numerous people who contributed to this update.Thanks, guys! This is a pretty awesome release. :) I especially like that opPow made it in, and also the changes to std.math look very useful. I have one question regarding the latter: What exactly is supposed to happen when I run the example in the FloatingPointControl documentation? Is the program supposed to crash with some informative error message, or do I have to do something to catch the exception? Currently, nothing out of the ordinary happens when I run it on my computer -- y just becomes NaN when x is NaN.
Dec 07 2009
Don wrote:Lars T. Kyllingstad wrote:I take that back. The example is correct. This code... ----- import std.math; void main() { real x; FloatingPointControl fpctrl; fpctrl.enableExceptions(FloatingPointControl.severeExceptions); double y = x*3.0; } ---- results in: object.Error: Invalid Floating Point Operation However, it seems that the compiler is no longer creating variables of type double and float as signalling NaNs. That's a bug.Walter Bright wrote:Aargh, the example's wrong. DMD optimizes the assignment into a blit. Try setting y = x*2.Probably the biggest thing is opDispatch! http://www.digitalmars.com/d/1.0/changelog.html http://ftp.digitalmars.com/dmd.1.053.zip http://www.digitalmars.com/d/2.0/changelog.html http://ftp.digitalmars.com/dmd.2.037.zip Many thanks to the numerous people who contributed to this update.Thanks, guys! This is a pretty awesome release. :) I especially like that opPow made it in, and also the changes to std.math look very useful. I have one question regarding the latter: What exactly is supposed to happen when I run the example in the FloatingPointControl documentation? Is the program supposed to crash with some informative error message, or do I have to do something to catch the exception? Currently, nothing out of the ordinary happens when I run it on my computer -- y just becomes NaN when x is NaN.
Dec 07 2009
Don wrote:Don wrote:OK, thanks for explaining. :) -LarsLars T. Kyllingstad wrote:I take that back. The example is correct. This code... ----- import std.math; void main() { real x; FloatingPointControl fpctrl; fpctrl.enableExceptions(FloatingPointControl.severeExceptions); double y = x*3.0; } ---- results in: object.Error: Invalid Floating Point Operation However, it seems that the compiler is no longer creating variables of type double and float as signalling NaNs. That's a bug.Walter Bright wrote:Aargh, the example's wrong. DMD optimizes the assignment into a blit. Try setting y = x*2.Probably the biggest thing is opDispatch! http://www.digitalmars.com/d/1.0/changelog.html http://ftp.digitalmars.com/dmd.1.053.zip http://www.digitalmars.com/d/2.0/changelog.html http://ftp.digitalmars.com/dmd.2.037.zip Many thanks to the numerous people who contributed to this update.Thanks, guys! This is a pretty awesome release. :) I especially like that opPow made it in, and also the changes to std.math look very useful. I have one question regarding the latter: What exactly is supposed to happen when I run the example in the FloatingPointControl documentation? Is the program supposed to crash with some informative error message, or do I have to do something to catch the exception? Currently, nothing out of the ordinary happens when I run it on my computer -- y just becomes NaN when x is NaN.
Dec 07 2009
Lars T. Kyllingstad wrote:Don wrote:I had a further look at this. The compiler *is* creating doubles and floats as signalling NaNs. Turns out, that there are slight differences between processors in the way they treat signalling NaNs, especially between Intel vs AMD. Intel Core2 triggers SNANs when loading floats & doubles, but *doesn't* trigger for 80-bit SNANs. The Pentium M that I did most of my testing on, didn't trigger for any of them. AMD's docs say that it triggers for all of them. Won't be too hard to fix.Don wrote:OK, thanks for explaining. :) -LarsLars T. Kyllingstad wrote:I take that back. The example is correct. This code... ----- import std.math; void main() { real x; FloatingPointControl fpctrl; fpctrl.enableExceptions(FloatingPointControl.severeExceptions); double y = x*3.0; } ---- results in: object.Error: Invalid Floating Point Operation However, it seems that the compiler is no longer creating variables of type double and float as signalling NaNs. That's a bug.Walter Bright wrote:Aargh, the example's wrong. DMD optimizes the assignment into a blit. Try setting y = x*2.Probably the biggest thing is opDispatch! http://www.digitalmars.com/d/1.0/changelog.html http://ftp.digitalmars.com/dmd.1.053.zip http://www.digitalmars.com/d/2.0/changelog.html http://ftp.digitalmars.com/dmd.2.037.zip Many thanks to the numerous people who contributed to this update.Thanks, guys! This is a pretty awesome release. :) I especially like that opPow made it in, and also the changes to std.math look very useful. I have one question regarding the latter: What exactly is supposed to happen when I run the example in the FloatingPointControl documentation? Is the program supposed to crash with some informative error message, or do I have to do something to catch the exception? Currently, nothing out of the ordinary happens when I run it on my computer -- y just becomes NaN when x is NaN.
Dec 10 2009
Don wrote:I had a further look at this. The compiler *is* creating doubles and floats as signalling NaNs. Turns out, that there are slight differences between processors in the way they treat signalling NaNs, especially between Intel vs AMD. Intel Core2 triggers SNANs when loading floats & doubles, but *doesn't* trigger for 80-bit SNANs. The Pentium M that I did most of my testing on, didn't trigger for any of them. AMD's docs say that it triggers for all of them. Won't be too hard to fix.How do we fix the CPU? ;-)
Dec 10 2009
On Thu, 10 Dec 2009, Walter Bright wrote:Don wrote:A soldering iron with a really sharp point? Or maybe a sledgehammer.I had a further look at this. The compiler *is* creating doubles and floats as signalling NaNs. Turns out, that there are slight differences between processors in the way they treat signalling NaNs, especially between Intel vs AMD. Intel Core2 triggers SNANs when loading floats & doubles, but *doesn't* trigger for 80-bit SNANs. The Pentium M that I did most of my testing on, didn't trigger for any of them. AMD's docs say that it triggers for all of them. Won't be too hard to fix.How do we fix the CPU? ;-)
Dec 10 2009
Brad Roberts wrote:On Thu, 10 Dec 2009, Walter Bright wrote:I was thinking 220VAC might help!Don wrote:A soldering iron with a really sharp point? Or maybe a sledgehammer.I had a further look at this. The compiler *is* creating doubles and floats as signalling NaNs. Turns out, that there are slight differences between processors in the way they treat signalling NaNs, especially between Intel vs AMD. Intel Core2 triggers SNANs when loading floats & doubles, but *doesn't* trigger for 80-bit SNANs. The Pentium M that I did most of my testing on, didn't trigger for any of them. AMD's docs say that it triggers for all of them. Won't be too hard to fix.How do we fix the CPU? ;-)
Dec 10 2009
== Quote from Walter Bright (newshound1 digitalmars.com)'s articleBrad Roberts wrote:Yep, on that voltage 10 GHz overclocks seems possible.On Thu, 10 Dec 2009, Walter Bright wrote:I was thinking 220VAC might help!Don wrote:A soldering iron with a really sharp point? Or maybe a sledgehammer.I had a further look at this. The compiler *is* creating doubles and floats as signalling NaNs. Turns out, that there are slight differences between processors in the way they treat signalling NaNs, especially between Intel vs AMD. Intel Core2 triggers SNANs when loading floats & doubles, but *doesn't* trigger for 80-bit SNANs. The Pentium M that I did most of my testing on, didn't trigger for any of them. AMD's docs say that it triggers for all of them. Won't be too hard to fix.How do we fix the CPU? ;-)
Dec 10 2009
Hello Walter,That one way to be totally sure what is wrong with your CPU.I was thinking 220VAC might help!How do we fix the CPU? ;-)
Dec 11 2009
Walter Bright wrote:Don wrote:Yeah. Actually the CPU problem is an accepts-invalid bug. It worked on my Pentium M, but it shouldn't have. The problem is what DMD does to the "uninitialized assignments". float x; gets changed into float x = double.snan; and is implemented with fld float.snan; fstp x; The FLD is triggering the snan. They should be changed into mov EAX, reinterpret_cast<int>(float.snan); mov x, EAX; There's another reason for doing this. On Pentium 4, x87 NaNs are incredibly slow. More than 250 cycles!!! On AMD and on Pentium 4 SSE2, they are the same as any other value (about 0.5 cycles). Yet another reason to hate the P4. But still, this is such a horrific performance killer that we ought to avoid it.I had a further look at this. The compiler *is* creating doubles and floats as signalling NaNs. Turns out, that there are slight differences between processors in the way they treat signalling NaNs, especially between Intel vs AMD. Intel Core2 triggers SNANs when loading floats & doubles, but *doesn't* trigger for 80-bit SNANs. The Pentium M that I did most of my testing on, didn't trigger for any of them. AMD's docs say that it triggers for all of them. Won't be too hard to fix.How do we fix the CPU? ;-)
Dec 11 2009
Don wrote:Yeah. Actually the CPU problem is an accepts-invalid bug. It worked on my Pentium M, but it shouldn't have. The problem is what DMD does to the "uninitialized assignments". float x; gets changed into float x = double.snan; and is implemented with fld float.snan; fstp x; The FLD is triggering the snan. They should be changed into mov EAX, reinterpret_cast<int>(float.snan); mov x, EAX;Sounds like a good idea.There's another reason for doing this. On Pentium 4, x87 NaNs are incredibly slow. More than 250 cycles!!! On AMD and on Pentium 4 SSE2, they are the same as any other value (about 0.5 cycles). Yet another reason to hate the P4. But still, this is such a horrific performance killer that we ought to avoid it.I had no idea that was the case!
Dec 11 2009
Walter Bright wrote:Don wrote:I only just discovered it. Every documentation I've seen just said "These [cycle count] values are for normal operands. NaNs, infinities, and denormals may increase cycle counts considerably." I found a blog of someone who'd actually measured it.Yeah. Actually the CPU problem is an accepts-invalid bug. It worked on my Pentium M, but it shouldn't have. The problem is what DMD does to the "uninitialized assignments". float x; gets changed into float x = double.snan; and is implemented with fld float.snan; fstp x; The FLD is triggering the snan. They should be changed into mov EAX, reinterpret_cast<int>(float.snan); mov x, EAX;Sounds like a good idea.There's another reason for doing this. On Pentium 4, x87 NaNs are incredibly slow. More than 250 cycles!!! On AMD and on Pentium 4 SSE2, they are the same as any other value (about 0.5 cycles). Yet another reason to hate the P4. But still, this is such a horrific performance killer that we ought to avoid it.I had no idea that was the case!
Dec 11 2009
On Fri, Dec 11, 2009 at 9:34 PM, Don <nospam nospam.com> wrote:Walter Bright wrote:I experienced it in a fluid sim I was working on in grad school. NaNs were creeping in and performance was terrible. I thought it was two problems till I got rid of the NaNs and suddenly performance was ok too. --bbDon wrote:I only just discovered it. Every documentation I've seen just said "These [cycle count] values are for normal operands. NaNs, infinities, and denormals may increase cycle counts considerably." I found a blog of someone who'd actually measured it.Yeah. Actually the CPU problem is an accepts-invalid bug. It worked on my Pentium M, but it shouldn't have. The problem is what DMD does to the "uninitialized assignments". float x; gets changed into float x = double.snan; and is implemented with fld float.snan; fstp x; The FLD is triggering the snan. They should be changed into mov EAX, reinterpret_cast<int>(float.snan); mov x, EAX;Sounds like a good idea.There's another reason for doing this. On Pentium 4, x87 NaNs are incredibly slow. More than 250 cycles!!! On AMD and on Pentium 4 SSE2, they are the same as any other value (about 0.5 cycles). Yet another reason to hate the P4. But still, this is such a horrific performance killer that we ought to avoid it.I had no idea that was the case!
Dec 12 2009
Bill Baxter wrote:On Fri, Dec 11, 2009 at 9:34 PM, Don <nospam nospam.com> wrote:Almost same here. Program was amazingly slow until I figured there were NaNs involved. It would be great if we could eliminate that behavior. AndreiWalter Bright wrote:I experienced it in a fluid sim I was working on in grad school. NaNs were creeping in and performance was terrible. I thought it was two problems till I got rid of the NaNs and suddenly performance was ok too. --bbDon wrote:I only just discovered it. Every documentation I've seen just said "These [cycle count] values are for normal operands. NaNs, infinities, and denormals may increase cycle counts considerably." I found a blog of someone who'd actually measured it.Yeah. Actually the CPU problem is an accepts-invalid bug. It worked on my Pentium M, but it shouldn't have. The problem is what DMD does to the "uninitialized assignments". float x; gets changed into float x = double.snan; and is implemented with fld float.snan; fstp x; The FLD is triggering the snan. They should be changed into mov EAX, reinterpret_cast<int>(float.snan); mov x, EAX;Sounds like a good idea.There's another reason for doing this. On Pentium 4, x87 NaNs are incredibly slow. More than 250 cycles!!! On AMD and on Pentium 4 SSE2, they are the same as any other value (about 0.5 cycles). Yet another reason to hate the P4. But still, this is such a horrific performance killer that we ought to avoid it.I had no idea that was the case!
Dec 12 2009
On Fri, 04 Dec 2009 20:05:13 -0800, Walter Bright wrote:Probably the biggest thing is opDispatch!Sounds great :) But I think there's a minor typo here: http://www.digitalmars.com/d/2.0/operatoroverloading.html#Dispatch class C { void opDispatch(string s)(int i) { writefln("S.opDispatch('%s', %s)", s, i); The writefln should be C.opDispatch Apologies if already reported elsewhere...
Dec 08 2009
Nick Treleaven wrote:Apologies if already reported elsewhere...Nope. Thanks! Fixed.
Dec 08 2009