On 5 July 2013 17:48, Henrik Johansen <henrik.s.johansen@veloxit.no> wrote:
On Jul 5, 2013, at 4:59 , Igor Stasenko wrote:
Well, to my thinking , in C 'string' defined as 'a sequence of characters (bytes) terminated by zero byte'. Yeah, except, you know, most/all libraries do not really deal with theoretically pure C strings, and we certainly when passing in "a string" from Smalltalk. In practice, we're dealing with passing/converting Smalltalk strings to functions expecting a pointer to bytes in a certain encoding. (either null-terminated or with an additional size arg)
There is nothing about encoding, because it is related to text, but C 'string' can be something else than human-readable text and contain anything and used for different purpose.
From that perspective, if strictly following such definition, i do not see how you can force encoding to be a mandatory part of it. (except from having special encoding, named "NO_ENCODING" ;)
And from that perspective, any user will *never* create safe bindings to/from anything but ASCII ByteStrings by default. FFI, meet 1988. And even those who do, have to jump through an excessive amount of hoops, ref https://dl.dropboxusercontent.com/u/6751081/Environment.zip
But sure thing, i am not opposed to having a really nice encoding/decoding schemes, which you can easily control.
The caveat is that options is applicable to whole callout's generated code. What if i have function which takes 2 arguments: - string with utf-8 encoding - string with utf-16 encoding
so, you cannot put that in options, because you need to control it on a per-argument basis.
The only way i see how to do that is same as in NBUTF8StringExample: you explicitly designate the type of argument e.g.
void foo(utf8String x, utf16String y)
No, not for FFI you don't. Any sane external library will never use different encodings for string parameters to the same method. In fact, I challenge you to find *any* which doesn't.
i agree. So, what's the plan? Each time user puts 'String' pseudo-type, demand encoding?
Cheers, Henry
-- Best regards, Igor Stasenko.