| Thread overview | ||||||
|---|---|---|---|---|---|---|
|
November 13, 2015 std.stdio.writeln should not accept infinite ranges? | ||||
|---|---|---|---|---|
| ||||
The following code compiles and runs:
import std.stdio, std.random;
void main()
{
writeln(rndGen);
}
Since rndGen is an infinite range, this code runs forever. It seems to be that we need to add a check for isInfinite on writeln and other related functions.
Does anybody have a use case where this is actually practical? I don't see a reason for allowing infinite ranges here, considering how easy it is to write "range.take(n)".
| ||||
November 13, 2015 Re: std.stdio.writeln should not accept infinite ranges? | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Xinok | On 11/12/2015 08:18 PM, Xinok wrote:
> The following code compiles and runs:
>
> import std.stdio, std.random;
>
> void main()
> {
> writeln(rndGen);
> }
>
> Since rndGen is an infinite range, this code runs forever. It seems to
> be that we need to add a check for isInfinite on writeln and other
> related functions.
>
> Does anybody have a use case where this is actually practical? I don't
> see a reason for allowing infinite ranges here, considering how easy it
> is to write "range.take(n)".
Piping a program that produces infinite output into less is practical. -- Andrei
| |||
November 13, 2015 Re: std.stdio.writeln should not accept infinite ranges? | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Andrei Alexandrescu | On Friday, 13 November 2015 at 01:19:22 UTC, Andrei Alexandrescu wrote:
> On 11/12/2015 08:18 PM, Xinok wrote:
>> The following code compiles and runs:
>>
>> import std.stdio, std.random;
>>
>> void main()
>> {
>> writeln(rndGen);
>> }
>>
>> Since rndGen is an infinite range, this code runs forever. It seems to
>> be that we need to add a check for isInfinite on writeln and other
>> related functions.
>>
>> Does anybody have a use case where this is actually practical? I don't
>> see a reason for allowing infinite ranges here, considering how easy it
>> is to write "range.take(n)".
>
> Piping a program that produces infinite output into less is practical. -- Andrei
Fair enough. I'm thinking more on the side of safety though and I assume that, more often than not, printing an infinite range is unintentional. Should it be this easy to shoot ourselves in the foot? I'm not saying it should be impossible, but just make it explicit that we intended to print an infinite range.
| |||
November 13, 2015 Re: std.stdio.writeln should not accept infinite ranges? | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Xinok | On 11/12/15 10:21 PM, Xinok wrote:
> On Friday, 13 November 2015 at 01:19:22 UTC, Andrei Alexandrescu wrote:
>> On 11/12/2015 08:18 PM, Xinok wrote:
>>> The following code compiles and runs:
>>>
>>> import std.stdio, std.random;
>>>
>>> void main()
>>> {
>>> writeln(rndGen);
>>> }
>>>
>>> Since rndGen is an infinite range, this code runs forever. It seems to
>>> be that we need to add a check for isInfinite on writeln and other
>>> related functions.
>>>
>>> Does anybody have a use case where this is actually practical? I don't
>>> see a reason for allowing infinite ranges here, considering how easy it
>>> is to write "range.take(n)".
>>
>> Piping a program that produces infinite output into less is practical.
>> -- Andrei
>
> Fair enough. I'm thinking more on the side of safety though and I assume
> that, more often than not, printing an infinite range is unintentional.
> Should it be this easy to shoot ourselves in the foot? I'm not saying it
> should be impossible, but just make it explicit that we intended to
> print an infinite range.
I'm with Andrei on this. It's easy to create infinite loops, this is a pitfall of programming. Luckily, your foot will heal from this for next time.
-Steve
| |||
Copyright © 1999-2021 by the D Language Foundation
Permalink
Reply