[2016-07-18 21:41] Amirouche Boubekki <[email protected]>
>
> On 2016-07-18 17:17, [email protected] wrote:
> > From: Dmitry Bogatov <[email protected]>
> >
> > Document '<foreign-type>' record type and 'define-foreign-type'
> > procedure.
>
> Can you compare this 'foreign-type' library with scheme-bytestructures
> [0]. How
> can both libraries help each other? Work hand in hand?
Seems that 'scheme-bytestructures' can be used to implement something like
`define-foreign-struct', but since it is not currently part of Guile, I, sure,
can't depend on it.
Also, 'parse-c-struct' provides similiar functionality.
> Tell me if I'm wrong but it looks like you have to define validate,
> encode and decode proc for every single structure with no
> helpers.
Not true. Sure, if your conversion is somewhat unusual, you have to
invoke `(define-foreign-type)', but if it conventional, you can use
- define-foreign-bitmask
(in future)
- define-foreign-struct (did not extracted from guile-bash)
- define-foreign-enumeration
- define-foreign-opaque
(last two are really trivial, just I did not needed them for xattr library)
> It seems to me that it's some kind of framework for doing validation
> of static typed procedures which also handles automatic conversion
> between C land and scheme land. Honestly this is not the kind of
> library I would use, I seldom do input validation when the client of
> my program is a developer. Maybe I'm wrong but IMO dynamic languages
> help that.
Our opinions on validation differs. I think, that foreign function
binding, created by (system foreign declarative) should be as good, as
if written in C. By this I mean, I want to get error message out of
function itself, not from some guts of (system foreign declarative).
> Also based on my small experience of ffi, there is not much
> conversion to do between scheme and C and what's best is to avoid
> any copy which is what does scheme-bytestructures.
(system foreign declarative) provide a way to work with memory with no copy:
(with-pointer ((memory *--> 1024))
(foreign-call memory)
(work-with-bytevector memory))
But take a look at (ice9 xattr) (patches 21-25).
Conversion from Scheme string to `const char *' have O(n) price, but I
prefered natural interface to perfomance. But again, (system foreign
declarative) does not force such choice.
It seems to me, that I responded to every point, but feel free to
refine your question.
--
Accept: text/plain, text/x-diff
Accept-Language: eo,en,ru
X-Web-Site: sinsekvu.github.io