digitalmars.D - Small feature request
- Koroskin Denis (13/13) Mar 29 2008 Look at this class.
- Kevin Bealer (13/27) Mar 29 2008 I think this is intended, but you can do this:
-
Koroskin Denis
(16/23)
Mar 29 2008
On Sat, 29 Mar 2008 21:17:40 +0300, Kevin Bealer
... - Jason House (2/16) Mar 29 2008 .init used to do what you want but was changed along the way...
- Janice Caron (7/13) Mar 29 2008 In the current (D2.012) regime, that should be
-
Koroskin Denis
(5/19)
Mar 29 2008
On Sat, 29 Mar 2008 23:01:26 +0300, Janice Caron
- Matti Niemenmaa (5/19) Mar 29 2008 This is one of the few post-1.0 changes that broke existing code. I real...
Look at this class. class Buffer { private int bufferSize =3D 4096; private void[bufferSize.init] buffer =3D void; } What's the capacity of buffer upon object construction? I expect that buffer.length =3D=3D 4096, since bufferSize =3D=3D 4096, b= ut get = buffer.length =3D=3D 0, since bufferSize.init =3D=3D int.init. It works not as expected and confuses a little. Do I have any chanse thi= s = will be fixed anytime, or is it intended?
Mar 29 2008
Koroskin Denis Wrote:Look at this class. class Buffer { private int bufferSize = 4096; private void[bufferSize.init] buffer = void; } What's the capacity of buffer upon object construction? I expect that buffer.length == 4096, since bufferSize == 4096, but get buffer.length == 0, since bufferSize.init == int.init. It works not as expected and confuses a little. Do I have any chanse this will be fixed anytime, or is it intended?I think this is intended, but you can do this: class Buffer { typedef int BufSize_t = 4096; BufSize_t bufsize; char[BufSize_t.init] buffer; }; The code in both cases seems confusing, since you could just use: class Buffer { char[4096] buffer; } It's a static buffer so the size can't change in any case. Kevin
Mar 29 2008
On Sat, 29 Mar 2008 21:17:40 +0300, Kevin Bealer <kevinbealer gmail.com>= = wrote:Koroskin Denis Wrote: The code in both cases seems confusing, since you could just use: class Buffer { char[4096] buffer; } It's a static buffer so the size can't change in any case. KevinYes, but now it looks like a magic number to me. Moreover, I prefer usin= g = constant variables instead of buffer.length every time I need its capaci= ty. Anyway, my point is that if I initialize my variable like this: T someVariable =3D someConstantExpression; then someVariable.init should evaluate to someConstantExpression hereaft= er. It does't break current rules, since T someOtherVariable; is identical to: T someOtherVariable =3D T.init; and therefore someOtherVariable.init =3D=3D T.init.
Mar 29 2008
Koroskin Denis wrote:Look at this class. class Buffer { private int bufferSize = 4096; private void[bufferSize.init] buffer = void; } What's the capacity of buffer upon object construction? I expect that buffer.length == 4096, since bufferSize == 4096, but get buffer.length == 0, since bufferSize.init == int.init. It works not as expected and confuses a little. Do I have any chanse this will be fixed anytime, or is it intended?.init used to do what you want but was changed along the way...
Mar 29 2008
On 29/03/2008, Koroskin Denis <2korden gmail.com> wrote:Look at this class. class Buffer { private int bufferSize = 4096; private void[bufferSize.init] buffer = void; }In the current (D2.012) regime, that should be class Buffer { private enum bufferSize = 4096; private void[bufferSize] buffer = void; }
Mar 29 2008
On Sat, 29 Mar 2008 23:01:26 +0300, Janice Caron <caron800 googlemail.co= m> = wrote:On 29/03/2008, Koroskin Denis <2korden gmail.com> wrote:I would declare it as "static const int" if I needed a constant value. An example is probably bad but I needed a /mutable/ variable by design.Look at this class. class Buffer { private int bufferSize =3D 4096; private void[bufferSize.init] buffer =3D void; }In the current (D2.012) regime, that should be class Buffer { private enum bufferSize =3D 4096; private void[bufferSize] buffer =3D void; }
Mar 29 2008
Koroskin Denis wrote:Look at this class. class Buffer { private int bufferSize = 4096; private void[bufferSize.init] buffer = void; } What's the capacity of buffer upon object construction? I expect that buffer.length == 4096, since bufferSize == 4096, but get buffer.length == 0, since bufferSize.init == int.init. It works not as expected and confuses a little. Do I have any chanse this will be fixed anytime, or is it intended?This is one of the few post-1.0 changes that broke existing code. I really wish it were changed back, but I doubt it will be. -- E-mail address: matti.niemenmaa+news, domain is iki (DOT) fi
Mar 29 2008