The point is to work with binary data, of which the most common type of C strings are one kind.
If you are using libguile in your C code you can use guile strings in your C code and pass them around to avoid the encoding/decoding overhead. Or, the other way around, expose the procedures that work with whatever C string representation your are using to guile. If your latin1 strings contain unicode data they are not latin1. -- Linus Björnstam On Sat, 12 Sep 2020, at 09:49, divoplade wrote: > Hello guile users, > > I am writing a library mixing some scheme code and C code, and I have > two options for interfacing C strings: > 1. Use bytevectors; > 2. Use strings with byte access semantics (so-called latin-1, which is > really a misleading name since it will most certainly contain utf-8- > encoded unicode text). > > From the C side, they have nearly identical APIs, and the conversion > functions do not transcode anything. > > From the scheme side, however: > 1. The bytevector library needs to be imported; > 2. The function names have way more characters to type; > 3. The bytevector library is missing a lot of text functions (like > join, split, trim, pad, searching...). > > If the user wants to always manipulate unicode (decoded) strings, using > either bytevectors or latin-1 strings require transcoding to enter the > library and to exit the library, so either option is valid. > > But if the user wants to always manipulate utf-8-encoded strings [1], > using bytevectors is impossible or much more difficult (see points > above). > > So, why should I ever use bytevectors? > > divoplade > > [1] https://utf8everywhere.org/ > > >