On 21 Feb 2017, at 19:51, Diogo F. S. Ramos <d...@riseup.net> wrote:
>> On 21 Feb 2017, at 14:21, Diogo F. S. Ramos <d...@riseup.net> 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.