April 07, 2014
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
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
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
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
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.
1 2
Next ›   Last »