Sorry, those are just my descriptions. I say "half-blind" because basically I'd be leaving the user to feel around one function call at a time and "single-attribute-per-call" because they would end up gaining a single attribute of a message each function call if I can't return a struct or pointer to one. For example, in C they could iterate through an array of responses and access each message via a struct pointer. Without structs they would have to manipulate an internal stack which they could not see and would require a different global function call for each attribute of a message they wish to access.
Code:
//an interface for C
typedef struct
{
const char *message;
const char *sender;
unsigned int priority;
} message;
extern struct message *current_message();
Code:
//a struct-free interface
extern const char *current_message_text();
extern const char *current_message_sender();
extern unsigned int current_message_priority();
The difference might seem trivial, but when you extend that to 10 or more message attributes you have as many dynamic loads and casts to get right even for the smallest client program.
I did some research on both lisp and python before my first post and both only allow primative types (not all of them) and no structs as far as I can tell.
ta0kira
edit: I think I will need to build a separate library for non-C clients with quite a bit less functionality.