Thread overview | |||||||||
---|---|---|---|---|---|---|---|---|---|
|
May 03, 2015 std.random question | ||||
---|---|---|---|---|
| ||||
Feels pretty silly, but I can't compile this: import std.random; auto i = uniform(0, 10); DMD spits this: /usr/include/dmd/phobos/std/random.d(1188): Error: static variable initialized cannot be read at compile time /usr/include/dmd/phobos/std/random.d(1231): called from here: rndGen() /usr/include/dmd/phobos/std/random.d(1231): called from here: uniform(a, b, rndGen()) Perhaps I'm missing something obvious? dmd 2.067.1, openSUSE 13.2 x64 |
May 03, 2015 Re: std.random question | ||||
---|---|---|---|---|
| ||||
Posted in reply to tired_eyes | On Sunday, 3 May 2015 at 08:42:57 UTC, tired_eyes wrote:
> Feels pretty silly, but I can't compile this:
>
>
> import std.random;
> auto i = uniform(0, 10);
>
>
> DMD spits this:
>
> /usr/include/dmd/phobos/std/random.d(1188): Error: static variable initialized cannot be read at compile time
> /usr/include/dmd/phobos/std/random.d(1231): called from here: rndGen()
> /usr/include/dmd/phobos/std/random.d(1231): called from here: uniform(a, b, rndGen())
>
>
> Perhaps I'm missing something obvious?
> dmd 2.067.1, openSUSE 13.2 x64
void main() {
import std.random;
auto i = uniform(0, 10);
}
|
May 03, 2015 Re: std.random question | ||||
---|---|---|---|---|
| ||||
Posted in reply to Dennis Ritchie | On Sunday, 3 May 2015 at 08:48:52 UTC, Dennis Ritchie wrote:
> On Sunday, 3 May 2015 at 08:42:57 UTC, tired_eyes wrote:
>> Feels pretty silly, but I can't compile this:
>>
>>
>> import std.random;
>> auto i = uniform(0, 10);
>>
>>
>> DMD spits this:
>>
>> /usr/include/dmd/phobos/std/random.d(1188): Error: static variable initialized cannot be read at compile time
>> /usr/include/dmd/phobos/std/random.d(1231): called from here: rndGen()
>> /usr/include/dmd/phobos/std/random.d(1231): called from here: uniform(a, b, rndGen())
>>
>>
>> Perhaps I'm missing something obvious?
>> dmd 2.067.1, openSUSE 13.2 x64
>
> void main() {
> import std.random;
> auto i = uniform(0, 10);
> }
Not so simple, unfortunately.
Actual code:
import std.random;
struct Mystruct {
auto id = uniform(0, 10);
}
void main() {
// wahtever
}
..and no luck.
|
May 03, 2015 Re: std.random question | ||||
---|---|---|---|---|
| ||||
Posted in reply to tired_eyes | On Sunday, 3 May 2015 at 09:04:07 UTC, tired_eyes wrote:
> On Sunday, 3 May 2015 at 08:48:52 UTC, Dennis Ritchie wrote:
>> On Sunday, 3 May 2015 at 08:42:57 UTC, tired_eyes wrote:
>>> Feels pretty silly, but I can't compile this:
>>>
>>>
>>> import std.random;
>>> auto i = uniform(0, 10);
>>>
>>>
>>> DMD spits this:
>>>
>>> /usr/include/dmd/phobos/std/random.d(1188): Error: static variable initialized cannot be read at compile time
>>> /usr/include/dmd/phobos/std/random.d(1231): called from here: rndGen()
>>> /usr/include/dmd/phobos/std/random.d(1231): called from here: uniform(a, b, rndGen())
>>>
>>>
>>> Perhaps I'm missing something obvious?
>>> dmd 2.067.1, openSUSE 13.2 x64
>>
>> void main() {
>> import std.random;
>> auto i = uniform(0, 10);
>> }
>
> Not so simple, unfortunately.
> Actual code:
>
>
> import std.random;
>
> struct Mystruct {
> auto id = uniform(0, 10);
> }
>
> void main() {
> // wahtever
> }
>
>
> ..and no luck.
I think it is a bug:
import std.stdio, std.random;
struct Mystruct {
//mixin(`auto id = uniform(0, 10);`);
// Error: static variable initialized cannot be read at compile time
int val;
}
void main() {
Mystruct test;
test.val = uniform(0, 10); // OK
writeln(test.val);
mixin(`auto n = uniform(0, 10);`); // OK
}
|
May 03, 2015 Re: std.random question | ||||
---|---|---|---|---|
| ||||
Posted in reply to Dennis Ritchie | Hmmm. hap.random from http://code.dlang.org/packages/hap behaves exactly the same. |
May 03, 2015 Re: std.random question | ||||
---|---|---|---|---|
| ||||
Posted in reply to Dennis Ritchie | On Sunday, 3 May 2015 at 09:28:40 UTC, Dennis Ritchie wrote:
> On Sunday, 3 May 2015 at 09:04:07 UTC, tired_eyes wrote:
>> On Sunday, 3 May 2015 at 08:48:52 UTC, Dennis Ritchie wrote:
>>> On Sunday, 3 May 2015 at 08:42:57 UTC, tired_eyes wrote:
>>>> Feels pretty silly, but I can't compile this:
>>>>
>>>>
>>>> import std.random;
>>>> auto i = uniform(0, 10);
>>>>
>>>>
>>>> DMD spits this:
>>>>
>>>> /usr/include/dmd/phobos/std/random.d(1188): Error: static variable initialized cannot be read at compile time
>>>> /usr/include/dmd/phobos/std/random.d(1231): called from here: rndGen()
>>>> /usr/include/dmd/phobos/std/random.d(1231): called from here: uniform(a, b, rndGen())
>>>>
>>>>
>>>> Perhaps I'm missing something obvious?
>>>> dmd 2.067.1, openSUSE 13.2 x64
>>>
>>> void main() {
>>> import std.random;
>>> auto i = uniform(0, 10);
>>> }
>>
>> Not so simple, unfortunately.
>> Actual code:
>>
>>
>> import std.random;
>>
>> struct Mystruct {
>> auto id = uniform(0, 10);
>> }
>>
>> void main() {
>> // wahtever
>> }
>>
>>
>> ..and no luck.
>
> I think it is a bug:
No. The aboc code defines a field of Mystruct calld 'id', with a type inferred from the static initializer expression 'uniform(0, 10)'. The problem is that a static initializer is... static! So the expression must be evaluated at compile-time. The uniform generator from std.random cannot be used at compile-time, thus the error.
You could do:
---
import std.random;
struct Mystruct {
int id;
static opCall() {
Mystruct s;
s.id = uniform(0, 10);
return s;
}
}
void main() {
auto s = Mystruct();
// whatever
}
---
|
May 03, 2015 Re: std.random question | ||||
---|---|---|---|---|
| ||||
Posted in reply to biozic | > import std.random;
>
> struct Mystruct {
> int id;
>
> static opCall() {
> Mystruct s;
> s.id = uniform(0, 10);
> return s;
> }
> }
>
> void main() {
> auto s = Mystruct();
> // whatever
> }
> ---
This make sense, thant you for the explanation.
|
Copyright © 1999-2021 by the D Language Foundation