digitalmars.D.learn - Little quiz
- bearophile (13/13) Mar 24 2011 A little quiz for people here: guess the output of this little D2 progra...
- spir (7/18) Mar 24 2011 lol, would never haver guessed
- Jesse Phillips (11/26) Mar 24 2011 Starting from main. As we are performing a foreach over a tuple this wil...
- Jacob Carlborg (5/18) Mar 25 2011 I would guess it prints the values of all the fields in the struct
- bearophile (4/6) Mar 25 2011 That was of course my purpose, because tuples are a way to implement mul...
- Jacob Carlborg (6/12) Mar 25 2011 I'm not just meaning the expected values you pass in to the function,
- Kagamin (2/21) Mar 25 2011 According to docs tupleof returns type tuple, but TypeTuple doesn't seem...
- Kai Meyer (25/38) Mar 28 2011 That's pretty cool :) Seems like we should be able to expect the same
- bearophile (4/5) Mar 28 2011 Thank you. From the output of this line of code the problem seems not ca...
A little quiz for people here: guess the output of this little D2 program (it
compiles correctly and doesn't crash at run time, so it's a fair question):
import std.typecons: tuple;
import std.c.stdio: printf;
auto foo() {
printf("foo\n");
return tuple(1, 2);
}
void main() {
foreach (x; foo().tupleof)
printf("%d\n", x);
}
Bye,
bearophile
Mar 24 2011
On 03/25/2011 01:50 AM, bearophile wrote:
A little quiz for people here: guess the output of this little D2 program (it
compiles correctly and doesn't crash at run time, so it's a fair question):
import std.typecons: tuple;
import std.c.stdio: printf;
auto foo() {
printf("foo\n");
return tuple(1, 2);
}
void main() {
foreach (x; foo().tupleof)
printf("%d\n", x);
}
lol, would never haver guessed
Denis
--
_________________
vita es estrany
spir.wikidot.com
Mar 24 2011
bearophile Wrote:
A little quiz for people here: guess the output of this little D2 program (it
compiles correctly and doesn't crash at run time, so it's a fair question):
import std.typecons: tuple;
import std.c.stdio: printf;
auto foo() {
printf("foo\n");
return tuple(1, 2);
}
void main() {
foreach (x; foo().tupleof)
printf("%d\n", x);
}
Starting from main. As we are performing a foreach over a tuple this will need
to happen at compilation. As their are many bugs with compile time foreach I
would think this code evaluates to nothing and thus the program prints nothing.
However if that is working then I would expect foo() to be executed at
compile-time which would mean 'foo' might be printed during compilation. As
tupleof is supposed to return a type tuple, I'm unsure what gibberish printing
it as a decimal would do.
The other likely possibility is that the foreach is unrolled into code like:
x = foo().tupleof[0]
print...
x = foo().tupleof[1]
print...
where .tupleof is some other fancy runtime thing. In this case you would get
foo\nnumber\nfoo\nnumber...
------
So yeah, from that code I have no idea what it is supposed to do. But I am not
surprised by its behavior.
Mar 24 2011
On 2011-03-25 01:50, bearophile wrote:
A little quiz for people here: guess the output of this little D2 program (it
compiles correctly and doesn't crash at run time, so it's a fair question):
import std.typecons: tuple;
import std.c.stdio: printf;
auto foo() {
printf("foo\n");
return tuple(1, 2);
}
void main() {
foreach (x; foo().tupleof)
printf("%d\n", x);
}
Bye,
bearophile
I would guess it prints the values of all the fields in the struct
returned by "tuple".
--
/Jacob Carlborg
Mar 25 2011
Jacob Carlborg:I would guess it prints the values of all the fields in the struct returned by "tuple".That was of course my purpose, because tuples are a way to implement multiple return values, and in some situations I want to print all the items of such return tuple, on separated lines, for debugging purposes, etc. But unfortunately (for me too) that's not the right answer. Try again... I have found a little surprise. Bye, bearophile
Mar 25 2011
On 2011-03-25 12:32, bearophile wrote:Jacob Carlborg:I'm not just meaning the expected values you pass in to the function, I'm also referring to any additional fields that might be present in the struct. -- /Jacob CarlborgI would guess it prints the values of all the fields in the struct returned by "tuple".That was of course my purpose, because tuples are a way to implement multiple return values, and in some situations I want to print all the items of such return tuple, on separated lines, for debugging purposes, etc. But unfortunately (for me too) that's not the right answer. Try again... I have found a little surprise. Bye, bearophile
Mar 25 2011
bearophile Wrote:
A little quiz for people here: guess the output of this little D2 program (it
compiles correctly and doesn't crash at run time, so it's a fair question):
import std.typecons: tuple;
import std.c.stdio: printf;
auto foo() {
printf("foo\n");
return tuple(1, 2);
}
void main() {
foreach (x; foo().tupleof)
printf("%d\n", x);
}
Bye,
bearophile
According to docs tupleof returns type tuple, but TypeTuple doesn't seem to be
iteratable.
Mar 25 2011
On 03/24/2011 06:50 PM, bearophile wrote:
A little quiz for people here: guess the output of this little D2 program (it
compiles correctly and doesn't crash at run time, so it's a fair question):
import std.typecons: tuple;
import std.c.stdio: printf;
auto foo() {
printf("foo\n");
return tuple(1, 2);
}
void main() {
foreach (x; foo().tupleof)
printf("%d\n", x);
}
Bye,
bearophile
That's pretty cool :) Seems like we should be able to expect the same
behavior in all of these, but that doesn't appear to be the case at all.
import std.typecons: tuple;
import std.c.stdio: printf;
auto foo() {
printf("foo\n");
return tuple(1, 2);
}
void main() {
printf("-----\n");
foreach (x; foo().tupleof)
printf("%d\n", x);
printf("-----\n");
auto f = foo();
printf("-----\n");
foreach (x; f.tupleof)
printf("%d\n", x);
printf("-----\n");
auto f2 = foo().tupleof;
printf("-----\n");
foreach (x; f2)
printf("%d\n", x);
printf("-----\n");
}
Mar 28 2011
Kai Meyer:
auto f2 = foo().tupleof;
Thank you. From the output of this line of code the problem seems not caused by
the static foreach.
Bye,
bearophile
Mar 28 2011









spir <denis.spir gmail.com> 