guile-devel
[Top][All Lists]
Advanced

[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.




reply via email to

[Prev in Thread] Current Thread [Next in Thread]