April 07, 2014 Re: Why isn't the array lenght property an lvalue? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Justin Whear | On Monday, 7 April 2014 at 20:19:30 UTC, Justin Whear wrote:
> On Mon, 07 Apr 2014 20:14:13 +0000, Jeroen Bollen wrote:
>
>> On Monday, 7 April 2014 at 20:12:48 UTC, Justin Whear wrote:
>>> On Mon, 07 Apr 2014 19:13:30 +0000, Jeroen Bollen wrote:
>>>
>>>> When I have myarray.length, why isn't that considered an lvalue,
>>>> and as a result, why cannot I get a pointer to it?
>>>>
>>>> It seems kinda dumb, I understand it cannot be changed manually,
>>>> but surely you should be able to get a const(type)* from it?
>>>
>>> I believe `length` is implemented as a property function,
>>> though I can't find the source for the life of me.
>>
>> Then you still should be able to get a pointer of the result. I was also
>> considering it to be a @property function, as indeed that'd explain this
>> behaviour, but it still doesn't make sense to not allow it. After all,
>> length is just a variable.
>
> Unless the length function returns by ref, the result is an rvalue and
> you won't be able to take a reference.
Why doesn't it return by reference? Seems kinda dumb.
|
April 07, 2014 Re: Why isn't the array lenght property an lvalue? | ||||
---|---|---|---|---|
| ||||
Posted in reply to MrSmith | On Mon, 07 Apr 2014 16:30:13 -0400, MrSmith <mrsmith33@yandex.ru> wrote: > On Monday, 7 April 2014 at 19:58:21 UTC, Jeroen Bollen wrote: >> On Monday, 7 April 2014 at 19:56:38 UTC, MrSmith wrote: >>> On Monday, 7 April 2014 at 19:23:45 UTC, Jeroen Bollen wrote: >>>> On Monday, 7 April 2014 at 19:13:31 UTC, Jeroen Bollen wrote: >>>>> When I have myarray.length, why isn't that considered an lvalue, and as a result, why cannot I get a pointer to it? >>>>> >>>>> It seems kinda dumb, I understand it cannot be changed manually, but surely you should be able to get a const(type)* from it? >>>> >>>> Well type would be ulong, so const(ulong)* >>> >>> Array length is size_t which is uint on x86 and ulong on x86_64. >> >> Alright, but why can't you get a pointer to it? > > I've tried, but no luck here > http://dpaste.dzfl.pl/be526902ef4f You had the elements backwards: http://dpaste.dzfl.pl/8b5067aaf9d4 -Steve |
April 07, 2014 Re: Why isn't the array lenght property an lvalue? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Steven Schveighoffer | On Monday, 7 April 2014 at 20:43:09 UTC, Steven Schveighoffer wrote: > On Mon, 07 Apr 2014 16:30:13 -0400, MrSmith <mrsmith33@yandex.ru> wrote: > >> On Monday, 7 April 2014 at 19:58:21 UTC, Jeroen Bollen wrote: >>> On Monday, 7 April 2014 at 19:56:38 UTC, MrSmith wrote: >>>> On Monday, 7 April 2014 at 19:23:45 UTC, Jeroen Bollen wrote: >>>>> On Monday, 7 April 2014 at 19:13:31 UTC, Jeroen Bollen wrote: >>>>>> When I have myarray.length, why isn't that considered an lvalue, and as a result, why cannot I get a pointer to it? >>>>>> >>>>>> It seems kinda dumb, I understand it cannot be changed manually, but surely you should be able to get a const(type)* from it? >>>>> >>>>> Well type would be ulong, so const(ulong)* >>>> >>>> Array length is size_t which is uint on x86 and ulong on x86_64. >>> >>> Alright, but why can't you get a pointer to it? >> >> I've tried, but no luck here >> http://dpaste.dzfl.pl/be526902ef4f > Cool! So, it is not a property function but actual size_t? How would it grow then? > You had the elements backwards: > > http://dpaste.dzfl.pl/8b5067aaf9d4 > > -Steve |
April 07, 2014 Re: Why isn't the array lenght property an lvalue? | ||||
---|---|---|---|---|
| ||||
Posted in reply to MrSmith | On Mon, 07 Apr 2014 17:18:09 -0400, MrSmith <mrsmith33@yandex.ru> wrote:
> Cool! So, it is not a property function but actual size_t? How would it grow then?
The array slice structure is a length followed by a pointer, your structure was a pointer followed by a length.
It still is a property function to set the length.
-Steve
|
April 08, 2014 Re: Why isn't the array lenght property an lvalue? | ||||
---|---|---|---|---|
| ||||
Posted in reply to MrSmith | On 7 April 2014 22:18, MrSmith <mrsmith33@yandex.ru> wrote:
> On Monday, 7 April 2014 at 20:43:09 UTC, Steven Schveighoffer wrote:
>
>> On Mon, 07 Apr 2014 16:30:13 -0400, MrSmith <mrsmith33@yandex.ru> wrote:
>>
>>> On Monday, 7 April 2014 at 19:58:21 UTC, Jeroen Bollen wrote:
>>>>
>>>> On Monday, 7 April 2014 at 19:56:38 UTC, MrSmith wrote:
>>>>>
>>>>> On Monday, 7 April 2014 at 19:23:45 UTC, Jeroen Bollen wrote:
>>>>>>
>>>>>> On Monday, 7 April 2014 at 19:13:31 UTC, Jeroen Bollen wrote:
>>>>>>>
>>>>>>> When I have myarray.length, why isn't that considered an lvalue, and as a result, why cannot I get a pointer to it?
>>>>>>>
>>>>>>> It seems kinda dumb, I understand it cannot be changed manually, but surely you should be able to get a const(type)* from it?
>>>>>>
>>>>>>
>>>>>> Well type would be ulong, so const(ulong)*
>>>>>
>>>>>
>>>>> Array length is size_t which is uint on x86 and ulong on x86_64.
>>>>
>>>>
>>>> Alright, but why can't you get a pointer to it?
>>>
>>>
>>> I've tried, but no luck here http://dpaste.dzfl.pl/be526902ef4f
>>
>>
>
> Cool! So, it is not a property function but actual size_t? How would it grow then?
The compiler detects the pattern and invokes a runtime call to set the new array length. If the new size is greater than the current allocated pool for the array, then it's realloc'd on the GC.
|
Copyright © 1999-2021 by the D Language Foundation