[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: `bytevector-length' doesn't accept a shared array from a bytevector
From: |
Daniel Llorens |
Subject: |
Re: `bytevector-length' doesn't accept a shared array from a bytevector |
Date: |
Tue, 21 Feb 2017 21:07:04 +0100 |
On 21 Feb 2017, at 19:51, Diogo F. S. Ramos <address@hidden> wrote:
>> On 21 Feb 2017, at 14:21, Diogo F. S. Ramos <address@hidden> wrote:
>>
>>> I want to take the length of a shared array, but `bytevector-length'
>>> throws an error claiming the shared array isn't a bytevector, even
>>> though it prints the error argument as one.
>>>
>>> I am using Guile 2.0.11, Debian Stable package 2.0.11+1-9.
>>
>> This is addressed in 2.1, by
>> eb3d623da57e6d31a58d95f932345fb761f9b701. Your example will print
>> #1vu8(0 0 ...) to signify that it's not a bytevector. You can use
>> array-length here.
>
> Thank you.
>
> I didn't realize shared arrays are not bytevectors anymore and wrongly
> assumed bytevector procedures could be applied to arrays, even tho array
> procedures can be applied to bytevectors.
AFAIR bytevector procedures have always failed with actual arrays.
However, the array procedures will return a root vector (a bytevector, an
vector, etc.) whenever it's possible for them to do so. E.g. if you change 7 ->
42 in your example, make-shared-array will return a true bytevector.
(make-typed-array 'vu8 VALUE LENGTH) will always return a bytevector. Yet
another example, typing #1vu8(0 0 ...) in the terminal will print back #vu8(0 0
...), and it is a true bytevector.
I wouldn't rely on this being true in the future, since I don't think it's
documented.