www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - DMD2, Phobos: striding range

reply Mihail Strashun <m.strashun gmail.com> writes:
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?
Mar 08 2010
parent reply "Lars T. Kyllingstad" <public kyllingen.NOSPAMnet> writes:
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
Mar 08 2010
next sibling parent Mihail Strashun <m.strashun gmail.com> writes:
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
Mar 08 2010
prev sibling parent reply Philippe Sigaud <philippe.sigaud gmail.com> writes:
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...
Mar 08 2010
parent reply Mihail Strashun <m.strashun gmail.com> writes:
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.
Mar 26 2010
parent Philippe Sigaud <philippe.sigaud gmail.com> writes:
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?
Mar 26 2010