Thread overview
DMD2, Phobos: striding range
Mar 08, 2010
Mihail Strashun
Mar 08, 2010
Mihail Strashun
Mar 08, 2010
Philippe Sigaud
Mar 26, 2010
Mihail Strashun
Mar 26, 2010
Philippe Sigaud
March 08, 2010
Following simple program fails to compile with latest DMD 2.041 (In fact it fails to compile with any dmd2 version i have tried):

"test.d"
> import std.stdio;
> import std.range;
> import std.algorithm;
>
> int main()
> {
>   auto test = stride( iota(0,10,1) , 2 );
>   return 0;
> }

Output:
[mist@mistwork d]$ dmd -run test.d
/usr/include/d/std/range.d(716): Error: this._input.front() is not an lvalue
/usr/include/d/std/range.d(724): Error: this._input.back() is not an lvalue


Is it a bug? I managed to get stride working only on arrays. If it is the supposed way to work, how can be similar filtering done on ranges?
March 08, 2010
Mihail Strashun wrote:
> Following simple program fails to compile with latest DMD 2.041 (In fact it fails to compile with any dmd2 version i have tried):
> 
> "test.d"
>  > import std.stdio;
>  > import std.range;
>  > import std.algorithm;
>  >
>  > int main()
>  > {
>  >   auto test = stride( iota(0,10,1) , 2 );
>  >   return 0;
>  > }
> 
> Output:
> [mist@mistwork d]$ dmd -run test.d
> /usr/include/d/std/range.d(716): Error: this._input.front() is not an lvalue
> /usr/include/d/std/range.d(724): Error: this._input.back() is not an lvalue
> 
> 
> Is it a bug? I managed to get stride working only on arrays. If it is the supposed way to work, how can be similar filtering done on ranges?


It's definitely a bug.  I've reported it:

http://d.puremagic.com/issues/show_bug.cgi?id=3894

-Lars
March 08, 2010
Thanks!

Lars T. Kyllingstad wrote:
> Mihail Strashun wrote:
>> Following simple program fails to compile with latest DMD 2.041 (In fact it fails to compile with any dmd2 version i have tried):
>>
>> "test.d"
>>  > import std.stdio;
>>  > import std.range;
>>  > import std.algorithm;
>>  >
>>  > int main()
>>  > {
>>  >   auto test = stride( iota(0,10,1) , 2 );
>>  >   return 0;
>>  > }
>>
>> Output:
>> [mist@mistwork d]$ dmd -run test.d
>> /usr/include/d/std/range.d(716): Error: this._input.front() is not an lvalue
>> /usr/include/d/std/range.d(724): Error: this._input.back() is not an lvalue
>>
>>
>> Is it a bug? I managed to get stride working only on arrays. If it is the supposed way to work, how can be similar filtering done on ranges?
> 
> 
> It's definitely a bug.  I've reported it:
> 
> http://d.puremagic.com/issues/show_bug.cgi?id=3894
> 
> -Lars
March 08, 2010
On Mon, Mar 8, 2010 at 13:00, Lars T. Kyllingstad <public@kyllingen.nospamnet> wrote:

> It's definitely a bug.  I've reported it:
>
> http://d.puremagic.com/issues/show_bug.cgi?id=3894


std.range use ref everywhere. I had to comment them out to get any composition to work. But the 'auto ref' feature added a release ago was made to solve this problem, I guess. Full-blown propagation of ref when you can have it, graceful stop when you cannot.

Hmm, I should try this as soon as I won't have a baby sleeping on me...


March 26, 2010
Philippe Sigaud wrote:
> 
> 
> On Mon, Mar 8, 2010 at 13:00, Lars T. Kyllingstad <public@kyllingen.nospamnet> wrote:
> 
>     It's definitely a bug.  I've reported it:
> 
>     http://d.puremagic.com/issues/show_bug.cgi?id=3894
> 
> 
> std.range use ref everywhere. I had to comment them out to get any composition to work. But the 'auto ref' feature added a release ago was made to solve this problem, I guess. Full-blown propagation of ref when you can have it, graceful stop when you cannot.
> 
> Hmm, I should try this as soon as I won't have a baby sleeping on me...
> 

Hm, changing "ref" on lines 716 and 724 to "auto ref" changes nothing. Changing it to simply "auto" seems to solve problem.

How "auto ref" feature is supposed to work? This ( http://www.digitalmars.com/d/2.0/function.html ) description tends to match problem with stride, but as I have just said, it gives same error.
March 26, 2010
On Fri, Mar 26, 2010 at 11:16, Mihail Strashun <m.strashun@gmail.com> wrote:

> Hm, changing "ref" on lines 716 and 724 to "auto ref" changes nothing. Changing it to simply "auto" seems to solve problem.
>
> How "auto ref" feature is supposed to work? This ( http://www.digitalmars.com/d/2.0/function.html ) description tends to match problem with stride, but as I have just said, it gives same error.
>

Then we both do not understand what auto ref functions can do. Or maybe it's still a bit buggy?