digitalmars.D - Function, signatures and tuples
- Russel Winder (35/35) Nov 12 2010 Is there an easy explanation of why I cannot do:
- Andrei Alexandrescu (5/13) Nov 12 2010 Doesn't this help?
- Russel Winder (23/42) Nov 13 2010 I noted in a separate email that:
- Iain Buclaw (2/33) Nov 13 2010 import std.typecons; ?
- Russel Winder (28/29) Nov 13 2010 Hummm... I thought I had put that in but clearly I had not :-(( OK so
- =?UTF-8?B?UGVsbGUgTcOlbnNzb24=?= (4/18) Nov 16 2010 It's not your code, you can work around it with cast(double)delta, or
Is there an easy explanation of why I cannot do: real partialSum ( immutable Tuple ! ( long , long , real ) data ) but instead have to do: real partialSum ( T ... ) ( T data ) to be frank I really don't get this latter which is what compiles -- I have no idea if it works yet there are other problems with my code. Specifically, how do I create an array of tuples? TDPL has little on tuples (p.163 basically) and the online manual has little as well. I tried: auto inputData =3D Tuple ! ( long , long , real ) [ numberOfThreads ] ; but this errors out with: pi_d2_parallelMap.d(26): Error: template instance template 'Tuple' = is not defined pi_d2_parallelMap.d(26): Error: Tuple!(long,long,real) must be an a= rray or pointer type, not void what is worse trying to set values in the array: foreach ( i ; 0 .. numberOfThreads ) { inputData[i] =3D tuple ( 1 += i * sliceSize , ( i + 1 ) * sliceSize , delta ) ; } I get the error: pi_d2_parallelMap.d(27): Error: undefined identifier tuple Please tell me I am being stupid and that I should read some specific reference of TFM :-) Thanks. --=20 Russel. =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D Dr Russel Winder t: +44 20 7585 2200 voip: sip:russel.winder ekiga.n= et 41 Buckmaster Road m: +44 7770 465 077 xmpp: russel russel.org.uk London SW11 1EN, UK w: www.russel.org.uk skype: russel_winder
Nov 12 2010
On 11/12/10 11:13 AM, Russel Winder wrote:Is there an easy explanation of why I cannot do: real partialSum ( immutable Tuple ! ( long , long , real ) data ) but instead have to do: real partialSum ( T ... ) ( T data ) to be frank I really don't get this latter which is what compiles -- I have no idea if it works yet there are other problems with my code. Specifically, how do I create an array of tuples?Doesn't this help? auto tuples = new Tuple!(long, long, real)[128]; Tuple is a type like any other. Andrei
Nov 12 2010
On Fri, 2010-11-12 at 11:15 -0800, Andrei Alexandrescu wrote:On 11/12/10 11:13 AM, Russel Winder wrote:I noted in a separate email that: auto inputData =3D new Tuple ! ( long , long , real ) [ numberOfThreads ] ; causes the error message: pi_d2_parallelMap.d(30): Error: template instance template 'Tuple' = is not defined pi_d2_parallelMap.d(30): Error: Tuple!(long,long,real) is used as a= type =20 Clearly code you think is right and that is expected to work on D 2.050 isn't working for me :-( So either I guess there is a bug in D or, much more likely, I am doing something wrong. --=20 Russel. =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D Dr Russel Winder t: +44 20 7585 2200 voip: sip:russel.winder ekiga.n= et 41 Buckmaster Road m: +44 7770 465 077 xmpp: russel russel.org.uk London SW11 1EN, UK w: www.russel.org.uk skype: russel_winderIs there an easy explanation of why I cannot do: real partialSum ( immutable Tuple ! ( long , long , real ) data ) but instead have to do: real partialSum ( T ... ) ( T data ) to be frank I really don't get this latter which is what compiles -- I have no idea if it works yet there are other problems with my code. Specifically, how do I create an array of tuples?=20 Doesn't this help? =20 auto tuples =3D new Tuple!(long, long, real)[128]; =20 Tuple is a type like any other.
Nov 13 2010
== Quote from Russel Winder (russel russel.org.uk)'s articleOn Fri, 2010-11-12 at 11:15 -0800, Andrei Alexandrescu wrote:import std.typecons; ?On 11/12/10 11:13 AM, Russel Winder wrote:I noted in a separate email that: auto inputData = new Tuple ! ( long , long , real ) [ numberOfThreads ] ; causes the error message: pi_d2_parallelMap.d(30): Error: template instance template 'Tuple' = is not defined pi_d2_parallelMap.d(30): Error: Tuple!(long,long,real) is used as a type Clearly code you think is right and that is expected to work on D 2.050 isn't working for me :-( So either I guess there is a bug in D or, much more likely, I am doing something wrong. -- Russel.Is there an easy explanation of why I cannot do: real partialSum ( immutable Tuple ! ( long , long , real ) data ) but instead have to do: real partialSum ( T ... ) ( T data ) to be frank I really don't get this latter which is what compiles -- I have no idea if it works yet there are other problems with my code. Specifically, how do I create an array of tuples?Doesn't this help? auto tuples = new Tuple!(long, long, real)[128]; Tuple is a type like any other.
Nov 13 2010
On Sat, 2010-11-13 at 08:18 +0000, Iain Buclaw wrote: [ . . . ]import std.typecons; ?Hummm... I thought I had put that in but clearly I had not :-(( OK so that explains the bulk of the problems on this code, I knew it was something stupid on my part, thanks for spotting it. However, now we may be getting to something more serious. The line: foreach ( i ; 0 .. numberOfTasks ) { inputData[i] =3D tuple ( 1 + = i * sliceSize , ( i + 1 ) * sliceSize , delta ) ; } now results in the error: /home/users/russel/lib.Linux.x86_64/DMD2/bin/../../src/phobos/std/t= ypecons.d(662): Error: can only initialize const member _field_field_2 insi= de constructor /home/users/russel/lib.Linux.x86_64/DMD2/bin/../../src/phobos/std/t= ypecons.d(26): Error: template instance std.typecons.tuple!(long,long,immut= able(double)) error instantiating Which at first sight seems to indicate an error in the typecons package of Phobos. On the other hand, it is probably more reasonable to assume I still have something stupid wrong in my code. --=20 Russel. =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D Dr Russel Winder t: +44 20 7585 2200 voip: sip:russel.winder ekiga.n= et 41 Buckmaster Road m: +44 7770 465 077 xmpp: russel russel.org.uk London SW11 1EN, UK w: www.russel.org.uk skype: russel_winder
Nov 13 2010
On 11/13/2010 11:43 AM, Russel Winder wrote:On Sat, 2010-11-13 at 08:18 +0000, Iain Buclaw wrote: [ . . . ]It's not your code, you can work around it with cast(double)delta, or using tuple!(long,long,double) explicitly, I think. Tuple doesn't handle immutable or const really well, yet.import std.typecons; ?Hummm... I thought I had put that in but clearly I had not :-(( OK so that explains the bulk of the problems on this code, I knew it was something stupid on my part, thanks for spotting it. However, now we may be getting to something more serious. The line: foreach ( i ; 0 .. numberOfTasks ) { inputData[i] = tuple ( 1 + i * sliceSize , ( i + 1 ) * sliceSize , delta ) ; } now results in the error: /home/users/russel/lib.Linux.x86_64/DMD2/bin/../../src/phobos/ td/typecons.d(662): Error: can only initialize const member _field_field_2 inside constructor /home/users/russel/lib.Linux.x86_64/DMD2/bin/../../src/phobos std/typecons.d(26): Error: template instance std.typecons.tuple!(long,long,immutable(double)) error instantiating Which at first sight seems to indicate an error in the typecons package of Phobos. On the other hand, it is probably more reasonable to assume I still have something stupid wrong in my code.
Nov 16 2010